ARM处理器架构处理器的工作状态

发布者:CelestialGarden最新更新时间:2016-06-17 来源: eefocus关键字:ARM  处理器架构  工作状态 手机看文章 扫描二维码
随时随地手机看文章
      之前,一直都在看arm的驱动开发,最近看了ucos,同时也开始对arm的架构有了更深入一点的了解。大学学微机原理的时候学的是x86的架构,它和arm还是有挺多区别的。下面就整理一些自己的所学和在网上转载的关于arm架构的内容。有一本很好的讲arm架构的书:《ARM System Developer's Guide》。

      从编程人员的视角来看,arm核是由数据总线连接的功能单元组成,如下图所示:

        ARM处理器架构处理器的工作状态

        数据通过数据总线流向处理器核心,这里的数据可以是将要执行的指令,也可以是数据项.上面的图是Von Neumann体系的arm核,数据项和指令共用同一总线.而哈佛结构体系的arm核就会用两个不同的总线.就像所有的RISC处理器,arm采用load-store体系结构.也就是说它含有两条不同的指令类型来出入处理器.load指令将数据从内存拷贝到寄存器,store指令是将数据从寄存器拷贝到内存.没有直接操作内存中数据的数据处理指令.数据的处理离不开寄存器.

        ARM指令一般有两个源寄存器,Rn和Rm,和一个目的寄存器,Rd. ARM的一个重要特性是Rm可以在送入ALU之前被桶型移位器做预处理,这样就会有很多形式的表达式和寻址方式. 后面再写博客记录一下arm中的指令集。

        下面介绍ARM处理器的几个关键分量:寄存器,当前程序状态寄存器和流水线

 

一、寄存器。

        arm核一共有37个寄存器,有7种工作模式。其中在任一种工作模式下,可见的寄存器通常有18个(在user/system模式下可见的是17个)。另外,某几个寄存器(sp、lr、spsr)在不同的模式下对应的是不同的寄存器,所以总数加起来共有37个。所有的寄存器都是32bit大小.

        18个活动的寄存器包括:16个数据寄存器和2个程序状态寄存器.

      (1)数据寄存器由r0--r15表示. 其中r0-r12是通用寄存器,r13-r15是三个特殊的寄存器。

        r13通常用作栈指针(sp),存储当前处理器工作模式下的栈顶;

        r14被称作链接寄存器(lr),当发生函数调用时存放当前的pc指针,作为子程序的返回地址;

        r15被称作程序计数器(pc),保存被处理器预取的下一条指令的地址.

       这三个寄存器,在写汇编语句的时候都不用r13这种来表示,都是用sp、lr、pc来表示的。

      (2)两个程序状态寄存器:cpsr和spsr. 处理器的当前工作模式决定了哪些寄存器是可见的.

        cpsr:当前程序状态寄存器。ARM核使用cpsr来显示和控制内部的操作.通用程序状态寄存器的内部如下:

ARM处理器架构处理器的工作状态
 

    cpsr分为四个域,每个域有8位的宽度:flags,status,extension和control.control域包含处理器模式和状态以及中断屏蔽位.flags域包含condition flags.处理器模式决定了当前哪些寄存器是可用的以及cpsr本身的访问权限.

    当发生异常时,arm会自动将cpsr保存到spsr寄存器中。 

 

二、 处理器模式

       处理器模式分为特权模式和非特权模式:特权模式对cpsr有完全的读写控制.而非特权模式只能读cpsr的control域但是仍可以读写condition flags.一共有7种处理器模式:六种特权模式(abort,fiq,irq,svc,system和undefined)和一种非特权模式(user).

        abort:当试图访问内存失败时处理器会进入abort模式;

        fiq和irq对应ARM处理器的两种中断级别, irq是普通的中断模式,fiq是快速中断模式。

        svc是系统reset后进入的默认模式,也是os kernel工作的模式;

        system模式是user模式的特殊版本,它有对cpsr的读写控制.

        undefined模式在处理器遇到未定以的指令或者不支持的操作时使用.

        user模式在应用程序下使用.

在不同的模式下,有不同的Banked registers。所谓的banked register 就是说 这个寄存器是该模式所独有的,不与其他模式共享。

ARM处理器架构处理器的工作状态
 

 

        除了user模式,其它模式都可以通过直接写cpsr的模式位来改变处理器模式.当然,在异常或者中断到来时,硬件会自动切换模式.

下列异常和中断会引起模式切换:reset,irq,fiq,swi,data abort,prefetch abort和undefined instruction.

     

三、cpsr寄存器。

   下面接着讲cpsr寄存器。处理器模式对应的cpsr寄存器:

ARM处理器架构处理器的工作状态
 

 

  需要注意的是:通过直接写cpsr来改变模式的方法不会将cpsr拷贝到spsr.只有在异常或中断发生时cpsr的值才会保存到spsr。

  当ARM核上电时,处于svc特权模式.从特权模式开始是有用的:初始化代码完全控制cpsr来建立其他模式的堆栈.

  cpsr中的bit T是表明指令簇用的是ARM指令集还是thumb指令集.T为1表示thumb指令集,T为0表示ARM指令集.

  ARM指令集和thumb指令集的特性:

