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.

[参考译文] MSP430F5359:如何清除待处理计时器通道0中断?

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1081992/msp430f5359-how-can-i-quash-a-pending-timer-a-channel-0-interrupt

部件号:MSP430F5359

我们的设计使用两个 MSP430F5359微处理器。 在每个“侧面”,只要微处理器以全功率模式运行,我们就会使用微处理器的计时器 A 单元0通道0每毫秒生成一次中断。 (该部件工作正常。)

我的问题涉及启动。 在启动时,在 GIE 关闭的情况下,我们为计时器 A 单元0通道0配置正确的时钟分频器, TA0CCR0寄存器中的正确比较值等。 我们还设置计时器运行

后来,我们启用了 GIE,(毫不奇怪)我们立即在0xFFEA 处通过矢量获取计时器中断,因为计时器 A 有足够的时间达到1毫秒 的“比较”值。

这种即时中断不方便,所以在我们启用 GIE 之前,我想取消该挂起中断(并将 TA0R 设置为零),以便在启用 GIE 1毫秒后我们才会获得中断。 但我似乎无法做到这一点。 我写了以下代码:

(快照寄存器)
clr_bit( TA0CTL,  TAIFG );  //清除任何待处理计时器 A 计数器中断,以便在下面启用时不会立即获得中断
clr_bit( TA0CCR0,CCIFG );  //清除任何待处理计时器 A 计数器中断,以便在下面启用时不会立即获得中断
(再次注册快照)
(显示寄存器快照)
__enable_interrupt ();//设置 GIE,启用中断系统

显示屏显示预期结果(TIFG 和 CC(0)IFG 均清除):

TA0CTL:0221 TA0CCR0:1F3F TA0IV:0000
       0220.          1F3E       0000

但是,在启用 GIE 时,中断仍会立即发生。

家庭用户指南中有一个逻辑图,表明不管寄存器的内容如何,实际上可能无法清除挂起的中断:

我只是做错了,还是实际上不可能平息一个待定的中断? 无论采用哪种方式,文档都可能需要更正或更加明确。

(对我来说,一种明显的替代方法是阻止计时器 A 运行到启用 GIE 的那一刻,但这是一个更具侵入性的更改,如果我不必这样做的话,我宁愿不做。)

大西洋

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

    可以清除一个待处理的 CCIFG/TAIFG。 现在还有一场比赛,所以你应该(如你所建议的)也用 TACCLR 清除对手。

    (显示寄存器快照)”需要多长时间? 尝试在__enable_interrupt ()之后执行此操作。

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

    感谢您的回复!

    我刚刚写了代码,直到启用 GIE 时才启动计时器 A 运行,我仍然收到“即时中断”,我也很快收到第二个中断(在 T+M ü 560µs 而不是 T+M ü 1000µs),所以这里发生的事情要比我上面描述的要多。 (我认为我自己已经证明,在启用 GIE 之前,TA0R 是零的,所以这不是第二次中断太早的原因。)

    我将深入了解如何初始化 Timer A 以及此处的实际情况。

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

    布鲁斯:

    哦,看:我的代码中有一个排字!

    clr_bit( TA0CCR0,CCIFG );  //清除任何待处理计时器 A 计数器中断,以便在下面启用时不会立即获得中断

    这应该是说:TA0CCTL0

    哦!

    随着这一变化,一切都很好。 正在按预期清除挂起的中断。

    另一方面,《家庭用户指南》中的图表肯定不正确:它需要让写入 CTL 寄存器的网络清晰(并设置?) 中断标志“停止”。

    感谢您的鼓励! 我现在要(时髦)检查“已解决”复选框。

    大西洋

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

    我也没有看到这一点。 我很高兴你能让它发挥作用。