【问题标题】:How to disable nesting in NVIC Interrupts in ARM Cortex M0+?如何在 ARM Cortex M0+ 的 NVIC 中断中禁用嵌套?
【发布时间】:2018-01-29 02:04:50
【问题描述】:

我已经开始使用 ARM Cortex M0+ 处理 GPIO 中断。我想禁用 ARM 中断的嵌套功能。有什么办法吗。?我知道默认情况下,嵌套在 ARM 中是启用的,我想禁用它。

【问题讨论】:

  • 请阅读 ARM 社区网站上的 thread。可能这就是你需要的!
  • @anandamu16:你能详细说明你为什么需要这个功能吗?当然,您总是可以通过不使用多个优先级来禁用中断嵌套。 M0+ 缺少 Cortex M3 风格的可配置子优先级,但是如果您需要优先级仲裁,但不包括中断入口。在不了解特定要求的情况下很难为您提供帮助。老实说,次优先级屏蔽有点深奥,通常不需要,除非消除最后一个延迟周期,在这种情况下,我建议重新考虑使用完全抢占。
  • @Doynax:实际上我最近正在研究 Gpio 级别触发的中断。但是,一旦按下按钮,它就会给我多次中断(这是因为在按钮按下完成的时间内发生了多次中断)。我只想中断一次,直到 Gpio Handler 执行完成。我也不想禁用 GPIO 中断。此外,在 ARM Cortex M0+ 中断中默认启用嵌套是对的吗?
  • 感谢 Gaurav 提供参考,我会检查链接
  • @anandamu16:恐怕我还没关注你。单个中断处理程序永远不会在 Cortex M0+ 上抢占自身,而不会出现一些明显的扭曲。如果抢占中断源已设置为更高的优先级,则多个不同的中断处理程序(例如在两个 GPIO 端口上)可能会相互抢占。但是,默认情况下都配置为相同的优先级,因此除非您选择加入,否则不会发生这种情况。

标签: arm embedded interrupt-handling cortex-m


【解决方案1】:

ARM Cortex-M0/M0+ 不支持将中断优先级分组为抢占优先级(可嵌套)和子优先级(不可嵌套),例如在 M3/M4/M7 上可用。

如果您希望防止中断嵌套;两者都是必要的;

  • 将所有中断设置为相同的优先级,或者
  • 在进入和退出所有处理程序时禁用和重新启用中断。

这些选项中的第一个是最简单的,但无法控制执行顺序(这对于异步事件很少有影响,但可能会导致不确定的行为和时间)。第二个实际上并没有阻止嵌套,但仅在较低优先级的中断禁用中断之前允许嵌套 - 在它开始处理实际事件之前。结果是类似于 Cortex-M3 等可用的子优先级的行为。

【讨论】:

  • 请注意,这是对问题的回答,而不是对随后在 cmets 中描述的问题的解决方案。这似乎不是一个 XY 问题。
猜你喜欢
  • 2020-12-24
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
  • 2011-07-26
  • 2015-07-05
  • 1970-01-01
相关资源
最近更新 更多