ARM处理器架构处理器的工作状态
 

   

 中断屏蔽位: 中断屏蔽位用来屏蔽处理器的特殊中断请求.在ARM核中有两种级别的中断请求:irq和fiq.

 cpsr中的中断屏蔽位是第7位和第6位(I和F),当I或F设为1时irq或fiq就被屏蔽了.       

 condtion flags: condition flags可以被比较操作和带S后缀的ALU操作来更新.

 

 

 四、异常 中断和向量表

        当异常发生时,处理器会将pc指向一个特殊的内存地址.该地址所在的地址范围称为向量表.向量表的入口是跳转指令,跳转到专门处理某个异常或中断的子程序.

        存储器映射地址0x00000000是为向量表预留的.在某些处理器中向量表可以放在更高的地址,从0xffff0000开始.linux等操作系统可以利用这个特性.

        当异常发生时,处理器挂起正常的处理然后从向量表中加载指令.每个向量表的入口都包含指向特殊处理例程的跳转指令.

 

        reset向量是处理器上电后执行的第一条指令,这条指令跳转到初始化代码处.

        undefined instruction向量是当处理器不能对指令译码时使用的.

        software interrupt向量执行SWI指令时使用的.SWI可以用来系统调用的实现.

        prefetch abort向量发生在当没有访问权限的条件下试图获取该地址的指令时,异常发生在译码阶段.

        data abort向量与prefetch abort类似,只不过是访问数据发生的异常.

        interrupt request向量被外部硬件用来中断处理器的正常执行.只有在cpsr的相应位为0时才能发生.

        fast interrupt request向量与irq类似,是为要求更短的中断响应时间的硬件保留的.只有在cpsr的相应位为0时才能发生.

 

 

五、流水线

        RISC处理器用流水线机制来执行指令.ARM流水线中的指令只有在完全通过执行阶段才被处理.

 

 

        上面这张图标明了流水线的使用和程序计数器pc.在执行阶段,pc总是指向该指令地址加上8字节.也就是说pc总是指向当前指令的下下条指令.当用pc来计算

        相对偏移量时这点是很重要的,并且它也是所有流水线的特征.

六、条件执行:

        条件执行控制指令是否被ARM核执行.处理器会比较指令的条件属性和cpsr中的condition flags,如果匹配,该指令执行;否则该指令被忽略.

关键字:ARM  处理器架构  工作状态 引用地址:ARM处理器架构处理器的工作状态

上一篇:ARM的SWI异常中断处理程序设计
下一篇:ARM 处理器如何处理异常

推荐阅读最新更新时间:2024-03-16 14:57

Linux下ARM/DSP双核系统通信接口设计
  引 言   嵌入式系统的核心是嵌入式微处理器和嵌入式操作系统。早期的嵌入式系统硬件核心是各种类型的8位和16位单片机;而近年来32位处理器以其高性能、低价格,得到了广泛的应用。近年来,又出现了另一类数据密集处理型芯片DSP。DSP由于其特殊的结构、专门的硬件乘法器和特殊的指令,使其能快速地实现各种数字信号处理及满足各种高实时性要求。随着现代嵌入式系统的复杂度越来越高,操作系统已成为嵌入式系统不可缺少的部分。免费的嵌入式操作系统,如Linux等,随着自身不断的改善,得到了飞速的发展。Linux是一个免费的、强大的、可信赖的、具有可伸缩性与扩充性的操作系统。Linux实现了许多现代化操作系统的理论,并且支持完整的硬件驱
