异常中断处理
Assemble Language of ARM
1
9.1.1 ARM体系中异常中断种类
异常中断名称 复位 未定义指令 软件中断 (SWI) 指令预取中止 数据访问中止 外部中断请求 (IRQ ) 快速中断请求 ( FIQ ) 含义 当处理器的复位电平有效时,产生复位异常,程序跳转到复位异常处理程序处执行。 当ARM处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可使用该异常机 制进行软件仿真。 该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常 机制实现系统功能调用。 若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出 中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。 若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异 常。 当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。系统的外设 可通过该异常请求中断服务。 当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。
返回时, 异常处理需要:
从 SPSR_<mode>恢复CPSR 从LR_<mode>恢复PC Note:这些操作只能在 ARM 态执行.
Reset
Vector Table
Vector table can be at 0xFFFF0000 on ARM720T and on ARM9/10 family devices
Assemble Language of ARM
3
各异常中断的中断向量地址及其异常中断处理优先级表
中断向量地址 0x0 0x4 0x8 0x0c 0x10 复位 未定义的指令 软件中断(SWI) 指令预取中止 数据访问中止 异常中断类型 异常中断模式 特权模式(SVC) 未定义指令中止模式(Undef) 特权模式(SVC) 中止模式 中止模式 优先级* 1 6 6 5 2
用于运行具有特权级的操作系统任务。
Assemble Language of ARM 8
2.9 进入和退出异常中断的过程
当异常产生时, ARM core:
拷贝 CPSR 到 SPSR_<mode> 设置适当的 CPSR 位:
改变处理器状态进入 ARM 状态 改变处理器模式进入相应的异常模式 设置中断禁止位禁止相应中断 (如果需要)
0x1C 0x18
FIQ IRQ
0x14
0x10 0x0C 0x08 0x04 0x00
保存返回地址到 LR_<mode> 设置 PC 位相应的异常向量
(Reserved) Data Abort
Prefetch Abort
Software Interrupt Undefined Instruction
Assemble Language of ARM
5
异常处理中的寄存器使用
与异常发生相关的模式改变意味着所调用的异常处理程序至少要访 问:
私有的 SP_<mode> (stack pointer ). 私有的 LR_<mode> (link register). 私有的 SPSR_<mode> (saved program status register ). 在 FIQ异常处理中, 另有5个私有的通用寄存器 (r8_fiq to r12_fiq). 其它的寄存器是所有模式公用的.
异常处理程序必须确保其他的寄存器在退出前恢复到原来的状态 这可以通过将任何正在使用的寄存器的内容保存在堆栈中,并在返 回前恢复来实现 任何所需寄存器的初始化要由应用程序的起始代码来完成,参阅: “Embedded Software Development”
Assemble Language of ARM
9.1 ARM异常中断处理概述
控制程序的执行流程有3种方式: 正常情况下,程序每执行一条指令,程序计数器寄存器pc 将增加4或定的地址标号处执行, 或者跳转到特定的子程序处执行;
B指令 BL指令 BLX指令,BX指令 当异常中断发生时,系统执行完当前指令后,将跳转到相 应的异常中断处理程序处执行。
0x14
0x18 0x1c
保留
外部中断请求(IRQ) 快速中断请求(FIQ)
未使用
外部中断(IRQ)模式 快速中断(FIQ)模式
未使用
4 3
*注:1最高;6最低
Assemble Language of ARM 4
9.1.3 异常中断使用的寄存器
各异常中断对应着一定的处理器模式。 应用程序通常运行在用户模式下。 各种不同的处理器模式对应于该处理器模式的 物理寄存器组。
Assemble Language of ARM
2
9.1.2 异常中断向量表及异常中断优先级
中断向量表指定了各异常中断及其处理程序的对应 关系,通常放在内存的低地址端。 在ARM体系中,异常中断向量表的大小为32字节, 其中每个异常中断占据4个字节,保留4个字节。 每个异常中断对应的中断向量表中的4个字节空间 中存放一条跳转指令或者一条向PC寄存器中赋值 的数据访问指令。
9
Assemble Language of ARM
ARM微处理器对异常的响应过程用伪码可以描述为: R14_<Exception_Mode> = Return Link SPSR_<Exception_Mode> = CPSR CPSR[4:0] = Exception Mode Number CPSR[5] = 0 ;当运行于ARM工作状态时 If <Exception_Mode> == Reset or FIQ then CPSR[6] = 1 ;当响应FIQ异常时,禁止新的FIQ异常 CPSR[7] = 1 ;禁止新的IRQ异常 PC = Exception Vector Address
6
Assemble Language of ARM
7
ARM中的处理器模式
处理器模式 描述
用户模式(usr) 快速中断模式(fiq) 外部中断模式(irq) 特权模式(svc) 中止模式(abt) 未定义指令中止模式 (und)
系统模式(sys)
正常程序执行的模式 用于高速数据传输或通道处理 用于通用的中断处理 供操作系统使用的保护模式(复位或软中断) 当数据或指令预取终止时进入该模式,可用于 虚拟存储及存储保护。 当未定义的指令执行时进入该模式,可用于支 持通过软件仿真硬件的协处理器。