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

当前位置:首页  >  综合  > 正文

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

ARM单片机中断处理过程解析
2023-07-29 14:09:58 来源:哔哩哔哩

前言

中断,在单片机开发中再常见不过了。当然对于中断的原理和执行流程都了然于胸,那么对于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 位段的值。

取出中断服务例程地址,从中断向量表中找出正确的异常向量,然后在服务程序的入口处预取指。这部分由指令总线(I-Code总线)完成。

在入栈和取向量操作完成之后,执行中断服务例程之前,还要更新一系列的寄存器:

SP:在入栈后会把堆栈指针(PSP 或 MSP)更新到新的位置。在执行服务例程时,将由 MSP 负责对堆栈的访问。

PSR:更新 IPSR 位段(PSR的最低部分)的值为新响应的异常编号。

PC:在取向量完成后, PC将指向服务例程的入口地址。

LR:在出入 ISR 的时候, LR 的值将重新诠释为 “EXC_RETURN”。在异常进入时由系统计算并赋给 LR,并在异常返回时使用它。(后面会讲解 EXC_RETURN)

以上是在响应异常时通用寄存器的变化。另一方面,在 NVIC 中,也会更新若干个相关有寄存器。

在完成以上工作之后,系统开始执行中断服务程序里的指令。当指令执行完毕,进入中断返回处理阶段。

中断返回

当异常服务例程执行完毕后,需要做一个“异常返回”动作,从而恢复先前的系统状态,才能使被中断的程序得以继续执行 。触发中断返回的指令:

有些处理器会使用特殊的返回指令来标示中断返回,例如 8051 就使用 reti。但是在 CM3 中,是通过向 PC 中写入 EXC_RETURN来识别返回动作的。

在进行中断返回操作后,会进行下面的处理:

出栈:先前压入栈中的寄存器在这里恢复。内部的出栈顺序与入栈时的相对应,堆栈指针的值也改回先前的值。

更新 NVIC 寄存器:伴随着异常的返回,它的活动位也被硬件清除。对于外部中断,倘若中断输入再次被置为有效,悬起位也将再次置位,新一次的中断响应序列也可随之再次开始。

【文章福利】小编推荐自己的Linux内核技术交流群:【749907784】整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!!!(含视频教程、电子书、实战项目及代码)   

中断返回值

前面已经讲到,在进入异常服务程序后,将自动更新 LR 的值为特殊的 EXC_RETURN。这是一个高 28 位全为1的值,只有[3:0] 的值有特殊含义:

当中断服务例程把这个值送往 PC 时,就会启动处理器的中断返回操作。因为 LR 的值是由 CM3 自动设置的,所以只要没有特殊需求,就不要改动它。

总结一下上表,可以得到,合法的 EXC_RETURN 值共3个:

如果主程序在线程模式下运行,并且在使用 MSP 时被中断,则在服务例程中 LR=0xFFFF_FFF9(主程序被打断前的 LR 已被自动入栈)。

如果主程序在线程模式下运行,并且在使用 PSP 时被中断,则在服务例程中 LR=0xFFFF_FFFD(主程序被打断前的 LR 已被自动入栈) 。

这样描述可能比较抽象,不好理解。那就通过两张图来直观感受一下。

主程序运行在线程模式,且使用主堆栈,进入中断后,以及有中断嵌套情况下,模式切换和 LR 的变化如下图。

如果主程序在 Handler 模式下运行,则在服务例程中 LR = 0xFFFF_FFF1(主程序被打断前的LR已被自动入栈)。这时的所谓“主程序”,其实更可能是被抢占的服务例程。事实上,在嵌套时,更深层 ISR 所看到的 LR 总是 0xFFFF_FFF1。

主程序运行在线程模式,且使用进程堆栈的情况下,LR 值的变化如下

通过这两张图,可以很好地理解异常返回值的变化情况。

中断嵌套

Cortex-M3 内核单片机支持中断嵌套,即高优先级中断可以抢占低优先级去执行指令。我们要根据实际使用情况,为每个中断建立适当的优先级。

NVIC 和 CM3 处理器会根据优先级的设置来控制抢占与嵌套行为。有了自动入栈和出栈,我们不用担心在中断发生嵌套时,会使寄存器的数据损毁。

我们知道,所有服务例程都只使用主堆栈(MSP)。所以当中断嵌套加深时,对主堆栈的压力会增大:每嵌套一级,就至少再需要8个字,即32字节的堆栈空间(这没算上 ISR 对堆栈的额外需求),并且何时嵌套多少级也是不可预料的。

如果主堆栈的容量本来就已经所剩无几了,中断嵌套又突然加深,则主堆栈有溢出的凶险。堆栈溢出是很致命的,新入栈数据会覆盖掉主堆栈前面的数据,数据遭到了破坏。

若在服务例程返回前混迭区的数据又被更改了,则在执行中断返回后,系统极可能功能紊乱,甚至出现程序跑飞的问题。

