| |
当发生异常时,除了复位异常立即中止当前指令外,处理器尽量完成当前指令,然后脱离当前的指令处理序列去处理异常。ARM异常处理器对异常中断的响应过程如下:
①
将CPSR的内存保存到将要执行的异常中断对应的SPSR中,以实现对处理器当前状态、中断屏蔽及各条件标志位的保存。各异常中断模式都有自己相应的物理SPSR寄存器。
②
设置当前状态寄存器CPSR中的相应位。
设置CPSR模式控制位CPSR[4:0],,是处理器进入相应的执行模式;
设置中断标志位(CPSR[6]=1),禁止IRQ中断;
当进入Reset或FIQ模式时,还要设置中断标志位(CPSR[7]=1),禁止FIQ中断。
③
将引起异常指令的下一条指令的地址保存到新的异常工作模式的R14即R14_mode中,使异常处理程序执行完后能正确返回原程序。
④
给程序计数器强制赋值,是程序从ARM体系中的异常工作模式表中给出的相应的矢量地址开始执行中断处理程序。一般来说,矢量地址处将包含一条指向相应程序的转移指令,从而可跳转到相应的异常中断处理程序处执行异常中断处理程序。
ARM处理器对异常的响应过程可用伪代码描述如下:
R14_<exception_mode>=return link
SPSR_<exception_mode>=CPSR
CPSR[4:0]=exception mode number
CPSR[5]=0
CPSR[6]=1
If<exception-mode>=Reset or FIQ then
CPSR[7]=1
PC=exception vector address
每个异常模式对应有2个寄存器R13_<mode>、 R14_<mode>,分别保存相应模式下的堆栈指针、返回地址。堆栈指针可用来定义一个存储区域保存其他用户寄存器,这样异常处理程序就可使用这些寄存器。
FIQ模式还有额外的专用寄存器R8_fiq~R12_fiq,使用这些寄存器可加快快速中断的处理速度。凌阳教育,专注嵌入式人才培养13年,完善的培养方案,强大的师资,合理的课程安排,成功从小白蜕变为嵌入式工程师。想了解凌阳教育,或者获得更多嵌入式学习资料的免费下载,请点击www.sunplusedu.com访问凌阳教育官网。