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.

[参考译文] MSP430F5438:RTC_A 作为计时器工作、0.007%的速率与计算时间不符

Guru**** 2561060 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/598305/msp430f5438-rtc_a-working-as-timer-0-007-rate-that-the-calculate-time-is-not-we-expected

器件型号:MSP430F5438

你(们)好

您能否对 下面的"异步"进行更多解释?

我的客户让 RTC_A 作为计时器工作、它的计算时间比 我们预期的要高0.007%。

低8位 RT0PS 为高8位 RT1PS 提供+1溢出信息、 高8位 RT1PS 应增加+1。 我们了解到它不会增加 +1、并且低 8位 RT0PS 已清除为0x00。  

它是由 ACLK 和 MCLK 之间的异步时钟引起的吗? 谢谢。

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

    Daniel、您好!

    在这种情况下异步意味着 RTC 的时钟源与 MCLK 的时钟源不同。 这很可能不是导致客户遇到问题的原因。 他们是否已验证 RTC 的时钟源是否以预期的频率运行?

    您能否提供有关 RTC 使用情况的更多详细信息、包括其初始化代码和正在使用的任何 RTC 中断? 此外、时钟源设置代码也很有用。 如果您的客户可以创建尽可能最小的代码集来重新创建问题、以便我可以尝试在我的设置上测试它、这将是理想的选择。

    此致、
    Caleb Overbay

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

    您的客户是否仍然需要有关此问题的帮助?

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

    时钟源实际上并不相关。 注释的要点是、除非计数停止、否则任何时候都可能发生翻转。 因此、无论  读取顺序如何、高寄存器读取和低寄存  器读取之间可能偶尔会发生翻转、因此必须允许/防止出现上述情况。

    例如、假设一个通用微控制 器具有一个16位计数器、作为两个单独的字节宽寄存器来实现。 计数器的初始条件为高字节= 3且低字节= 0xff、寄存器读取之间会发生翻转

    情形1:高电平读为3、发生翻转、 低电平读为00 最终结果十六进制300        不正确  

    场景2:低电平读为0xff、发生翻转、  高电平读为4最终结果0x4ff          不正确

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

    原始帖子中的注释讨论了当 CPU 时钟与 RTC 异步时如何正确读取计数寄存器。 这与计数寄存器内的溢出无关。 由于 CPU 时钟与 RTC 时钟异步、因此您不知道何时更新计数寄存器。 因此、在计数寄存器的"节拍"期间可能会对其进行读取、从而导致读取错误。 发生这种情况时、您需要对同一寄存器进行多次读取并执行多数表决、以确定哪一个是正确的。

    我承认、在将两个计时器连接在一起时、您所描述的场景可能会成为一个问题、但这并不是问题的核心。

    此致、
    Caleb Overbay
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    注意到。 我一直认为读取单个计数器寄存器不能不一致... 我猜我不应该这样做。