一、ARM微处理器系列介绍
1.1 ARM的版本号含义
不同的体系结构对应着不同的指令集,ARM公司给这些在不同阶段体系结构中使用的指令集定义了版本号,版本号的名称为ARMvx(符号x代表数字,即1,2,3,…)。
1.2 ARM系列中的一些符号含义
以“ARM”字符为前缀的微处理器核名称中,还经常会出现以下一些符号:
(1)T:支持高密度16位的压缩Thumb指令集。
(2)D:支持片上调试。
(3)M:支持64位除法。
(4)I:具有Embeded-ICE(即嵌入式的ICE),支持片上断点。
(5)E:增强性,具有Java,DSP等增强的处理功能。
(6)S:表示综合处理器。
(7)J:表示具有Jazelle技术,该技术支持。
1.3 Cortex系列中的一些符号含义
Cortex系列是ARM公司对新的微处理器核的命名前缀,它所对应的指令集版本号是ARMv7。
Cortex系列的微处理器核名称中,还经常会出现以下一些符号:
(1)M:针对微控制器和低成本应用提供优化的系列。
(2)R:针对实时系统应用的系列。
(3)A:针对面向高端的应用,支持基于虚拟内存的操作系统。
二、ARM9微处理器特征
ARM9系列微处理器是目前在我国用得最广泛的、拥有高性价比的一种嵌入式微处理器,其采用了低功耗的32位RISC结构,非常适合应用在要求低成本、低功耗的消费类产品中。
2.1 ARM9的指令流水
ARM920T微处理器的指令流水采用了典型的RISC 5级流水线结构,将指令的处理过程分为取指、译码、执行、访存和写回5个步骤。5级流水线结构采用分离指令缓存和数据缓存的结构,即哈佛结构,将每一条指令处理分配到3个或者5个时钟周期内完成,也就是说,在每一个时钟周期内同时可能有5条指令在处理,消除了指令处理的性能瓶颈,加快了指令处理速度。
2.2 ARM9指令集特点
ARM920T的指令集是基于精简指令集计算机(RISC)原理,RISC指令集计算机机与复杂指令集计算机(CISC)相比较而言,译码机制简单,从而使RISC指令集的微处理器具有以下一些优点:
(1)较高的指令吞吐率。
(2)实时中断响应性能好。
(3)具有体积小、性价比高的处理器宏单元。
2.3 ARM9的工作模式
ARM9微处理器核共支持7种工作模式,在不同的工作模式下,算术运算及逻辑运算等操作所使用的通用寄存器组不同。ARM9处理器核中每组通用寄存器有16个,整个ARM9核共有31个通用寄存器。
处理器模式 | 模式符号 | 意义 |
---|---|---|
用户模式 | Usr | 正常执行程序时的处理器模式 |
系统模式 | Sys | 运行特权操作系统任务时的模式 |
管理模式 | Svc | 操作系统的保护模式 |
中止模式 | Abt | 指令或数据预取操作中止时的模式,该模式下实现虚拟存储器或存储器保护 |
未定义模式 | Und | 当执行未定义的指令时进入该模式 |
IRQ模式 | Irq | 响应普通中断时的处理模式 |
FIQ模式 | Fiq | 响应快速中断时的处理模式 |
7种模式中,对于除用户模式外的其他6种工作模式统称为特权模式,其中,又把管理模式、中止模式、未定义模式、IRQ模式、FIQ模式5种工作模式统称为异常模式。
ARM9微处理器核的工作模式是可以通过软件控制来改变的,而且外部中断信号或系统异常处理也可以使工作模式发生改变。
通常情况下,系统的应用程序是在用户模式下执行。当工作在用户模式下,ARM9微处理器核所执行的程序不能访问呢那些被保护的系统资源,也不能改变为处理器核的工作模式。但是,当系统发生异常时,ARM9微处理器核的工作模式就会改变。
三、ARM9的存储组织结构
3.1 ARM9中的地址特征
ARM9微处理器核的每个地址是对应于一个存储字节而不是一个存储字,但ARM9微处理器核可以访问存储字。访问存储字时,其地址应该是字对准的,即字地址可以被4整除。
ARM9微处理器核中的PC寄存器是32位的,地址通常是无符号的整数形式,因此地址计算时会产生在地址空间中上溢或下溢的情况。若产生地址上溢或下溢,PC寄存器中的值又会从0x00000000开始。
目的地址的计算公式:
若程序是顺序执行,则每条顺序执行的指令执行后,其下一条需顺序执行的指令地址计算公式:
或者说,每条顺序执行的指令执行后,PC寄存器的值均顺序加4。
ARM9存储器系统的存储单元与地址的对应方式有两种:
(1)大端存储系统:字的地址对应的是该字中最高有效字节所对应的地址;半字的地址对应的是该半字中最高有效字节所对应的地址。也就是说,32位数据的最高字节存储在低地址中,而其最低字节则存储在高地址中。
(2)小端存储系统:字的地址对应的是该字中最低有效字节所对应的地址;半字的地址对应的是该半字中最低有效字节所对应的地址。也就是说,32位数据的最高字节存储在高地址中,而其最低字节则存放在低地址中。
3.2 内部寄存器
3.2.1 R0-R15寄存器
R0-R15称为通用寄存器,其中,R0-R7是不分组的寄存器;R8-R14是根据工作模式进行分组的寄存器;R15是程序计数器,也是不分组的。
R0-R7寄存器是不分组的,在所有的工作模式下,它们物理上是同一个寄存器。也就是,无论你访问R0-R7的哪一个寄存器,不管在哪种工作模式下,访问到的是同一个32位物理寄存器。
R13寄存器的作用通常是堆栈指针,又称为SP。每种异常模式都有对应于该模式下的R13物理寄存器。R13寄存器在初始化时,应设置为指向本异常模式下分配的堆栈空间的入口地址。
R14寄存器被称为链接寄存器,又称为LR,实际上就是用作子程序调用时或异常引起的程序分支时的返回链接寄存器。
3.2.2 CPSR寄存器
CPSR寄存器称为当前程序状态寄存器,又称为R16.
各种条件标志
(1)N标志:当指令执行结果是带符号的二进制补码时,若结果为负数,则N标志位置1,若结果为正数或0,则N标志位置0。
(2)Z标志:又称为0标志,当指令执行结果为0时,Z标志置1,否则Z标志置0。
(3)C标志:又称为进位标志。对C标志产生影响的方式根据指令的不同有所不同。若是加法指令以及比较指令CMN,当指令执行结果产生进位时,则C标志置1,否则C标志置0;若是减法指令以及比较指令CMP,当指令执行结果产生借位时,则C标志置于0;否则C标志置1。
(4)V标志:又称为溢出标志,对V标志产生影响的方式根据指令的不同有所不同。若是加法或减法指令,当指令执行结果产生符号溢出时,V标志置1;若是非加法/减法指令,V标志不会改变。
模式位
M[4:0] | 模式 | 可访问的寄存器 |
---|---|---|
10000 | 用户 | PC、R14~R0、CPSR |
10001 | FIQ | PC、R14_fig~R8_fig、R7~R0、CPSR、SPSR_fiq |
10010 | IRQ | PC、R14_irq、R13_irq、R12~R0、CPSR、SPSR_irq |
10011 | 管理 | PC、R14_svc、R13_svc、R12~R0、CPSR、SPSR_svc |
10111 | 中止 | PC、R14_abt、R13_abt、R12~R0、CPSR、SPSR_abt |
11011 | 未定义 | PC、R14_und、R13_und、R12~R0、CPSR、SPSR_und |
11111 | 系统 | PC、R14~R0、CPSR |
四、ARM9异常
4.1 ARM9异常类型及向量地址
异常处理模式
异常名称 | 对应模式 | 正常向量 | 高地址向量 |
---|---|---|---|
复位 | 管理 | 0x00000000 | 0xFFFF0000 |
未定义指令 | 未定义 | 0x00000004 | 0xFFFF0004 |
软件中断(SWI) | 管理 | 0x00000008 | 0xFFFF0008 |
预取中止(取指令存储器中止) | 中止 | 0x0000000C | 0xFFFF000C |
数据中止 | 中止 | 0x00000010 | 0xFFFF0010 |
IRQ(中断) | IRQ | 0x00000018 | 0xFFFF0018 |
FIQ(快速中断) | FIQ | 0x0000001C | 0xFFFF001C |
1、 复位异常
当系统上电及按下复位按键时,ARM920T微处理器上会收到一个复位信号。当微处理器收到复位信号后,产生复位异常,将中断执行当前指令。并在禁止中断的管理模式下,从地址0x00000000或0xFFFF0000开始执行程序。
2、 未定义指令异常
当ARM920T微处理器执行未定义的指令时,会产生未定义指令异常。未定义指令异常产生后,微处理器的PC值将被赋予0x00000004,开始从此地址执行指令。
3、 软件中断异常
微处理器执行软件中断指令SWI即产生软件中断异常,微处理器进入管理模式,以请求特定的管理(操作系统)函数。软件中断异常产生后,微处理器的PC值被赋予0x00000008,将从此地地址处开始执行指令。
4、 中止异常
中止异常通常发生在ARM9微处理器对存储器访问失败时,在存储器访问周期内,ARM9微处理器会检查是否发生中止异常。中止异常通常包括两种类型:
(1) 指令预取中止:发生在指令预取后。当ARM9微处理器进行指令预取时,若此时访问存储器失败,则存储器系统会想ARM9微处理器发生存储器中止信号,被预取的指令将被记为无效。当微处理器执行这个无效的指令时,指令预取中止异常才会发生,但如果该无效指令未被执行,则指令预取中止不会发生。
(2) 数据中止:发生在数据访问时。即若读/写数据存储器时,访问存储器失败,将发生数据中止。
5、 IRQ(中断请求)
IRQ异常是由外部中断信号引起的。当外部部件在ARM9微处理器的nIRQ引脚上施加一个有效信号(即中断请求信号),那么,IRQ异常将发生。IRQ异常发生后,微处理器的PC值将被赋予0x00000018,微处理器将从此地址处开始执行程序。
6、 FIQ(快速中断请求)
FIQ异常也是由外部中断信号引起的。当外部部件在ARM9微处理器的nFIQ引脚上施加一个有效信号,那么,FIQ异常产生。FIQ异常模式下有足够的私有寄存器,且支持数据传送和通道处理方式,从而,当异常发生进入异常服务时,可避免对寄存器压栈保存的需求,减少了进入异常或退出异常过程中的总开销。
4.2 优先级
优先级 | 异常 | 优先级 | 异常 |
---|---|---|---|
1(最高) | 复位 | 4 | IRQ |
2 | 数据中止 | 5 | 预取中止 |
3 | FIQ | 6 (最低) | 未定义指令,SWI |
4.3 进入异常
当异常产生时,微处理器进入一个异常服务程序时,需进行以下操作:
(1) 把断点处的下一条指令地址保存到相应的R14寄存器中。
(2) 把状态寄存器CPSR的值自动复制到对应工作量模式下的SPSR寄存器中,以保存断点处的状态
(3) 根据异常的模式,自动把CPSR寄存器的模式位M[4:0]设置成对应的值,并使得微处理器工作在相应的工作模式下。
(4) 自动使PC指向相关的异常向量,从该向量地址处取一条指令进行执行。
4.4 退出异常
当异常处理完成后,ARM9微处理器需退出异常,返回原来断点处继续执行。退出异常将进行以下操作:
(1) 将保存在R14寄存器的值,再回送到PC中。
(2) 再将SPSR寄存器的值回送到CPSR寄存器中。
(3) 对中断禁止位标志进行清除。
4.5 转移发生时的R14内容及回送指令
发生转移条件 | LR回送PC的指令 | ARM状态 | Thumble状态 |
---|---|---|---|
子程序调用 | MOVS PC,R14 | 当前指令地址+4 | 当前指令地址+2 |
软件中断异常 | MOVS PC,R14 | 当前指令地址+4 | 当前指令地址+2 |
未定义异常 | MOVS PC,R14 | 当前指令地址+4 | 当前指令地址+2 |
FIQ异常 | SUBS PC,R14,#4 | 当前指令地址+8 | 当前指令地址+6 |
IRQ异常 | SUBS PC,R14,#4 | 当前指令地址+8 | 当前指令地址+6 |
指令预取中止异常 | SUBS PC,R14,#4 | 当前指令地址+8 | 当前指令地址+6 |
数据预取中止异常 | SUBS PC,R14,#8 | 当前指令地址+12 | 当前指令地址+10 |
五、ARM9寻址方式
5.1 立即寻址
指令操作中所需的数据没有存放于任何存储器或寄存器中,而是一个立即数。因此,指令操作码字段的地址码部分是操作数本身,而不是操作数对应的存储器地址或寄存器编号。
5.2 寄存器寻址
指令操作中所需要的数据存储在某个寄存器里,指令操作码中的地址码部分是寄存器的编号。
5.3 寄存器移位寻址
指令操作中所需的第二个操作数存储在寄存器中,它与第一个操作数之前,需要先进行移位操作。
移位操作指令助记符:
(1) LSL:存储第二个操作数的寄存器逻辑左移,寄存器的低端空出位来补0。
(2) LSR:存储第二个操作数的寄存器逻辑右移,寄存器的高端空出位来补0。
(3) ASR:存储第二个操作数的寄存器算术右移。
(4) ROR:存储第二个操作数的寄存器循环右移。
(5) RRX:存储第二个操作数的寄存器带C标志的循环右移。
5.4 寄存器间接寻址
指令代码中的地址码是某一通用寄存器的编号,指令操作所需的操作数存放在该指定寄存器内容所对应的存储单元中,也就是说,寄存器的内容是存储该操作数的存储器地址。
5.5 变址寻址
变址寻址方式是将基址寄存器的内容与指令中给出的地址偏移量相加,从而得到操作数有效地址的一种寻址方式。
(1) 基址加偏移量寻址:基址寄存器的内容加上或减去地址偏移量,即为操作数的有效地址。
(2) 基址加索引寻址:索引寄存器的值作为偏移量加到基址上形成有效地址。
5.6 多寄存器寻址
多寄存器寻址允许在一条指令中完成传送几个寄存器的值,即允许用一条指令实现16个寄存器的任何子集的传送操作。