要注意的,相同的异常(中断)是不允许重入的。因为每个异常都有自己的优先级,并且在异常处理期间,同级或低优先级的异常是要阻塞的。

因此对于同一个异常,只有在上次实例的服务例程执行完毕后,方可继续响应新的请求。因此,在 SVC 服务例程中,就不得再使用SVC指令,否则将产生 fault 现象。

咬尾中断

Cortex-M3 内核为了缩短中断延迟,新增了 “咬尾中断” 机制。

当处理器在响应某个中断时,如果又发生低优先级或者相同优先级中断,则被阻塞。在当前的中断执行返回后,系统处理悬起的中断时,不再先POP,然后又把 POP 出来的内容PUSH回去;而是继续使用上一个中断已经 PUSH 好的成果。

这么一来,看上去好像后一个中断把前一个中断的尾巴咬掉了,前前后后只执行了一次 入栈/出栈 操作。于是,这两个异常之间的“时间沟”变窄了很多。

晚到中断

CM3 的中断处理还有另一个机制,这就是“晚到的异常处理”。

当 CM3 对某异常的响应序列还处在早期:入栈的阶段,尚未执行其服务例程时,如果此时收到了高优先级异常的请求,则本次入栈就成了为高优先级中断所做的了。

入栈后,将执行高优先级异常的服务例程。可见,它虽然来晚了,却还是因优先级高而优先执行。

比如,若在响应某低优先级 异常#1 的早期,检测到了高优先级 异常#2,则只要 #2 没有太晚,就能以“晚到中断”的方式处理:在入栈完毕后执行ISR #2。

如果 异常#2 来得太晚,以至于已经执行了 ISR #1 的指令,则按普通的抢占处理,这会需要更多的处理器时间和额外的堆栈空间。

在 ISR #2 执行完毕后,则以“咬尾中断”方式,来启动 ISR #1 的执行。

原文作者:【一起学嵌入式

标签:

(责任编辑:news01)
wow动作宏怎么设置(wow动如脱兔)

wow动作宏怎么设置(wow动如脱兔)

大家好,小福来为大家解答以上的问题。wow动作宏怎么设置,wow动如脱兔
07-12 12:25:01
三祥新材:氧氯化锆项目一期已全面投产 有向科研团队提供样品

三祥新材:氧氯化锆项目一期已全面投产 有向科研团队提供样品

有投资者在互动平台提问三祥新材(603663),公司是否具备氧氯化锆的生产
07-12 12:05:36
我国新型液氧甲烷火箭朱雀二号发射成功

我国新型液氧甲烷火箭朱雀二号发射成功

朱雀二号是全球首枚成功入轨的液氧甲烷火箭,标志着我国运载火箭在新型
07-12 11:20:14
2023年PrimeDayRoborock优惠现已上线前所未有的折扣让自动化家庭清洁变得更容易

2023年PrimeDayRoborock优惠现已上线前所未有的折扣让自动化家庭清洁变得更容易

您可以信赖Roborock每年在PrimeDay活动中提供的巨额折扣!该公司长期引
07-12 11:05:00
国瓷材料 (300285):7月12日该股突破长期盘整

国瓷材料 (300285):7月12日该股突破长期盘整

股价突破长期盘整:前30日在上下30%的幅度内整理,今日有效突破。资金
07-12 10:32:43
“我是怎么被骗到缅甸诈骗的”,男子讲述非人经历

“我是怎么被骗到缅甸诈骗的”,男子讲述非人经历

11日,记者从内蒙古自治区通辽市扎鲁特旗公安局获悉,在警方的不懈努力
07-12 10:14:58
感恩的名言警句(学会感恩的名言警句)

感恩的名言警句(学会感恩的名言警句)

1、树小扶直易,树大扳伸难。2、绿叶清无限,归根感恩情。3、孝在于质
07-12 09:42:35
2023年井矿盐概念有哪些相关股票值得关注?(7月12日)

2023年井矿盐概念有哪些相关股票值得关注?(7月12日)

2023年井矿盐概念有哪些相关股票值得关注?(7月12日),2023年井矿盐概
07-12 09:11:27
心通桥 | 棉纺东路37路公交站台垃圾桶: “厨余垃圾和生活污水别倒给我”

心通桥 | 棉纺东路37路公交站台垃圾桶: “厨余垃圾和生活污水别倒给我”

郑报融媒把握正确舆论导向,关注百姓生活,侧重报道社会生活中的知识性
07-12 08:37:05
罗普特:连续3日融资净偿还累计453.21万元(07-11)

罗普特:连续3日融资净偿还累计453.21万元(07-11)

罗普特融资融券信息显示,2023年7月11日融资净偿还万元;融资余额万元
07-12 07:50:02
古诗串烧配哪些音乐
古诗朗诵串烧演讲稿 篇3

古诗串烧配哪些音乐 古诗朗诵串烧演讲稿 篇3

抄写作文网小编为大家提供古诗串烧配哪些音乐古诗朗诵串烧演讲稿篇3来
07-12 06:42:56
殷海光林毓生书信录

殷海光林毓生书信录

