ARM微处理器的编程模型之:异常中断处理
当数据访问中止异常发生时,寄存器的值将根据以下规则进行修改。
① 返回地址寄存器r14的值只与发生数据异常的指令地址有关,与PC值无关。
② 如果指令中没有指定基址寄存器回写,则基址寄存器的值不变。
③ 如果指令中指定了基址寄存器回写,则寄存器的值和具体芯片的Abort Models有关,由芯片的生产商指定。
④ 如果指令只加载一个通用寄存器的值,则通用寄存器的值不变。
⑤ 如果是批量加载指令,则寄存器中的值是不可预知的值。
⑥ 如果指令加载协处理器寄存器的值,则被加载寄存器的值不可预知。
6.外部中断IRQ
当处理器的外部中断请求引脚有效,而且CPSR寄存器的I控制位被清除时,处理器产生外部中断IRQ异常。系统中各外部设备通常通过该异常中断请求处理器服务。
当外部中断IRQ发生时,处理器执行下列伪操作。
r14_irq = address of next instruction to be executed + 4
SPSR_irq = CPSR
CPSR[4∶0] = 0b10010 /*进入特权模式*/
CPSR[5] = 0 /*处理器进入ARM状态*/
/*CPSR[6]保持不变*/
CPSR[7] = 1 /*禁止外设中断*/
If high vectors configured then
PC = 0xffff0018
Else
PC = 0x00000018
7.快速中断FIQ
当处理器的快速中断请求引脚有效且CPSR寄存器的F控制位被清除时,处理器产生快速中断请求FIQ异常。
当快速中断异常发生时,处理器执行下列伪操作。
r14_fiq = address of next instruction to be executed + 4
SPSR_fiq = CPSR
CPSR[4∶0] = 0b10001 /*进入FIQ模式*/
CPSR[5] = 0
CPSR[6] = 1
CPSR[7] = 1
If high vectors configured then
PC= 0xffff001c
Else
PC = 0x0000001c
3.4.2 异常优先级
每一种异常按表3.5中设置的优先级得到处理。
表3.5 异常优先级
优 先 级 | 异 常 |
最高 1 | |
2 | 数据中止 |
3 | 快速中断请求 |
4 | 中断请求 |
5 | 预取指令异常 |
6 | 软件中断 |
最低 7 | 未定义指令 |
异常可以同时发生,处理器按表3.5的优先级顺序处理异常。例如,复位异常的优先级最高,处理器上电时发生复位异常。所以当产生复位时,它将优先于其他异常得到处理。同样,当一个数据访问中止异常发生时,它将优先于除复位异常外的其他所有异常。
优先级最低的2种异常是软件中断和未定义指令异常。因为正在执行的指令不可能既是一条SWI指令,又是一条未定义指令,所以软件中断异常SWI和未定义指令异享有相同的优先级。
3.4.3 处理器模式和异常
每一种异常都会导致内核进入一种特定的模式。表3.6显示了ARM处理器异常及其对应的模式。此外,也可以通过编程改变CPSR,进入任何一种ARM处理器模式。
注意 | 用户和系统模式是仅有的不可通过异常进入的两种模式,也就是说,要进入这两种模式,必须通过编程改变CPSR。 |
表3.6 ARM处理器异常及其对应模式
异 常 | 模 式 | 用 途 |
快速中断请求 | FIQ | 进行快速中断请求处理 |
外部中断请求 | IRQ | 进行外部中断请求处理 |
SWI | SVC | 进行操作系统的高级处理 |
复位 | SVC | 进行操作系统的高级处理 |
预取指令中止异常 | ABORT | 虚存和存储器保护 |
数据中止异常 | ABORT | 虚存和存储器保护 |
未定义指令 | Undefined | 软件模拟硬件协处理器 |
评论