微处理器系统结构与嵌
入式系统设计
第七章 ARM微处理器编程模型
ARM内核体系结构
ARM编程模型
处理器工作状态
处理器运行模式
寄存器组织
数据类型和存储格式
异常
ARM是Advanced RISC
Machines的缩写,该公司设计
了大量高性能、廉价、耗能低
的RISC (精简指令集)处理器;
ARM公司的特点是只设计
而不生产。它将技术授权给世
界上许多著名的半导体、软件
和OEM厂商,并提供服务。
将技术授权给
其它芯片厂商
形成各具特色
的ARM芯片
3/95
ARM的应用领域
1. 工业控制领域 过程控制、电力控制、数控机床、ABS
2. 无线通讯领域 基站、带蓝牙/定位等的手机/PDA、GPS
3. 网络应用 ADSL、路由器、交换机、VoIP
4. 消费类电子产品 DVD、机顶盒、游戏机
5. 成像产品 数码相机、打印机、录像机
6. 安全产品 ATM机、POS机、考勤系统、SIM卡
到目前为止,基于ARM技术的微处理器应用约占据了32位嵌入式微处理
器75%以上的市场份额;
全球80%的GSM/3G手机、99%的CDMA手机以及绝大多数PDA产品均采
用ARM体系的嵌入式处理器,“掌上计算”相关的所有领域皆为其所主宰;
4/95
ARM体系结构的特点
1. RISC简单的结构使ARM内核非常小、功耗低、成本低
2. 统一和固定长度的指令域,简化了指令的译码,便于指令流水线设计
3. 采用装载/保存结构,数据处理操作只针对寄存器的内容,而不直接对存储
器进行操作
4. 支持Thumb(16 位)/ARM(32 位)双指令集,能很好的兼容8 位/16
位器件
5. 每条数据处理指令都对算术逻辑单元和移位器控制,实现了ALU和移位器的
最大利用
6. 寻址方式灵活简单,执行效率高
7. 地址自动增加和减少寻址模式,优化程序循环
8. 多寄存器装载和存储指令实现最大数据吞吐量
9. 所有指令的条件执行实现最快速的代码执行
5/95
ARM处理器内核流水线工作流程
ARM体系结构的版本
ARM架构自诞生至今已发展并定义了V1
到V7七种不同的版本
V1版架构 只在原型机ARM1中出现过
– 支持基本的数据处理指令(无乘法)
– 支持字节、半字和字的LOAD/STORE指令
– 支持转移指令,包括子程序调用及链接指令
– 支持软件中断指令SWI
– 寻址空间位64MB(26位)
* 7/95
V2版架构 已废弃不再使用
– 支持乘法和乘加指令
– 支持协处理器操作指令
– 支持基本的存储器与寄存器交换指令SWP/SWPB
– 支持快速中断模式
V3版架构 已废弃不再使用
– 寻址范围扩展到4GB(32位)
– 快速中断模式具有两个以上的分组寄存器
– 增加状态寄存器CPSR/SPSR,及从异常处理返回的
MSR/MRS指令,便于异常的处理
– 增加了中止和未定义两种处理器模式
* 8/95
V4版架构 目前应用最广的ARM体系结构,ARM7、ARM8、
ARM9和StrongARM都采用该版架构
– 增加了有/无符号的半字和有符号字节的Load/Store指令
– 增加了16位Thumb指令集
– 完善了软件中断SWI指令的功能
– 增加了处理器的特权模式
V5版架构 ARM10和XScale都采用该版架构
– 改进了ARM/Thumb状态之间的切换效率;
– E-增强DSP指令集,包括全部算法操作和16位乘法操作;
– J-支持新的JAVA,提供字节代码执行的加速功能
– 增加了带有链接和交换指令BLX
– 增加了计数前导零指令CLZ
– 增加了软件断点指令
– 为协处理器增加更多可选择的指令
9/95
V6版架构 ARM11处理器采用该版架构
– 增加了多媒体功能扩展SIMD,提高了嵌入式应用系统的音、视频
处理能力
– 改进了内存管理
– 改进了混合端与不对齐数据支持,使得小端系统支持大端数据
V7版架构 Cortex-A/M/R系列处理器采用该版架构
– 2005年发布,采用Thumb-2技术。
– M系列→传统单片机市场
– A系列→高端应用处理器市场
– R系列→实时性控制
* 10/95
ARM处理器核与体系结构的对应关系
核 体 系 结 构
ARM1 ARMv1
ARM2 ARMv2
ARM2aS,ARM3 ARMv2a
ARM6,ARM600,ARM610,ARM7,ARM700,ARM710 ARMv3
Strong ARM,ARM8,ARM810 ARMv4
ARM7TDMI,ARM710T,ARM720T,ARM740T,ARM9TDMI,
ARM920T,ARM940T
ARMv4T
ARM9E-S,ARM10TDMI,ARM1020E ARMv5TE
ARM1136J(F)-S,ARM1176JZ(F)-S,ARM11MPCor ARMv6
ARM1156T2(F)-S ARMv6T2
ARM Cortex-M,ARM Cortex-R,ARM Cortex-A ARMv7
ARM处理器(核)命名规则
ARM{x}{y}{z}{T}{D}{M}{I}{E}{J}{F}{-S}
x——系列号
y——存储管理/保护单元
z——Cache
T——Thumb指令集
D——JTAG调试器
M——快速乘法器
I——嵌入式跟踪宏单元
E——增强DSP指令
J——Jazelle技术
F——向量浮点单元
S——可综合的内核
ARM7TDMI-S
ARM926EJ-S
ARM966ES
ARM1022E
2:带MMU
4:带MPU
6:无MMU和MPU
0:标准cache
2:小cache
6:可变cache
12/95
ARM芯片、内核和CPU的关系
ARM CPU
数据通路
ARM CPU
控制逻辑
ARM 内核
ARM CPU
ARM 芯片
ARM 内核
项目 ARM7 ARM9 ARM10 ARM11
流水线 3 5 6 8
典型频率
MHz 80 150 260 335
功耗
mW/MHz
(+cache)
(+cache)
(+cache)
性能
MIPS/MHz
架构 冯诺伊曼 哈佛 哈佛 哈佛
ARM处理器(核)比较
ARM系列 微处理器核 特点
ARM7 ARM7TDMI:整数处理核
ARM7TDMI 处理器的可
综合版本;
ARM720T:带MMU的处理
器核心,支持操作系统;
ARM7EJ-S:带有DSP和
Jazelle TM 技术,能够实现
Java加速功能
• 冯诺伊曼体系结构;
ARM7TDMI是目前应用最广的微处理
器核
ARM720T带有MMU和8KB的指令数
据混合cache;
ARM7EJ-执行ARMv5TEJ指令,5级
流水线,提供Java加速指令,没有存
储器保护。
ARM9 ARM920T:带有独立的
16KB 数据和指令Cache;
ARM922T:带有独立的8位
KB 数据和指令Cache;
ARM940T–包括更小数据和
指令Cache和一个MPU
• 基于ARM9TDMI ,带16位的Thumb
指令集,增强代码密度最多到35%;
在µm工艺下最高性能可达到
300MIPS(Dhrystone 测试标准);
集成了数据和指令Chche;
32位AMBA总线接口的MMU支持;
可在µm、 µm和µm工艺的
硅芯片上实现。
ARM处理器(核)简介
* 16/95
ARM9E ARM926EJ-S:Jazelle 技术,有
MMU,可配置的数据和指令
Cache,TCM接口;
ARM946E-S:可配置的数据和指令
Cache及TCM;
ARM966E-S:针对要求高性能和低功
耗的可预测的指令执行时间的硬实时应
用设计
ARM968E-S:最小、功耗最小的
ARM9E系列处理器,针对嵌入式实时
应用设计;
ARM9E是针对微控制器、DSP和Java的单处理器
解决方案;
ARM Jazelle 技术提供 8倍的 Java 加速性能
(ARM926EJ-S) ;
5-级整数流水线;
在µm工艺下最高性能可达到
300MIPS(Dhrystone 测试标准);
可选择的 向量浮点单元VFP9 协处理器指令优秀
海浮点性能,对于3D图形加速和实时控制可达到
215MFLOPS。
高性能的AHB总线,带MMU
可在µm, µm, µm工艺的硅芯片上实
现。
ARM10E ARM1020E:带DSP指令集,在片调
试功能,独立的32KB数据和指令
Cache,MMU支持;
ARM1022E:与ARM1020E相同,只
是独立的数据和指令Cache变为16KB
;
ARM1026EJ-S:同时具有MPU和
MMU,可综合版本;
带分支预测的6级整数流水线;
在µm工艺下最高性能可达到
430MIPS(Dhrystone 测试标准);
对于3D图形运算和实时控制采用VFP协处理器,
浮点运算性能最高可达650MFLOPS;
双64位AMBA总线接口和64位内部总路线接口;
优化的缓存结构提高了处理器访问低速存储器的
性能;
可在µm, µm, µm工艺的硅芯片上实
现
ARM11 ARM11 MPCore:可综合的多
处理器核,1至4个处理器可配
置;
ARM1136J(F)-S:可配置的数
据和指令Cache,可提供位
的MPEG4编码加速功能;
ARM1156T2(F)-S:带集成浮
点协处理器,带内存保护单元
MPU ;
ARM1176JZ(F)-S:带针对
CPU和系统安全架构扩展的
TrustZone技术。
增强的Thumb、Jazelle、DSP扩展支持;
带片上和系统安全TrustZone 技术支持
;
在µm工艺下最高可达到550MHz;
MPCore在µm工艺下最高性能可达到
740MIPS(Dhrystone 测试标准);
支持多媒体指令SIMD;
采用三种电源模式:全速/待命/休眠
集成DMA的TCM
低功耗、高性能。
SecurCor
e
SC100:第一个32位安全处理
器;、SC110:在SC100上增
加密钥协处理器;
SC200:带Jazelle技术的高级
安全处理器;
SC210:在SC200上增加密钥
协处理器
SecurCore是专门为智能卡、安全IC提供
的32位安全处理器, 为电子商务、银行、
网络、移动多媒体、公共交通提供安全解决
方案;
体积小、功耗低,代码压缩密度高;
为快速增长的Java卡平台提供Java加速
功能;
Cortex Cortex-A:面向应用的微
处理器,针对复杂操作系统
和应用程序设计;
Cortex-R:针对实时系统
的嵌入式处理器;
Cortex-M:针对成本敏感
应用优化的深度嵌入式处理
器;
2004年发布,提供增强的媒体和数字
处理能力,增加了系统性能;
支持ARM、Thumb、Thumb-2指令
集;
Thumb-2指令集提供了更高的代码存
储密度,进一步降低成本;
Intel系
列
(Marve
ll)
StrongARM:ARMv4体系
XScale:ARMv5TE体系,
增加MMX指令
StrongARM主要应用于手持设备和PDA
,5级流水线,具有独立的数据和指令
Cache,不支持Thumb指令集,目前已停
产;
XScale是目前Intel公司主推的高性能嵌
入式处理器,分通用处理器、网络处理器
和I/O处理器三类。其中通用处理器有
PXA25x、PXA26x、PXA27x三个系列,
被广泛应用于智能手机、PDA领域。
ARM编程模型
ARM处理器的工作状态
ARM状态 执行32位字方式的ARM指令
Thumb状态 执行16位半字方式的Thumb指令(P220)
Jazelle状态 执行可变长的、以字节为单位的
Jazelle(Java)指令(P220)
注意:
1. 处理器复位后处于ARM状态;
2.处理器异常处理时进入ARM状态;
3.若处理器在Thumb状态进入异常,则异常返回
仍然自动转换到Thumb状态;
4.状态切换不影响工作模式及寄存器内容。
* 20/95
ARM处理器工作状态的切换
使用跳转指令BX可将处理器内核在ARM状
态和Thumb状态之间进行切换。
;从Arm状态切换到Thumb状态
LDR R0,=Lable+1
BX R0
;从Thumb状态切换到ARM状态
LDR R0,=Lable
BX R0
地址最低位为1,表示
切换到Thumb状态
地址最低位为0,表示
切换到ARM状态
跳转地址标号,最低2bit为0
* 21/95
处理器模式 说明 备注
用户(usr) 正常程序执行模式 不能直接切换到其它模式
系统 (sys) 运行操作系统的特
权任务
与用户模式类似,但具有可以
直接切换到其它模式等特权
快中断 (fiq) 支持高速数据传输
及通道处理
FIQ异常响应时进入此模式
中断 (irq) 用于通用中断处理 IRQ异常响应时进入此模式
管理 (svc) 操作系统保护模式 系统复位和软件中断响应时进
入此模式
中止 (abt) 用于支持虚拟内存
和/或存储器保护 在ARM7TDMI没有大用处
未定义
(und)
支持硬件协处理器
的软件仿真
未定义指令异常响应时进入此
模式
ARM处理器的运行模式
除用户模式外,其它模式均为
特权模式。ARM内部寄存器和一些
片内外设在硬件设计上只允许(或
者可选为只允许)特权模式下访问。
此外,特权模式可以自由的切换处
理器模式,而用户模式不能直接切
换到别的模式。
未定义(und)
中止(abt)
管理(svc)
中断(irq)
快中断(fiq)
系统(sys)
这五种模式称为异常模式。它们
除了可以通过程序切换进入外,也可
以由特定的异常进入。每种异常模式
都有一些独立的寄存器,以避免异常
退出时用户模式的状态不可靠。
这两种模式都不能由异常进入,而且它们
使用完全相同的寄存器组。
系统模式是特权模式,操作系统在该模式
下访问用户模式的寄存器就比较方便,而且操
作系统的一些特权任务可以使用这个模式访问
一些受控的资源。
系统(sys)
用户 (usr)
寄存器
类别
寄存器在汇编
中的名称
各模式下实际访问的寄存器
用户 系统 管理 中止 未定义 中断 快中断
通用寄
存器和
程序计
数器
R0(a1) R0
R1(a2) R1
R2(a3) R2
R3(a4) R3
R4(v1) R4
R5(v2) R5
R6(v3) R6
R7(v4) R7
R8(v5) R8 R8_fiq
R9(SB,v6) R9 R9_fiq
R10(SL,v7) R10 R10_fiq
R11(FP,v8) R11 R11_fiq
R12(IP) R12 R12_fiq
R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq
R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq
R15(PC) R15
状态寄
存器
CPSR CPSR
SPSR 无 SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq无
CPSR
R15
R14
R13
R12
R11
R10
R9
R8
R7
R6
R5
R4
R3
R2
R1
R0
用户
无
CPSR
R15
R14
R13
R12
R11
R10
R9
R8
R7
R6
R5
R4
R3
R2
R1
R0
系统
SPSR_svc
CPSR
R15
R14_svc
R13_svc
R12
R11
R10
R9
R8
R7
R6
R5
R4
R3
R2
R1
R0
管理
SPSR_abt
CPSR
R15
R14_abt
R13_abt
R12
R11
R10
R9
R8
R7
R6
R5
R4
R3
R2
R1
R0
中止
SPSR_und
CPSR
R15
R14_und
R13_und
R12
R11
R10
R9
R8
R7
R6
R5
R4
R3
R2
R1
R0
未定义
SPSR_irq
CPSR
R15
R14_irq
R13_irq
R12
R11
R10
R9
R8
R7
R6
R5
R4
R3
R2
R1
R0
中断
SPSR_fiq
CPSR
R15
R14_fiq
R13_fiq
R12_fiq
R11_fiq
R10_fiq
R9_fiq
R8_fiq
R7
R6
R5
R4
R3
R2
R1
R0
快中断
ARM状态各模式下的寄存器组织
R0~R7为不分组寄存器
注意:在异常处理中进行模
式切换时,可能会破坏寄存
器中的数据,需要保护;
R14_fiqR14_irqR14_undR14_abtR14_svcR14
R13_fiqR13_irqR13_undR13_abtR13_svcR13
R12_fiqR12
R11_fiqR11
R10_fiqR10
R9_fiqR9
R8_fiqR8R8~R14为分组寄存器。
不同处理器模式下它们对
应不同的物理寄存器。
R8~R12有一个分组专用于
FIQ模式。这样在发生FIQ中断
后,可以加速FIQ的处理速度。
R14为链接寄存器LR,具有两个特殊功能:
用于保存子程序返回地址;
根据不同的异常模式保存为异常返回地
址(有些异常有一个小的固定偏移量)。
Lable
程序1 程序2
R14
R14(LR)寄存器与子程序调用
BL Lable
地址A ???
MOV PC,LR
R14(地址A)
Lable ???
1.程序1执行过程中
调用程序2;
2.程序跳转至标号
Lable,执行程序2。
3.同时硬件将“BL
Lable” 的下一条指
令所在地址存入
R14(LR);
4.程序2执行完后,将R14
(LR)寄存器的内容放入
PC,返回程序1继续执行;
* 24/95
1.异常返回地址的处理与子程序调用类似,都是由硬件自动完成。
区别在于有些异常有一个小常量偏移。
2.当发生异常嵌套时,这些异常之间可能会发生冲突。如用户模
式下发生IRQ中断嵌套时,R14_irq中低级中断返回主程序的地
址将被高级中断的返回地址所覆盖;
R14(LR)寄存器与异常处理
R14 R14_irq
用户模式下的程序0 IRQ模式下的程序1
……
指令m+1
...
指令m+n
指令m
地址A
地址A
未被破坏
IRQ模式下的程序2
……
return
指令j+1
...
指令j+k
指令j
地址B
地址B
R14_irq 被破坏
returnreturn
1.执行用户模式
下的程序0;
2.发生IRQ中断
后,硬件将带
偏移的返回地
址存入IRQ模式
下的R14_irq寄
存器,用户模
式下的R14没有
被破坏;
3. IRQ服务程
序1执行完后,
可将R14_irq寄
存器的内容减
去偏移量后存
入PC,返回之
前被中断的程
序;
4. 如果在IRQ
处理程序中打
开IRQ中断,并
且再次发生IRQ
中断;
5. 硬件将返回
地址保存在
R14_irq寄存器
中,原来保存
的返回地址信
息将被覆盖,
造成错误;
6. 在程序2返回
到程序1,然后
在返回到用户
模式下被中断
的程序时,发
生错误,将不
能正确返回;
解决办法是确
保R14的对应版本
在发生中断嵌套
时不再保存任何
有意义的值(将
R14入栈),或者
切换到其它处理
器模式下。
* 25/95
R15(PC)寄存器的读操作
– ARM指令以字为单位,因此R15的最低两位总是为0;
– R15的值是处理器正在取指的指令地址。因为有流水线,它与当前正在执
行指令的地址之间存在一个偏移(对于确定的ARM芯片该值为常量)。
– 当使用指令STR/STM保存R15时,不同芯片中(可能是三级流水的ARM7或五
级流水的ARM9)PC偏移量可能是8或12,因此需事先计算出该芯片的PC偏
移量。
MOV R0,PC
???
???PC
PC-4
PC-8 正在执行
正在译码
正在取指
流水线、ARM状态下指令地址 程序代码
SUB R1,PC,#4 ;将正在译码的指令的地址保存在R1中
STR PC,[R0] ;保存当前PC值=正在执行的指令的地址+偏移量
LDR R0,[R0] ;然后重装
SUB R0,R0,R1 ;计算偏移量 是同一条指令
– 写入R15 的值被当作指令地址,程序将从这个地址处
继续执行(相当于执行无条件跳转);
– 由于ARM指令以字为边界,因此写入R15的值最低两
位通常为0b00。具体的规则取决于内核结构的版本:
– 在V3及以下版本中,写入R15的值的最低两位被忽略,
因此跳转地址由指令的实际目标地址(写入R15的值)和
0xFFFFFFFC相与得到;
– 在V4及以上版本中,写入R15的值的最低两位如果不
为0,结果将不可预测。
R15(PC)寄存器的写操作
* 27/95
N Z C V — — I M0M1M2M3M4TF—. . .
31 30 29 28 27 26 8 7 6 5 4 3 2 1 0
程序状态寄存器PSR
条件代码标志
保留 控制位
溢出oVerflow
进/借位扩展 Carry
零 Zero
负Negative
禁止IRQ
禁止 FIQ
Thumb状态
模式 Mode
N Z C V I M0M1M2M3M4TF
1. 一般指令带S后缀时,执行结果会影响条件代码标志;但有
一些指令的执行总是会影响条件代码标志。
2. 所有ARM指令都可由条件域来指定是否需要执行,而Thumb
指令中只有分支指令可按条件执行。
3. 每个异常模式还有SPSR用于保存在异常发生之前的CPSR。
CPSR和SPSR可通过特殊指令(MRS/MSR)进行访问。
28/95
M[4:0] 模式 可见的Thumb状态寄存器 可见的ARM状态寄存器
10000 用户 R0~R7,SP,LR,PC,CPSR R0~R14,PC, CPSR
10001 快中断
R0~R7,SP_fiq,LR_fiq,PC,CPSR,
SPSR_fiq
R0~R7,R8_fiq~R14_fiq,PC,
CPSR, SPSR_fiq
10010 中断
R0~R7,SP_irq,LR_irq,PC,CPSR,
SPSR_fiq
R0~R12,R13_irq,R14_irq,PC,
CPSR, SPSR_irq
10011 管理
R0~R7,SP_svc,LR_svc,PC,CPSR,
SPSR_svc
R0~R12,R13_svc,R14_svc,
PC,CPSR, SPSR_svc
10111 中止
R0~R7,SP_abt,LR_abt,PC,CPSR,
SPSR_abt
R0~R12,R13_abt,R14_abt,PC,
CPSR, SPSR_abt
11011 未定义
R0~R7,SP_und,LR_und,PC,CPSR,
SPSR_und
R0~R12,R13_und,R14_und,
PC,CPSR,SPSR_und
11111 系统 R0~R7,SP,LR,PC,CPSR R0~R14,PC, CPSR
程序状态寄存器CPSR模式位设置表
Thumb状态与ARM状态的寄存器映射关系
R8
R9
R10
R11
R12
堆栈指针 (R13)
连接寄存器 (R14)
程序计数器 (R15)
低
寄
存
器
高
寄
存
器
Thumb状态下高寄存器(R8~R15)不是标准寄存器集的一部
分,但可以使用MOV、CMP和ADD指令对高寄存器操作。 30/95
异常exception
异常指正常执行的程序流因故被暂时中止;
ARM支持7种异常类型(P231表7-6)、5种异常模式;
若同时发生多个异常,将按优先级顺序处理;
异常类型 对应异常模式 优先级
复位 Supervisor 1(最高优先级)
数据中止 Abort 2
FIQ FIQ 3
IRQ IRQ 4
指令预取中止 Abort 5
未定义指令 Undefined 6
SWI Supervisor 7(最低优先级)
优
先
级
降
低
* 31/95
复位异常Reset
当nRESET引脚信号变为低电平时, ARM立即停止
执行当前指令,产生复位异常;
当nRESET再次变为高电平后,ARM处理器执行下
列操作:
1.强制CPSR中的M[4:0]变为b10011,进入管
理模式;
2.置位CPSR中的I和F位;
3.清零CPSR中的T位;
4.强制PC从地址0x00开始取第一条指令;
5.返回到ARM状态并恢复执行;
* 32/95
中止异常Abort
1. 中止异常包括指令预取中止和数据中止;
预取中止时,ARM将预取的指令标记为无效,但在
指令到达流水线的执行阶段时才进入异常。如果指
令在流水线中因为发生分支而没有被执行,中止将
不会发生。
数据中止时,数据访问被记为无效,中止程序应根
据中止原因作出处理,使数据可以被访问。
2. 中止异常表示对存储器的访问失败,这种机制实
际保证了虚拟存储技术的实现。
* 33/95
中断异常(IRQ、FIQ)
中断请求(IRQ)是一个由nIRQ引脚信号低电平所
产生的正常中断(nIRQ是内核信号,对用户不可见)
。IRQ的优先级低于FIQ,对于FIQ异常它是被屏蔽
的。在一个特权模式中可通过置位CPSR中的I 位来禁
止IRQ。
快速中断请求(FIQ)适用于对一个突发事件的快速响
应。ARM状态中FIQ模式多设置了7个分组寄存器
(R8_fiq~R14_fiq)可加速上下文切换的速度。在
一个特权模式中可通过置位CPSR中的F位来禁止FIQ
异常。
34/95
中断延迟
当允许FIQ中断时,最坏情况下FIQ的中断延迟由以下几部分组
成,即
– ① Tsyncmax(请求通过同步器的最长时间)。Tsyncmax为4个
处理器周期。
– ② Tldm(最长指令的完成时间)。最长指令是加载包括PC在
内的所有寄存器的LDM指令。在零等待状态的系统中,
Tldm为20个处理器周期。
– ③ Texc(数据中止异常进入时间)。Texc为3个处理器周期。
– ④ Tfiq(FIQ进入时间)。Tfiq为2个处理器周期。
总延迟是29个处理器周期。在使用40 MHz处理器时钟的系统
中,总延迟超过 ms。当延迟结束时,处理器执行在0x1C
处的指令。
对于最大的IRQ延迟,其计算与FIQ的类似。若必须允许FIQ有
更高的优先级,那么其结果是,进入IRQ处理程序的延迟时间
是随机的。
未定义指令异常
当ARM处理器遇到一条自己和
系统内任何协处理器都无法处
理的指令时,将产生未定义指
令陷阱。
软件可使用这一机制通过模拟
未定义的协处理器指令来扩展
ARM指令集。
* 36/95
软件中断异常(SWI)
执行指令SWI可进入软件中断
异常;
该异常使处理器从用户模式进
入管理模式,通常用于请求一
个特定的管理函数(即调用系
统功能函数)。
* 37/95
异常向量(表)
向量地址 异常类型 进入时模式 进入时I状态 进入时F状态
0x0000 0000 复位 管理 禁止 禁止
0x0000 0004 未定义指令 未定义 I F
0x0000 0008 软件中断(SWI) 管理 禁止 F
0x0000 000C 预取中止(指令) 中止 I F
0x0000 0010 数据中止 中止 I F
0x0000 0014 保留 保留 — —
0x0000 0018 IRQ 中断 禁止 F
0x0000 001C FIQ 快中断 禁止 禁止
异常发生时处理器将PC值强制设置为对应的异常向量;
异常向量处通常只存放一条跳转指令,指向真正的异常处理
程序;
异常向量表的后面一般紧跟着存放FIQ的异常处理程序,这样
可以减少一次跳转,提高FIQ的响应速度;
* 38/95
异常响应过程
在LR中保存返回地址信息;
ARM状态下将当前指令地址加4或加8复制到LR
Thumb状态下将当前指令地址加2、4或加8 复制到LR
将CPSR复制到适当的SPSR中;
将CPSR模式位强制设置为与异常类型相对应的值;
强制PC从相关的异常向量处取指;
注1:中断异常时置位中断禁止标志可以防止不受控制的异常嵌套
2:异常总是在ARM状态中处理。若处理器处于Thumb状态时发
生异常,则异常向量地址装入PC时会自动切换到ARM状态。
取决于异常类型
* 39/95
程序A IRQ服务程序
系统模式 IRQ模式
程
序
寄
存
器
组
异常响应(进入)过程
1. 程序运行用户程序,假定当前处
理器状态为Thumb状态、允许IRQ
中断;
2. 用户程序运行时发生IRQ中断,
硬件完成以下动作:
LR_sys
SPSR_irq
LR_irqLR
PC
CPSR
SPSR
SYS1?0. . .? ? ? ?
MODTFI. . .N Z C V
置位I位(禁止IRQ中断)
清零T位(进入ARM状态)
设置MOD位,切换处理器模
式至IRQ模式
将返回地址信息存入IRQ
模式的LR寄存器
将CPSR寄存器内容存入IRQ
模式的SPSR寄存器
将跳转地址存入PC,实现跳转
IRQ0?1. . .? ? ? ?
BackAddr
JumpAddr
Ju
mp
SYS1?0. . .????
“?”表示对该位不关心
* 40/95
异常返回(退出)过程
将LR( R14 )中的值减去偏移量后存
入PC,偏移量根据异常的类型而有所
不同;
将SPSR的值复制回CPSR;
清零在入口置位的中断禁止标志;
注:恢复CPSR的动作会将T、F和I位自动恢复为异常
发生前的值。
* 41/95
在异常处理结束后,
异常处理程序完成以
下动作:
程序A IRQ服务程序
系统模式 IRQ模式
程
序
寄
存
器
组
异常返回(退出)过程
LR_sys
SPSR_irq
LR_irqLR
PC
CPSR
SPSR
SYS1?0. . .? ? ? ?
MODTFI. . .N Z C V
将SPSR寄存器的值复
制回CPSR寄存器;
将LR寄存的值减去一
个偏移量后复制到PC
寄存器,跳转到被中
断的用户程序。
IRQ0?1. . .? ? ? ?
BackAddr
JumpAddr
return
SYS1?0. . .????
SYS1?0. . .? ? ? ?
BackAddr-4
Jump
“?”表示对该位不关
心
* 42/95
用堆栈处理异常的入口和出口
1. 如果异常处理程序已把返回地址拷贝到堆栈,即可使
用寄存器传送指令来实现返回;
2. 中断处理代码的开始部分和退出部分
注:这里使用的堆栈指针SP(R13)是属于异常模式的寄存器,每
个异常模式有自己的堆栈指针。这个堆栈指针应必须在系统启
动时初始化。
SUB LR,LR,#4 ;计算返回地址
STMFD SP!,{R0-R3,LR} ;保存使用到的寄存器
. . .
LDMFD SP!,{R0-R3,PC}^ ;中断返回
从存储器中装载PC的同时(PC是
最后恢复的),CPSR也得到恢复。
43/95
异常的返回指令
返回指令
之前的状态
备注
ARM R14_x Thumb R14_x
BL MOV PC,R14 PC+4 PC+2
此处PC是取指
(BL/SWI/未定义指令)
或预取指中止处的地址
软件中断 SWI MOVS PC,R14_svc PC+4 PC+2
未定义的指令 MOVS PC,R14_und PC+4 PC+2
预取指中止 SUBS PC,R14_abt,#4 PC+4 PC+4
快中断 SUBS PC,R14_fiq,#4 PC+4 PC+4 此处PC为由于FIQ或
IRQ占先而没有被执行
的指令的地址中断 SUBS PC,R14_irq,#4 PC+4 PC+4
数据中止 SUBS PC,R14_abt,#8 PC+8 PC+8
此处PC为产生数据中
止的装载或保存指令的
地址。
复位 无 — —
复位时保存在R14_svc
中的值不可预知。
注意:“MOVS PC,R14_svc”是指在管理模式执行MOVS PC,R14指令,
“MOVS PC,R14_und”、“SUBS PC,R14_abt,#4”等指令也是类似的。 44/95
作业
、、