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.

[参考译文] CCS/MSP430G2744:GIE 禁用/使能功能未按预期工作

Guru**** 2537080 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/672729/ccs-msp430g2744-gie-disable-enable-not-working-as-expected

器件型号:MSP430G2744

工具/软件:Code Composer Studio

大家好、

我有一段很短的代码、绝对不能被中断。 因此、我用一 条_disable_interrupt 和一条_enable_interrupt ();语句打包了它。 令我惊讶的是、此代码段仍被中断! 为了查看_disable_interrupt 行是否正常工作、我 在 CCS 中打开了 Registers 视图、并在单步执行 _disable_interrupt 行时观察到 SR。 我看到 SR 中的 GIE 位保持置位。 当我继续步进时、仅当处理器进入中断时才清除 GIE。 但是、GIE 在进入中断时被自动清零、并在退出时置位、对吧?

为什么这些内在函数运算符对我不起作用? 是否有方法可以直接设置和清除该位、例如、我会对 PxOUT 进行设置和清除?

我将使用 CCS 7.4.0.00015 for Mac。 如果您需要更多信息、请告诉我! 提前感谢。

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

    这是一个屏幕截图。 如您所见,我已经单步执行了__disable_interrupt ()行,GIE 保持置位状态。

    事实证明、如果我在_disable_interrupt ()行上设置一个断点、然后单步执行它、GIE 位不受影响、如图所示。 但是、如果我在下面的行上设置了一个断点并且程序在 在断点处停止前通过_disable_interrupt ()指令运行、则 GIE 位会按预期被清除。

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

    首先、您是否打算将此帖子标记为"已回答"? 或者这是事故吗?

    至于 GIE 位、当你在_disable_interrupt ()行中设置一个断点、然后单步执行它时、你将会错误计时、这可能是你看不到 GIE 位被清除的原因。 当您在第110行设置断点时,您会实时运行在__disable_interrupt ()行上,因此您看到 GIE 位被清除,这表明一切都正常。

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

    感谢您的回复。 是的、在我发布问题后不久、我发现只有在线路上运行时才正确设置 GIE 位、而不是单步执行时才正确设置 GIE 位、这使我可以通过将断点设置为一行"late (延迟)"来解决问题。 虽然不是很理想、但这使我的上述问题实际上没有意义、因此我发布了屏幕截图以展示我一直在做什么(以证明我不是在解决这个问题)、并对我如何解决这个问题进行了简短的解释、并将其标记为已回答。

    但是、Registers 视图是正确的—步进时实际上并未设置 GIE 位、因为在单步执行_disable_interrupt ()行之后可能会发生中断。 如果在步进时无法正确设置和清除此位、则在.h 文件中添加有关此内容的注释、其中包含此内在函数的声明(或可能是其他有意义的地方) 在我尝试解决只有在以特定方式进行调试时才存在的问题时、本可以消除一些猜测并节省大量时间。

    感谢您的帮助!