我们的设计使用两个 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 的那一刻,但这是一个更具侵入性的更改,如果我不必这样做的话,我宁愿不做。)
大西洋