This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSPM0G1519:ISR 中的_WFI ()

Guru**** 2908210 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1576367/mspm0g1519-_wfi-in-isr

器件型号:MSPM0G1519


工具/软件:

您好:

我有一位客户从 STM32 MCU 迁移代码、他们在 SysTick ISR 中的其中一项功能是_WFI ()、以便他们可以在 ISR 内暂停执行状态、并在下一个 SysTick 上执行某些操作。

他们注意到、在 MSPM0 上、这似乎不起作用。 我用 SysTick 的示例创建了一个小的概念验证、但这似乎无效:

我假设 MSPM0 和 CPU 子系统不允许使用这种类型的中断、因为从技术上讲、您仍然处于中断上下文中?

Munan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    NVIC 的指定方式是、ISR 不会预先嵌入它。 《ARMv6-M 架构参考手册》(DDI0419E) 第 B1.5.19 节说:“WFI 唤醒事件:[...] 优先级的异步异常、如果 PRIMASK.PM 设置为 0、将优先于任何当前活动的异常。“ 【增加的重点】

    v7 和 V8 机械臂具有类似的措辞。 据我所知、STM32-s 对此没有什么不同。

    SysTick 的优先级通常很低、因此几乎任何其他中断都会预先发出提示。 我想知道这是否实际上是在等待其他东西(有意或无意)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Munan:

    从 Bruce McKenney 所说的继续:在退出当前 IRQ 处理程序之前、它被视为活动状态、并且在完成之前不会再次跳转到。 您可以跳转到其他更高优先级的 ISR、但不能跳转到同一个。  

    此致、
    Brian Lee

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    另一条路径是从 WFI 恢复 (不调用 ISR)、但 Armv6-M ARM 的报价说也不会发生。

    发布原始代码是否会提供信息?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Bruce、Brian、

    感谢这里的反馈、我认为在与客户讨论时、他们同意尝试嵌套这样的中断不是一个可靠的解决方案。 它们将继续使用更传统的 switch 语句或变量来跟踪 ISR 中的状态。

    我认为、您对中断优先级所说的是有意义的、行为似乎是偶尔代码会立即恢复或卡住、具体取决于启用的其他中断。

    Munan