加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 教程 > 正文

ARM的异常解决

发布时间:2021-11-25 19:00:03 所属栏目:教程 来源:互联网
导读:在处理异常前,必须保护当前的处理器状态,以便在完成处理程序后能恢复到原来的程序。 如果同时发生好几个异常,将会按照异常优先级的顺序来响应。 1、ARM中异常中断的种类 (1)、复位 当处理器复位引脚有效时产生复位异常,包括系统加电和系统复位两种。通过
在处理异常前,必须保护当前的处理器状态,以便在完成处理程序后能恢复到原来的程序。 如果同时发生好几个异常,将会按照异常优先级的顺序来响应。
 
1、ARM中异常中断的种类
 
(1)、复位
 
当处理器复位引脚有效时产生复位异常,包括系统加电和系统复位两种。通过设置PC跳转到复位中断向量处执行称为软复位。
 
(2)、未定义指令
 
当ARM遇到不能处理的指令时,将产生未定义指令异常。这个机制可以用于软件模拟扩展指令集。
 
(3)、软件中断
 
软件中断指令用于进入管理模式,通常请求一个特定的管理功能。在实时操作系统中可以通过该机制实现系统功能调用。
 
(4)、指令预取终止(Prefech Abort)
 
发生在指令预取期间。如果处理器预取的指令的地址不存在,或者该地址不允许当前指令访问,当被预取的指令执行时,处理器产生指令预取终止异常中断。如果发生预取中止,将屏蔽预取指并为无效,但并不会立刻带来异常,直到指令到达流水线的执行阶段才发生。若未执行该指令,将不会发生中止,因为流水线发生了分支。
 
(5)、数据访问终止(DATAABORT)
 
如果数据访问指令的目标地址不存在,或者该地址不允许当前指令访问,处理器产生数据访问终止异常中断。
 
(6)、外部中断请求(IRQ)
 
nIRQ输入端的低电平且CPSR的寄存器的I控制位被清除时,处理器产生外部中断请求异常中断。IRQ的优先级低于FIQ,当进入了相关的FIQ,会屏蔽IRQ。除非是在特权(非用户)模式,其他任何时刻都禁止设置CPSR内的I位。
 
(7)、快速中断请求(FIQ)
 
将nFIQ输入端拉低可以实现外部产生FIQ。由ISYNC 输入信号端的状态决定是同步还是异步传输。当ISYNC为低电平,认为nFIQ和nIRQ为异步,中断前会引起同步周期延迟并影响处理器流程。
 
2、异常的响应过程
 
除了复位异常外,当异常发生后,ARM核会尽可能执行完当前指令,然后自动执行如下动作:
 
(1)、保存返回地址到LR_<mode>
 
(2)、复制CPSR到SPSR_<mode>中。(注意:如果通过程序修改CPSR进入异常模式,硬件将不会将CPSR保存到SPSR中)
 
(3)、设置CPSR进入相应的处理器模式。
 
(4)、设置CPSR的第7位来禁止IRQ。如果异常为快速中断和复位。则还要设置CPSR的第6位来禁止快速中断。
 
(5)、给PC强制赋向量地址值。
 
如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态,则异常处理返回时,自动切换到Thumb状态,即异常只在ARM状态下处理。
 
3、异常中断处理返回
 
异常处理完毕之后,异常处理程序需要执行以下几步操作从异常返回:
 
(1)、将所有修改过的用户寄存器从处理程序的保护栈中恢复。
 
(2)、复制SPSR_<mode>到CPSR,将LR_<mode>的值减去相应的偏移量后送到PC中。
 
(3)、若在进入异常处理时设置了中断禁止位,要在此清除。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读