![嵌入式系统技术应用与开发](https://wfqqreader-1252317822.image.myqcloud.com/cover/703/43806703/b_43806703.jpg)
上QQ阅读APP看书,第一时间看更新
2.3.3 ARM的异常响应
2.3.3 ARM的异常响应
![](https://epubservercos.yuewen.com/EC1D5F/23083816001896906/epubprivate/OEBPS/Images/39_01.jpg?sign=1738868145-WhrJn7Eam0S0JU0TJxljlHFVvYQHPwdE-0-a7d4c3313a9162e85900429e90ce23a0)
当一个异常发生时,ARM920T将进行以下步骤:
1)将下一条指令的地址保存到相应的连接寄存器LR中。如果异常是从ARM状态进入的,下一条指令的地址(根据异常的类型,数值为当前PC+4或PC+8)复制到Link寄存器。如果异常是从THUMB状态进入,那么写入到Link寄存器的值是当前的PC偏移一个值。这表示异常处理程序不需要关心是从哪种状态进入异常的。例如,在软件中断异常SWI情况下,无论是来自什么状态,处理程序只要采用“MOVS PC,R14_svc”语句,总可以返回到原始程序的下一条语句,不管SWI是在ARM状态执行,还是在Thumb状态执行。
2)复制CPSR到相应的SPSR。
3)根据异常类型,强制改变CPRS模式位的值。
4)强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。
2.3.3 ARM的异常响应(动画演示)
![](https://epubservercos.yuewen.com/EC1D5F/23083816001896906/epubprivate/OEBPS/Images/39_02.jpg?sign=1738868145-D6kbHkAAtmLJphAjSOrIWHuWIAKvO3rc-0-dcfcb58b5ec764ab7a8c5af7fb7ebeb4)
如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态。
ARM微处理器对异常的响应过程用伪码可以描述为:
![](https://epubservercos.yuewen.com/EC1D5F/23083816001896906/epubprivate/OEBPS/Images/39_03.jpg?sign=1738868145-TNrZcQBC0l06RtZUOJAU3IdLXT41z6Kf-0-c870cf4f50cee79a3db52793ea9cb480)