1、《殷海光林毓生书信录》是2008年吉林出版集团有限责任公司出版的图
07-12 05:19:17
中国人民财产保险股份有限公司海南省分公司原党委书记、总经理单荣光接受审查调查

中国人民财产保险股份有限公司海南省分公司原党委书记、总经理单荣光接受审查调查

央视网消息:据中央纪委国家监委网站,中央纪委国家监委驻中国人民保险
07-12 01:25:08
网传无锡3岁女童遭猥亵 警方逐帧回看620小时监控 未发现女孩被人猥亵

网传无锡3岁女童遭猥亵 警方逐帧回看620小时监控 未发现女孩被人猥亵

大象新闻记者张崇曜视频报道今年3月29日,江苏无锡的潘女士报警称,三
07-11 23:04:13
港中大:“血浆DNA”可筛查早期无病征鼻咽癌

港中大:“血浆DNA”可筛查早期无病征鼻咽癌

中新社香港7月11日电香港中文大学(港中大)医学院11日公布,最新研究证
07-11 21:58:47
国家防总派出两个工作组分赴江苏、四川协助指导防汛工作

国家防总派出两个工作组分赴江苏、四川协助指导防汛工作

新华社北京7月11日电(记者周圆、王聿昊)记者11日从应急管理部获悉,
07-11 21:08:52
我会副会长单位河北省电子信息技术研究院接连中标新型智慧城市建设重点项目

我会副会长单位河北省电子信息技术研究院接连中标新型智慧城市建设重点项目

近一年来,我会副会长单位河北省电子信息技术研究院(以下称省电研院)
07-11 20:21:13
葡萄酒泡制方法?

葡萄酒泡制方法?

1、取一个盆子,把葡萄粒摘下来,放入盆中。2、葡萄粒内加入两勺面粉,一
07-11 19:32:03
瑞鹄模具(002997.SZ):上半年净利润预增53.41%-71.46%

瑞鹄模具(002997.SZ):上半年净利润预增53.41%-71.46%

格隆汇7月11日丨瑞鹄模具(002997 SZ)公布2023年半年度业绩预告,报告期
07-11 18:57:06
三伏天是减肥的好时间 三伏天为啥是减肥的好时候 基本情况讲解

三伏天是减肥的好时间 三伏天为啥是减肥的好时候 基本情况讲解

1、三伏天是减肥的好时间2、三伏天为啥是减肥的好时候3、以上就是关于
07-11 18:08:22
央行:6月末社会融资规模存量为365.45万亿元,同比增长9%

央行:6月末社会融资规模存量为365.45万亿元,同比增长9%

央行消息,初步统计,6月末社会融资规模存量为365 45万亿元,同比增长9
07-11 17:44:31
中关村上半年净利润预增563%-696%

中关村上半年净利润预增563%-696%

上证报中国证券网讯(记者骆民)中关村披露半年度业绩预告。公司预计20
07-11 17:14:18
明日高温缓解!河南暴雨、局部大暴雨将上线

明日高温缓解!河南暴雨、局部大暴雨将上线

今天(7月11日)正式入伏预计今年三伏仍为40天也是连续第9年迎来加长版
07-11 16:39:08
ST南卫(603880)7月11日主力资金净买入81.60万元

ST南卫(603880)7月11日主力资金净买入81.60万元

截至2023年7月11日收盘,ST南卫(603880)报收于4 69元,上涨2 18%,换手
07-11 16:10:22
8年换7队!自由球员伍德发鸡汤文 湖人热火抛出橄榄枝

8年换7队!自由球员伍德发鸡汤文 湖人热火抛出橄榄枝

北京时间7月11日,自由球员克里斯蒂安-伍德在社媒发文,写道:“赌注押
07-11 15:37:38
互动| 柳工:TRG220行走减速机目前已经量产

互动| 柳工:TRG220行走减速机目前已经量产

柳工在互动平台表示,TRG220行走减速机是柳工自主开发的多级行星齿轮传
07-11 15:13:10
长江美食|上海葱油拌面:烟火气里的幸福

长江美食|上海葱油拌面:烟火气里的幸福

上海豫园老字号面馆,承载着无数食客的味蕾记忆。在这里,一碗开洋葱油
07-11 14:45:54
深国投商用置业49%股权挂牌转让 底价3.67亿元

深国投商用置业49%股权挂牌转让 底价3.67亿元

深圳深国投商用置业有限公司成立于2004年5月18日,注册资本1亿元,经营
07-11 14:02:14
房地产再迎利好,“金融16条”部分政策延期

房地产再迎利好,“金融16条”部分政策延期

房地产再迎利好,“金融16条”部分政策延期,融资,房地产业,房地产企业,
07-11 13:14:00
这把高端局!《黑袍》祖国人确认加入《真人快打1》

这把高端局!《黑袍》祖国人确认加入《真人快打1》

《黑袍纠察队》官方TikTok账户已经证实,祖国人将会出现在《真人快打1
07-11 12:35:36

为您推荐

精彩推送