[单片机]
Linux下<font color='red'>ARM</font>/DSP双核系统通信接口设计
ARM发布Mali-C71图像信号处理器,推动下一代汽车图像处理
2017年4月25日,中国北京——ARM今天正式发布Mali-C71图像信号处理器(ISP),应对汽车图像处理所面临的挑战,包括在极端条件下对图像进行快速的处理和分析,符合严苛的汽车安全标准的设计要求。Mali-C71也是ARM Mali Camera系列的第一款产品。 随着技术的演进,汽车已经成为一个充满活力的创新平台,不仅正在改变驾驶者的体验,也使得真正的自动驾驶离我们越来越近。先进驾驶辅助系统(ADAS)是这一技术演进的一个不可或缺的关键。一些最新的ADAS应用,例如更先进的后视镜、驾驶员疲劳检测以及行人保护系统,都对车内图像处理提出了更高的要求。这些技术要求更多数量的车内摄像头;据Strategy Analytics的
[汽车电子]
<font color='red'>ARM</font>发布Mali-C71图像信号<font color='red'>处理器</font>,推动下一代汽车图像处理
ARM多核处理器启动过程分析
说明: 该流程图按照代码执行时间顺序划分为4部分: 1. Bootloader在图片上半部,最先启动; 2. Kernel在图片下半部,由bootloader引导启动; 3.CPU0执行流程在图片左半部,bootloader代码会进行判断,先行启动CPU0; 4. Secondary CPUs在图片右半部,由CPU唤醒 具体启动流程如下: 1. 在bootloader启动时,会判断执行代码的是否为CPU0,如果不是,则执行wfe等待CPU0发出sev指令唤醒。如果是CPU0,则继续进行初始化工作。 mrs x4,mpidr_el1 tst x4,#15
[单片机]
嵌入式开发之ARM处理器的选择问题
很多嵌入式初学者都希望有一套自己能用的系统,但他们往往会产生一种错误认识,就是认为处理器版本越高越好,性能越高越好,就象很多人认为ARM9比ARM7好, 我想对于初学者在此方面以此入门还应该理智,开发系统的选择最终要看自己往嵌入式系统的哪个方向上走,是做驱动开发还是应用,还是做嵌入式系统硬件层设计与板级测试。如果想从操作系统层面或应用层面上走,不管是驱动还是应用,当然处理器性能越高越好了,但这个东西自学,有十分大的困难,不是几个月或半年或是一年二年能搞定的事。 在某种意义上讲,ARM7与ARM9的差别就是在某些功能指令集上丰富了些,主频提高一些而已,就比如286 和386。对于用户来讲可能觉察不到什么,只能是感觉速度有些快而已
[单片机]
基于ARM的某机载电台检测控制器设计
机载电台担负着空空和地空之间通信,为保证电台性能,需要对其进行定检。基于单片机的检测仪存在测量速度慢、可扩展性差的问题;而基于PXI仪器或VXI仪器的检测仪存在着功耗大、体积大、价格高等缺点。为解决上述问题,利用基于ARM处理器来实现电台检测控制器成为重要的发展方向,ARM是一种高性能、低功耗的RISC结构处理器,由于其出色的性能被广泛应用于工业控制、无线通讯、成像和安全、网络应用等方面,采用基于ARM的电台检测控制器具有可移植性强、可扩展性好、抗干扰能力强等优点。 1 硬件设计 良好的硬件设计是是解决基于单片机、PXI、VXI等系统的电台检测仪问题的关键。为实现硬件结构的模块化设计,硬件主要分为两大部分:主控制器
[单片机]
基于<font color='red'>ARM</font>的某机载电台检测控制器设计
带有ARM内核的车规级MCU的高速测量与标定的解决方案
在“新三化”的背景下,车用 MCU 芯片 正在快速升级换代,供应链本地化也催生搭配 ARM 内核的车规级MCU不断落地。相关的MCU 产品 日益丰富,逐渐覆盖雨刷、车窗、车灯等车身控制模块,以及汽车 智能 化所需的智能座舱、 AD AS 控制器 等。 01 趋势 随着软件的复杂度提高,ARM内核MCU的测量标定正从低速场景过渡到高速场景,ECU内部测量 信号 的数量和频率越来越大。当数据吞吐量超过 CAN 总线带宽时,需要新的高速测量 接口 。针对以上需求,Vector为用户提供系统的可扩展的高速测量方案。 02 系统概述 目前主流的ARM内核的车规级MCU是使用Cortex-M系列 处理器 ,用于安全
[汽车电子]
带有<font color='red'>ARM</font>内核的车规级MCU的高速测量与标定的解决方案
大大简化AMP配置与使用的Linux
嵌入式系统一般分为两大类:需要硬实时性能的;和不需要硬实时性能的。过去,我们不得不做出艰 抉择,即选择实时操作系统的性能还是我们钟爱的 Linux 系统的丰富特性,然后努力弥补不足之处。 典型的 AMP配置在很多方面类似于基于 PCI 的系统,即 Linux 域起到主机作用,RTOS域起到适配器作用,并有一个或多个共享存储器域用来实现两个域之间的通信。不过与 PCI 不同,AMP 配置能更方便、动态地为一个或另一个域分配资源(标准外设和自定义逻辑)。此外,Linux/RTOS AMP 系统能根据运行时间要求——例如各种外部设备的有无——动态地重新配置可编程逻辑。 灵活程度通常会与建立 AMP 系统所涉及的复杂性和难度息息相
[单片机]
大大简化AMP配置与使用的Linux
三星ARM处理器S3C4510B的HDLC通道使用及编程
摘要 三星16/32位ARM处理器S3C4510B是目前在国内应用非常广泛的一种性价比很高的ARM处理器,本文在介绍S3C4510B中HDLC通道结构特点的基础上,详细说明了4510中HDLC通道在DMA收发方式下的工作过程,使用方法和编程中的一些注意事项。 1:S3C4510B简介 S3C4510B(以下简称4510)是韩国三星公司开发的一款基于ARM7TDMI架构的16/32位高性能微处理器。具用丰富的外围接口,如以太网,HDLC等,可灵活配置,适用于多种应用。4510具有以下性能特点: ◆ 8K字节的内部CACHE,也可用作内部SRAM ◆ 两线IIC接口,作为IIC主器件使用 ◆ 以太网控制
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved