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.

[参考译文] MSP430F2132:计时器不同步

Guru**** 2511415 points
Other Parts Discussed in Thread: MSP430F2132

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/925683/msp430f2132-timers-out-of-sync

器件型号:MSP430F2132

您好!  

我们在 MSP430F2132上运行了两个版本的相同代码(在汇编器中)、其中一个使用间隔模式中的看门狗计时器、另一个使用连续模式中的计时器 A0、以15.625ms 的周期中断。

看门狗和定时器都使用相同的参考时钟、并且寄存器将时钟向下分频至相同的周期。

 

15.625ms 时间用于通过对64个中断进行计数、然后打开 LED、每秒闪烁一次 LED。

 

我们能够同步两个版本的代码(在单独的器件上同时运行)、以便 LED 彼此同步闪烁。 但是、在3分钟的时间内、两个 LED 闪烁间隔漂移并彼此不同步(这一点在眼图中很明显)。

 

如果我们使用相同版本的代码(既使用 WDT、又使用计时器 A0)对两个器件进行闪存、则 LED 会无限期保持同步。

 

WDT 中断和计时器 A0中断中的代码几乎相同。 唯一的区别是、计时器 A0代码将周期添加到其当前 CCR0值中、以便为下一个间隔进行设置。

 

如果我们将计时器 CCR0值减少2次计数(相当于3.81us)、则这两次几乎保持同步(30分钟后会变得明显)。

 

您是否知道看门狗计时器和计时器 A0之间会导致计时器周期略慢于看门狗的任何差异。 例如为中断提供服务的时间。

此致

CALLEX

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

    您好 Calex、

    感谢您的详细博文。 我怀疑这个问题是由一个或多个与 Timer_A 相关的勘误表引起的。 有关更多详细信息、请参阅勘误表。

    此致、

    James

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

    谢谢、

    与详细信息相关您是否同意在勘误表中与 TA12最相关?

    此致

    CALLEX

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

    澄清一下、

    勘误表使用 CCRx+1的示例、如果我们递增一个较大的数字(我们将 CCR0递增8192)、是否会发生同样的问题。
    我们不认为它的 TA21或 TA16,因为我们没有遇到 PUC 和 TACLR,也没有使用向上计数模式。 我们处于连续模式,并将8192添加到先前的 CCR0值中,作为中断的第一行

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

    更新了、我们尝试了勘误表中的所有权变措施、没有什么不同、还有其他建议吗?   

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

    您好!

    感谢您检查并确认错误不会影响此行为。

    您能帮我理解此练习吗? 是否只是对模块进行比较、以确定您要在设计中使用哪种计时器模块?

    除非我错过了本练习的目的、否则该行为不会影响我、因为在具有相同时钟源的不同器件(相同 P/N)上使用相同的模块和代码会产生同步行为。 否则,我会感到关注。

    硬件差异

    即使它们具有相同的时钟源、WDT 和 Timer0模块也将在器件中以不同的方式实现。 一个可能具有更多的传播延迟或其他一些物理特性、从而导致小的时序差或漂移。 例如、WDT 通常用于在发生软件问题时执行复位。 这不需要非常精确、只要器件及时复位即可。 然而、Timer0将被用于执行一个要求更高精度的非常时间关键的任务。

    软件差异

    现在、如果 ISR 中的代码不同、那么在定时器实际触发之间可能会有几个 CPU 周期、这些周期可能会随着时间的推移而累加并导致这种行为。

    为了避免这种情况、我建议在不同器件上使用相同的模块和相同的时钟源(相同 P/N)。

    此致、

    James

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

    谢谢 James、

    我们认为我们已经解决了导致问题的原因。

    从看门狗到计时器的交换似乎会导致两个中断的“冲突”。 当需要处理定时器中断时、定时器中断有时已在另一个中断中、这会在短时间内延迟定时器 A0 (这是时序关键型)。

    现在知道这一点就足以让我们有机会修复它了。

    此致

    CALLEX

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

    很难在不说出您的代码或澄清您对问题的描述的情况下进行判断。

    发布一些极简的内容并帮助他人帮助您。