ARM单片机中断处理过程解析

本文详细阐述了Cortex-M3内核单片机在处理中断事件的具体步骤,包括中断响应时的寄存器入栈、向量取址、堆栈指针更新等操作,以及中断返回时的恢复过程。介绍了中断返回值EXC_RETURN的作用和不同模式下的值。此外,还讨论了中断嵌套、咬尾中断和晚到中断的概念,强调了中断管理中的重要考虑因素,如堆栈管理和优先级处理。
摘要由CSDN通过智能技术生成

前言

中断,在单片机开发中再常见不过了。当然对于中断的原理和执行流程都了然于胸,那么对于ARM单片机中断的具体处理行为,你真的搞清楚了吗?

今天来简单聊一聊,ARM单片机中断处理过程中的具体行为是什么样的,搞清楚了这些,让你彻底理解中断是如何执行的。

掌握了这些内容后,以后在开发过程中遇到中断问题,可以做到游刃有余。

本篇文章主要梳理一下 Cortex-M3 内核的单片机在处理中断事件的具体行为,以及不同的中断是如何处理的。

中断响应

Cortex-M3 单片机在开始响应一个中断时,会进行以下三个操作:

  • 寄存器入栈,将寄存器的值压入栈
  • 取向量:从向量表中找出对应的服务程序入口地址
  • 选择堆栈指针 MSP/PSP,更新堆栈指针SP,更新连接寄存器LR,更新程序计数器PC

响应中断的第一个动作,就是自动保存现场的必要部分:依次把 xPSR, PC, LR, R12 以及 R3-R0 由硬件自动压入适当的堆栈中。

当响应异常时,当前的代码正在使用 PSP,则压入 PSP,也就是使用进程堆栈;否则就压入 MSP,使用主堆栈。一旦进入了服务例程,就将一直使用主堆栈。

入栈顺序以及入栈后堆栈中的内容,如下图所示。在自动入栈的过程中,把寄存器写入堆栈内存的时间顺序,并不是与写入的空间顺序相对应的。但是机器会保证:正确的寄存器将被保存到正确的位置 。

先把PC与 xPSR 的值保存,就可以更早地启动服务例程指令的预取——因为这需要修改PC;同时,也做到了在早期就可以更新 xPSR 中 IPSR 位段的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值