ARM处理器是一种16/32位的高性能、低成本、低功耗的嵌入式RISC处理器。ARM公司本身不生产,授权给各半导体产商生产。目前是应用最为广泛的嵌入式处理器。
RISC 精简指令集计算机
Reduced Instruction Set Computing
ARM体系结构变种:
T变种:Thumb 指令集是将ARM指令集的一个子集重新编码而形成了一个指令集。指令长度为16位。ARM指令长度是32位。第一次是在ARM4中引入
M变种:M变种增加了两条乘法操作的指令,使ARM可以将两个32位的整数乘为一条64位的整数。第一次是在ARM3的版本中引入。
E变种:增强形DSP指令。具有几条新的实现16位数据乘法和乘加操作的指令。实现饱和的带符号的加减法操作指令,所谓饱和的带符号数的加减法操作是指在加减法操作溢出时,结果并不进行卷绕,而是使用最大的整数或最小的复数来表示。
E变种首先在ARM体系版本的5T中使用。在ARM5之前的版本以及非M和非T变种的版本中,E变种是无效的。
J变种:java加速器,jazelle。给java提供了加速功能,使java代码运行速度提高了8倍,功耗降低了80%。第一次使用是在ARM4TEJ中。
SIMD 变种:SIMD为媒体功能拓展,为嵌入式应用系统提供了高性能的音频/视频处理技术。
表示ARM/Thumb体系版本的命名格式为:
在ARM体系版本4以后,M变种成为系统的标准功能,字符M通常不需要列出来
ARMVx。
ARM处理器系列:
ARM7系列,ARM9,ARM9E,ARM10E,securCore,Intel的Xscale,Intel 的 StrongARM,这些处理器最高主频达到了800MIPS,功耗数量级为mW/mHZ.对于支持同样ARM体系版本的处理器,其软件是兼容的。
ARM7:低功耗的RISC处理器,主要用于对功耗和成本要求苛刻的消费类产品。其最高主频可以达到130MIPS.ARM7系列处理器支持16位的Thumb指令集,使用Thumb指令集可以用16位的系统开销得到32位的系统性能。ARM7系列包括:ARM7TDMI,ARM7TDMI-S,ARM7EJ-S,ARM720T四种类型。
ARM9:使用ARM9TDMI处理器核,包含了16位的Thumb指令集的32位RISC处理器。主要包括ARM920T,ARM922T,ARM940T三种类型。
ARM9系列处理器具有以下主要特点:支持32位ARM指令集和16位Thumb指令集的RISC处理器。
五级整数流水线。
单一的32位AMBA总线接口。
MMU支持windows CE、plam OS、Symbian OS、Linux等。
MPU支持实时操作系统,包括VxWorks。
统一的数据Cache和指令Cache。
提供0.18um、0.15um以及0.13um的生产工艺。
ARM9E: ARM9E系列处理器使用单一的处理器内核,提供了微控制器,DSP、Java应用系统的解决方案,从而极大地减少了芯片的尺寸以及复杂程度,降低了功耗,缩短了产品面世时间。提供了增强的DSP处理能力,非常适合那些需要同时使用DSP和微控制器的应用场合,其中ARM926EJ-S包含了jazzele技术。
SecurCore系列:提供了基于高性能的32位RISC技术的安全解决方案,Securcore 系列处理器除了具有体积小,功耗低,代码密度大和性能高特点外,还有自己的优势,即提供了安全解决方案的支持。
具有以下特点:
1.支持ARM指令集和Thumb指令集,以提高代码密度和系统性能。
2.采用软内核技术,以提供最大限度的灵活性,以及防止外部对其进行扫描探测。
3.提供了安全特性,抵制攻击。
4.提供面向智能卡的和低成本的存储保护单元(MPU).
5.可以集成用户自己的安全特性和其他的协处理器。
ARM处理器的7种运行模式:
ARM处理器共有37个寄存器。其中包括:
31个通用寄存器,包括程序计数器(PC)在内。这些寄存器都是32位寄存器
6个状态寄存器,这些寄存器分别对应ARM处理器的七种运行模式,其实系统模式和用户模式使用同样的寄存器。目前只使用到了12位
通用寄存器可以分为下面三类:
未备份寄存器,包括R0~R7。
备份寄存器,包括R8~R14。
程序计数器PC,即R15。
备份寄存器通过R13_<mode>区分,其中,<mode>可以是以下几种模式之一:usr、svc、abt、und、irq、fiq。寄存器R13中常用作栈指针,在ARM指令集中,这是一种习惯的用法。在Thumb指令集中,有一些指令强制性使用R13作为栈指针。
R14是作为连接寄存器。每一种处理器模式自己的物理地址R14中存放着当前子程序的返回地址。
R15是程序计数器,又被记做PC。它虽然可以作为一般的通用寄存器使用,但是有一些指令在使用R15时有一些特殊限制。当违反了这些限制时,该指令执行的结果将是不可预料的。
由于ARM采用了流水线机制,当正确读取了PC的值时,该值为当前指令地址值加8个字节,也就是说,对于ARM指令集来说,PC指向当前的下两条指令的地址,由于ARM是字对齐的,PC值得第0位和第一位总为0。即:BIT[1:0]=0b00
CPSR是当前程序状态寄存器,它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位,每一种处理器模式下都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器)。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容,当中断程序退出时,可以用SPSR中保存的值来恢复CPSR。用户模式和系统模式没有SPSR。格式如下
条件标志位:
N:本位设置成当前指令运算结果的BIT[31]的值
当两个补码表示的有符号的整数运算时,N=1表示运算的结果为负数;N=0表示结果为正数或0.
Z: Z=1表示运算的结果为零;Z=0表示运算的结果不为0,对于CMP指令,Z=1表示进行比较的两个数大小相等。
C:下面分4种情况讨论C的设置方法:
在加法指令中(包括比较指令CMN),当结果产生了进位,则C=1,表示无符号数运算发生上溢出;其他情况下C=0;
在减法指令中(包括比较指令CMP),当运算中发生了借位,则C=0,表示无符号数运算发生下溢出;其他情况下C=1
对于包含移位操作的非加减法运算指令,C中包含最后一次被溢出的位的数值,
V:对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数,V=1表示符号位溢出,通常其他的指令不影响V位,具体可参考各指令的说明
Q标志位:ARMV5的E系列处理器中,CPSR的BIT[27]称为Q标志位,主要用于指示增强的DSP指令是否发生了溢出,同样的SPSR中的BIT[27]也称为Q标志位,主要用户恢复CPSR的标志。
ARM处理器对异常中断的响应过程如下所述:
1.保持处理器当前状态,中断屏蔽位以及各条件标志位。这是通过将当前程序状态寄存器CPSR的内容保存到相应异常中断模式的SPSR寄存器中实现的,各异常中断有自己的物理SPSR寄存器。
2.设置当前程序状态寄存器CPSR中相应的位,如使处理器进入相应的执行模式,禁止相应的外部中断等。
3.将寄存器lr_mode设置成返回地址。
4.将程序计数器(PC)设置成该异常中断的中断向量地址,从而跳转到相应的异常中断处理程序处执行。
ARM处理器非对其的数据访问操作: 即低两位不为0b00。系统定义了下面三种可能的结果:
1.执行的结果不可预知。
2.忽略字单元地址的低两位的值,
3.忽略字单元地址中的低两位的值。由存储系统实现这种忽略,也就是说,该地址原封不动地送到存储系统。