一、进入异常中断
当一个异常出现以后,ARM微处理器会执行以下几步操作:
1、将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。若异常是从ARM状态进入,LR寄存器中保存的是下一条指令的地址(当前PC+4或PC+8,与异常的类型有关);
2、将CPSR复制到相应的SPSR中。
3、根据异常类型,强制设置CPSR的运行模式位。
4、强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。还可以设置中断禁止位,以禁止中断发生。
ARM微处理器对异常的响应过程用伪码可以描述为:
1.R14_ = Return Link
2.SPSR_ = CPSR
3.CPSR[4:0] = Exception Mode Number
CPSR[5] = 0 ;当运行于ARM 工作状态时
If == Reset or FIQ then;当响应 FIQ 异常时,禁止新的FIQ 异常
CPSR[6] = 1
CPSR[7] = 1
4.PC = Exception Vector Address
二、退出异常中断
异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:
1、将连接寄存器LR的值减去相应的偏移量后送到PC中。
2、将SPSR复制回CPSR中。
3、若在进入异常处理时设置了中断禁止位,要在此清除。
可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。
阅读(1778) | 评论(0) | 转发(0) |