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.

[参考译文] MSP430F5529:计时器"向上"计数问题

Guru**** 2589280 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1115323/msp430f5529-timer-up-counting-questions

器件型号:MSP430F5529

假设以下计时器设置....

TA1CCTL0 = CCIE;// CCR0中断被启用
TA1CCR0 = 10000;//设置计数值
TA1CTL = tassel_1 + MC_1 + TACLR;// ACLK、upmode、清除 TAR

* TAIE 未启用、因此 TAIFG 永远不会触发 ISR
*我们使用 CCIFG 触发 ISR

在给定上述设置的10、000次计数后、我知道 Timer1的 CCR0 ISR 矢量将运行。
查看技术手册中的图17-3、可以看到、正如 TAxR 更新为 CCR0 = 10、000时、CCIFG 标志似乎会发生。

但我的问题是、
如果触发 ISR、并且在 TAxR = CCR0时运行代码、那么如果我们更新 ISR 中的 CCR0值、会发生什么情况?

1) 1)将 ISR 中的 CCR0从10、000更改为50、000是否意味着仅在40、000个时钟边沿后、下一个 CCIFG 将触发?
*这是否取决于定时器时钟源和 MCLK 速度的差异?

2) 2)如果要将 ISR 中的计时器计数更新为不同的周期、最好:
-停止计时器
- 将 TACLR 设置为将 TAxR 计数值清零回"0"
-设置新的 CCR0值
-重新启动计时器

??

此致、
Darren

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

    您好 Darren、

    为了解决问题1)、是的、将 ISR 中的 CCR0从10000更改为50000将只在40000个时钟边沿中触发下一个 CCIFG。 这不应取决于您选择的时钟源、因为 CCIFG 逻辑只是在计数器值等于 CCR 值时触发。

    要解决问题2)、具体取决于您尝试执行的操作以及应用程序对时间的敏感性。 如果您的目标是更改 ISR 中的周期、则不必停止计时器即可。 如果在更改 CCR 值时计时器仍在运行、则必须考虑(如上所述)连续更改计时器值在更新 CCR 值后的第一个周期以及后续周期的影响。 如果您想确保从零开始计数到新的 CCR 值、那么您提到的步骤可能是一种很好的方法。

    请查看 MSP430x5xx 和 MSP430x6xx 用户指南中的"17.2.3.1.1更改周期寄存器 TAxCCR0"部分、我将在下面链接该部分。 我还将在此处粘贴该简短评论:

    当在定时器运行时更改 TAxCCR0时、如果新周期大于或等于旧周期或大于当前计数值、定时器会计数到新周期。 如果新周期小于当前计数值、则定时器会返回到0。 但是、在计数器回滚到零之前可能会发生一个额外的计数。

    MSP430x5xx 和 MSP430x6xx 系列用户指南(修订版 q)(TI.com)