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.

[参考译文] MSP430G2231:ISR 之后的代码执行

Guru**** 2391005 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/610351/msp430g2231-code-execution-after-isr

器件型号:MSP430G2231

大家好、团队、

从中断例程返回时、MCU 将从堆栈加载状态寄存器和程序计数器。

如果在 ISR 期间有另一个中断标志被置位(来自任何模块)、则在退出 ISR 和不同的弹出指令从 ISR 中恢复之前的状态时、 在启动新的挂起中断之前执行任何代码、或者在程序计数器递增并执行新指令之前开始新的 ISR。

如果您可以参考用户指南中的行为、这将有所帮助。


谢谢、


日落

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

    为了澄清这一点、您正在讨论如果我在 ISR A 中、并且来自另一个模块的中断 B 标志被置位、那么当 ISR A 在 ISR B 开始之前结束时会发生什么情况? 为了进行确认、您不会尝试执行嵌套中断(在 ISR 内部启用 GIE、以便 ISR 执行被其他 ISR 中断-不建议这样做)。

    从我如何阅读用户指南中可以理解、不、在新的 ISR 之前不会执行任何操作。 以下是我对用户指南的解释、但我想与我们的设计人员确认这一点、以确保我正确地解释了本例的操作(因此、这是我的理论、但我将努力确认):
    在 ISR A 期间、中断 B 标志被置位
    ISR 用户代码完成
    请参阅用户指南第2.2.3.2节"从中断返回"、在 ISR A 完成时、首先 SR 从堆栈中弹出、并且 CPUOFF、GIE 等设置生效。 这意味着、如果您以前在 LPM 中、则会返回 LPM。 由于启用了 GIE、您现在将开始设置的中断 B 的接受过程。 PC 弹出。
    4.请参阅用户指南第2.2.3.1节"中断接受"、首先完成当前正在执行的任何指令。 在这种情况下、PC 在步骤3中从中断 A 返回。 然后、刚刚弹出的 PC 被压回堆栈、根据用户指南、其余的中断接受继续。

    正如我提到过的、这是我对用户指南的解释-在新 ISR 之前不执行。 但我将在这里得到最终确认。

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

    我的解释也是你的。
    如果您能得到确认、那将会很好。

    我可以确认您的假设也正确、没有启用嵌套中断。
    如果在 ISR A 中启用了 ISR B、ISR A 和 ISR B 之间会发生什么情况?

    感谢后续行动

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

    我很确定在 ISR 之间执行一条指令。 我没有找到章节和节、但中有一个提示、例如 SLAU144J 3.4.6.20 (EINT 指令):  

    注:启用中断
    使能中断指令(EINT)之后的指令一直被执行、即使是
    当中断被启用时、一个中断处理请求被挂起。

    在实践中、可以观察到这一点。 当我、嗯、朋友意外地忘记清除 ISR 中的中断源时、整个程序可以被观察到执行、真的(!) 慢慢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    没关系。 当我回家的时候,我做了一个小的演示,然后... 不像我说的那样工作。 我必须想象其他事件。 ("这不是你不知道的、而是你知道的不知道的。")
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    由于 CPU 的执行流水线、EINT 和 DINT 有一个延迟。 但是、在启动中断处理程序并从中断处理程序返回时、无论如何都必须清空流水线、因此它的运行方式是不同的、这是合乎逻辑的。

    您的朋友可能正在运行不同的 CPU。

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

    大家好、

    在这种情况下、我可以确认在 ISR 之间不应执行任何指令。

    此致、

    Katie

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

    感谢 Katie 的确认、感谢 Bruce 和 Clemens 的其他考虑。

    谢谢、

    日落