欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 深入理解 Cortex-M 的中断输入和挂起行为

深入理解 Cortex-M 的中断输入和挂起行为

2025/5/16 18:23:27 来源:https://blog.csdn.net/Cris_Jay/article/details/147971311  浏览:    关键词:深入理解 Cortex-M 的中断输入和挂起行为

对于 Cortex-M3/M4 处理器来说,每个中断都有多个属性:

  • 每个中断都可被禁止(默认)或使能。

  • 每个中断都可被挂起(有一个中断请求等待被处理)或解除挂起。

  • 每个中断都可处于激活(正在处理)或非激活状态。

为了支持这些属性,NVIC 中包含了多个可编程寄存器,其中包括中断使能控制、挂起状态和只读活跃状态位。

这些状态属性具有多种可能的组合。例如,在处理中断时(激活状态),可以将其禁止,若在中断退出前产生了同一个中断的新请求,由于该中断被禁止了,它就会处于挂起状态。若满足以下条件,中断请求可被处理器接受:

  • 挂起状态置位

  • 中断使能

  • 中断优先级比当前等级高(包括中断屏蔽寄存器)

NVIC 在设计上既支持产生脉冲中断请求的外设,也支持产生高电平中断请求的外设。实际编程时无须配置任何一个 NVIC 寄存器以选择其中一种中断类型。对于脉冲中断请求,脉冲宽度至少要为一个时钟周期。而对于电平触发的请求,中断请求会一直认为是有效,直到在 ISR 中的操作清除请求(如写入寄存器以清除中断请求)。尽管外部中断请求在 I/O 引脚上的电平可能是低有效,对于 NVIC 收到的信号来说仍然是高有效(内部会做转换)。

中断的挂起状态被存储在 NVIC 的可编程寄存器中,当 NVIC 的中断输入被确认后,它就会触发该中断的挂起状态。即便中断请求失效,挂起状态仍然有效,这样使得 NVIC 可以处理脉冲中断请求。

挂起状态的意思是,中断被置于一种等待处理器处理的状态。有些情况下,处理器在中断挂起时就会进行处理。不过,若处理器已经在处理一个更高或同等优先级的中断,或者中断被某个中断屏蔽寄存器给屏蔽掉了,那么在其他的中断处理结束前或中断屏蔽位被清除前,挂起请求会一直保持。

这一点和传统的 ARM 处理器不同。按照之前的方式,若设备产生了中断,如中断请求(IRQ)/ 快速中断请求(FIQ),那么在它们得到处理前需要一直保持请求信号。目前,由于 NVIC 中的挂起请求寄存器保持中断请求,即使请求中断的源设备取消了请求信号,已产生的中断仍会被处理。

当处理器开始处理中断请求时,中断的请求信号会被自动清除,如下图所示:

图片

当中断正在被处理时,它就会处于活跃状态。注意在中断入口处,多个寄存器会被自动压入栈中,这也被称为压栈。同时,ISR 的起始地址会被从向量表中取出。

对于多数微控制器的设计,外设会产生电平触发的中断,因此 ISR 必须手动清除中断请求,如写特定值到外设的某个寄存器中。在中断服务完成后,处理器会执行异常返回。之前自动压栈的寄存器会被恢复出来,而且被中断的程序也会继续执行,中断活跃状态会被自动清除。

当中断处于活跃状态时,处理器无法在中断完成和异常返回前再次接受同一个中断请求。

中断的挂起状态位于中断挂起状态寄存器中,软件代码可以访问这些寄存器,因此可以手动清除或设置中断的挂起状态。若中断请求产生时处理器正在处理另一个具有更高优先级的中断,而在处理器对该中断请求做出响应之前,挂起状态被清除了,则该请求就会被取消且不会再得到处理,如下图所示:

图片

若外设持续保持某个中断请求,那么即使软件尝试清除该挂起状态,挂起状态还是会再次置位,如下图所示:

图片

若在得到处理后,中断源仍在继续保持中断请求,那么这个中断就会再次进入挂起状态且再次得到处理,如下图所示:

图片

对于脉冲中断请求,若在处理器开始处理前,中断信号产生了多次,它们会被当作一次中断请求,如下图所示:

图片

中断的挂起状态可以在其正在被处理时再次置位。即在之前的中断请求正被处理时产生了新的请求,就会触发新的挂起状态,此时在处理器处理完前一个 ISR 后会再次进入这个 ISR:

图片

需要注意的是,即使中断被禁止了,它的挂起状态位仍然是可以置位的。在这种情况下,若中断稍后被使能了,它依然可以被触发并得到服务。有些时候,这种情况并不是我们所希望的,因此需要在使能 NVIC 中的中断前手动清除挂起状态。

一般来说,NMI 的请求方式和中断类似。若当前没有在运行 NMI 处理,或者处理器被暂停或处于锁定状态,由于 NMI 具有最高优先级且不能被禁止,因此一旦触发它几乎会立即执行。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词