21.arm裸机--异常与中断

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

异常与中断介绍 - 知乎

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

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

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

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

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

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

 中断异常的执行流程:

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

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

3.保存现场

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

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

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

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值