打印
[ARM入门]

【经验】arm经常异常如何处理

[复制链接]
670|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
云图|  楼主 | 2017-11-29 09:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在处理异常前,必须保护当前的处理器状态,以便在完成处理程序后能恢复到原来的程序。 如果同时发生好几个异常,将会按照异常优先级的顺序来响应。

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)、若在进入异常处理时设置了中断禁止位,要在此清除。
4、如果学习arm遇到了更多问题,建议去华清星创客学习arm,有很多帮助和学习资源总结

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

30

帖子

1

粉丝