21.arm裸机的异常与中断

浅析arm的异常、中断和arm工作模式的联系 - 宋桓公 - 博客园

异常与中断介绍 - 知乎

【嵌入式Linux基础】3.异常与中断 - 知乎

别人的帖子都写得很清楚,俺就随便写写加深印象

arm有一个异常向量表,分别对应七种模式状态,大部分时候在user模式

21.arm裸机的异常与中断

21.arm裸机的异常与中断

 当发生异常中断时,就会停止当前动作跳转到对应模式下的地址,执行对应的处理,结束后再跳回原来的地方继续原来的代码。

S文件中指数的异常向量地址,出现异常硬件会自动跳转,使用位置无关码

21.arm裸机的异常与中断

与中断异常相关的有一个重要的寄存器,cpsr程序状态寄存器。工作模式之间的切换,主要就是靠这个寄存器。

21.arm裸机的异常与中断

21.arm裸机的异常与中断

 中断异常的执行流程:

1.设置好中断源,设置好中断控制器能接收判断中断源的信号,编写好中断处理函数以出来中断

2.异常/中断发生时,PC都会指向相应的向量表。异常的发生往往会导致模式的自动切换。

3.保存现场

硬件自动做:模式切换是硬件自动做的,同时cpsr的值存放到spsr,lr寄存器的值会存到当当下模式的lr'中

21.arm裸机的异常与中断

程序员需要做的:给新模式下的sp赋值,把原来模式的r0-r12以及lr的值保存到新的栈中,保证之前模式的值不被破坏。

21.arm裸机的异常与中断

 

 4.进入中断处理函数。处理中断。

5.中断返回,将之前保存到栈里的值读回,并SPSR的值赋值给CPSR实现主动切换到之前的模式

。其中PC的值要根据各个模式进行一定的offset 

21.arm裸机的异常与中断

21.arm裸机的异常与中断

21.arm裸机的异常与中断

21.arm裸机的异常与中断

中断是有arm指令集和thumb指令集两种模式,thumb是arm的子集,我也不会thumb指令集,流程是一样,就是写法有些出入。

上一篇:2022-02-18 ~ 2022-02-20 周末总结


下一篇:【渝粤教育】21秋期末考试国际私法10216k1