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.

[参考译文] MSP430FR4133:MSP430从睡眠状态唤醒并在睡眠状态后立即开始执行下一条指令的任何方法、避免调用 ISR?

Guru**** 2563960 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1182945/msp430fr4133-any-way-to-have-msp430-wake-from-sleep-and-immediately-start-executing-the-next-instruction-after-the-sleep-avoiding-calling-into-the-isr

器件型号:MSP430FR4133

我正在执行一个简单的状态机、该状态机基于引脚更改进行步进、并在步进之间休眠。 在每次引脚更改时调用 ISR 的开销上花费了大量时间、这会增加延迟和功耗。  如果我只能让每个状态更新后进入睡眠状态、然后再进行下一次更新和睡眠等操作、效率会更高

一个非常简单的示例、用于在受监控的引脚上每次发生变化时切换 P1.1。  

while (1)  {

    P1OUT ^= BIT1;

    __bis_SR_register(LPM4bits+GIE)

    P1OUT ^= BIT1;

    __bis_SR_register(LPM4bits+GIE)

    P1OUT ^= BIT1;

    __bis_SR_register(LPM4bits+GIE)

    P1OUT ^= BIT1;

    __bis_SR_register(LPM4bits+GIE)

    P1OUT ^= BIT1;

    __bis_SR_register(LPM4bits+GIE)

}

我意识 到、我可以有一个空 ISR、其中只有一个功能相同的 RETI、但这会增加 PC 和 SR 不必要的入栈和 POP 所产生的大量开销。

是否有任何方法可以抑制这些器件在唤醒时进行的 ISR 调用?  

谢谢!

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

    您能否将所有函数都放入 ISR 中? 也许这也是一个解决方案。

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

    是的、将所有内容都放入 ISR 中确实有效、但由于推送/弹出的额外开销、它会将延迟和功耗增加3倍以上、而且现在还需要更新一个额外的状态变量以跟踪状态处于哪个步骤。 我正在寻找一种避免所有这种额外开销的方法。 谢谢!

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

    当将器件从 LPMx.5模式中唤醒时、没有只产生一个唤醒信号的中断、所以在芯片中似乎有这个功能。 仔细阅读数据表、我看不到任何有关在 GIE 被清零的情况下进入 LMP3或 LMP4会发生什么情况的说明、因此我可能希望这将允许处理器在 其中一个请求进入但不调用到 ISR 时唤醒  (与 PIC 等其他芯片类似)。 不幸的 是,在 GIE 明确的情况下,这似乎不起作用,因为这一部分根本不会唤醒。  

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

    在我检查时、您似乎必须使用中断来唤醒 MCU:

    对于 LPMx.5、因为 RAM 会丢失。 它将首先从重新引导运行。