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.

[参考译文] MSP430FR2476:RTC 计数器的运行

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1110560/msp430fr2476-operation-of-the-rtc-counter

器件型号:MSP430FR2476
主题中讨论的其他器件: CAPTIVATE-FR2676

大家好、

当 RTC 计数器在 RTCMOD 被设定为9时、RTCCNTR 寄存器从1开始。
我想它将从0开始。 这是为什么?
请告诉我是否有任何可能的原因。

此致。
Ryu

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

    您好、Ryu、

    根据我们有关 MSP430FR2476的文档、改变 RTCMOD 寄存器的值不应改变 RTCCNT 寄存器开始计数的位置。 我很好奇、在什么情况下、您看到计数器从1开始? 这是否利用了 Code Composer Studio 中的调试器?

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

    您好!Dylan、

    感谢您的回复。

    我正在检查附加代码中的计数器、并且计数器有时比 mod 中设置的9值(变量 a 和 b)多10。
    我想当它达到 MOD 的值时、会发生一个中断、计数器会返回到0。 不是这样吗?
    用户指南确认了下一次该图等于 MOD 时该图为0。
    我正在使用 Code Composer Studio 的调试器。

    此致。
    Ryu

    e2e.ti.com/.../msp430fr267x_5F00_RTC_5F00_01_5F00_1.c

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

    Ryu、

    在我看来、使用调试器模式是此问题的根源。 RTC 时钟将继续运行、即使触发了中断、这意味着在 CPU 接收到溢出中断并执行中断服务程序之前、计数器值有时会超过 RTCMOD 值。 调试会话期间发生的异常计时使该问题更加严重。 您可以在 MSP430FR4xx 和 MSP430FR2xx 系列用户指南(修订版 I)(TI.com) 、即使在 RTCMOD 和 RTCCNT 之间的比较逻辑被处理后、计数器值也将递增。

    为了更好地了解正确的时序、您可能需要尝试使用类似的方法将变量的值与 RTCMOD 值进行比较  

    if (a >= HWREG16 (RTC_BASE + OFS_RTCIF)

    并使用该逻辑点亮 LED。 然后只刷写器件、这样调试器模式就不会更改计时、您将看到计数值何时超过 RTCMOD 值(这种情况发生频率应更少、此时计时更准确)。  

    遗憾的是、这是使用调试器的不可避免的一部分、调试器会更改器件的时序并在特定点完全停止器件。

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

    请注意如何测试这个--调试器复位不会复位 RTC,所以如果你多次调试这个程序,它将在 RTC 已经运行的情况下启动。

    作为一个实验、尝试将这个添加为第二行主代码(就在停止看门狗之后):

    > RTCCTL =(0*RTCSS)| RTCSR;  //停止并复位 RTC

    [参考用户指南(SLAU445I)第15.2.3节]

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

    您好、Bruce、

    感谢您的建议。
    我已采纳您的建议并添加了该建议。

    此致。
    Ryu

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

    您好!Dylan、

    感谢您的回复。
    我按照您的建议对程序进行了一些更改、并确认 LED 亮起、尽管我是独立检查的、而不是在调试器中。
    我仍然认为溢出正在发生。
    我还尝试使它在0时发光、如所附代码所示、但它在这里没有发光。
    回到我的第一个问题、我认为 CNT 不会初始化为0。

    此致。
    Ryu

    e2e.ti.com/.../msp430fr267x_5F00_RTC_5F00_01_5F00_3.c

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

    Ryu、

    我在我的假设上寻求某种程度的确认、即这是由器件固有的时序问题引起的、在调试模式下似乎就是这样、 但在正常运行期间、CPU 和 RTC 的不匹配时钟频率通常不会导致此问题、因为 RTC 应大约每100ms 递增一次、CPU 时钟频率默认为1MHz、 足够高的数据、以便处理 ISR 请求并将 CNT 寄存器的值保存到"A"变量中。

    话虽如此、我还发现我们不建议使用软件显式读取 RTC 或任何定时器的值、因为这会干扰它们的正确运行。 这些模块被设计成与特定的硬件一起工作以实现最佳性能、并且使用软件访问计数值会抑制性能。

    我还想指出的是、我们确实建议、正如 Bruce 之前所做的那样、您在程序开始时重置计数器的值、因为计数值将是剩下的任何剩余值、但欠压情况除外、 或执行该复位命令。

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

    我放入了一个数组,这样我就可以观察它的计数,我看到同样的结果--它看起来是从1到10计数,而不是从0到9计数。 我的第一个猜测是(正如迪伦所建议的)、RTCCNT 获取是奇怪的(为什么10应该是特殊的?)、但我真的不知道。

    您能在芯片上张贴标记的最上面一行吗? 我说"XFR2476"、其中"X"表示预制。 (Launchpad 已经很旧了。) 我模糊地回忆了在我第一次使用这个特定 Launchpad 时的其他几个(无害的)奇怪现象、我将它们归咎于"X"。

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

    您好、Bruce、

    使用 CAPTIVATE-FR2676并将其写入 XFR2676。

    此致。
    Ryu

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

    无论好坏、您都可能不会对"X"设备中的错误引起过多关注、尤其是 在该设备看起来无害的情况下。  我希望最近的 CapTIvate 板具有"M"(非"X")器件。

    没有人给我提供了 Verilog 的密钥、但我的第一个猜测是、我们(意外)看到(CNT_register+prescaler_register)的舍入。 [为什么其他10项会很重要?] 我不知道如何测试这个。

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

    您好!Dylan、

    感谢您的回复。
    数据表中或其他地方是否有任何说明不建议从软件访问 RTC 的内容?
    我想知道为什么从软件访问可能导致错误操作。

    此致。
    Ryu

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

    在数据表中、我没有看到我们没有指定从软件访问 RTC。 我想强调的是、RTC 和相关组件针对硬件访问进行了优化。 目标是配置设置、然后让它在硬件中运行和执行任务、因为这样可以实现最高效和准确的性能以及电源优化。 软件读取是可用的、这是因为有时读取时序机制会有所帮助、但当您在寻找非常精确的时序时、应该允许 RTC 运行、而不受软件获取寄存器值的干扰。  

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

    您好!Dylan、

    感谢您的回复。
    是否有人提到它针对硬件访问进行了优化?
    我的客户要求提供证据、证明 RTC 的运行不是预期的、是由于软件访问。

    此致。
    Ryu

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

    请参阅器件系列用户指南第13.2.1节中的注释、了解有关使用软件访问计时器值的说明:

    MSP430FR4xx 和 MSP430FR2xx 系列用户指南(修订版 I)(TI.com)

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

    您好!Dylan、

    感谢您的回复。
    该注释指出、可以通过反复读取值来获得准确值。
    换句话说、计数器的值不会仅通过读出来改变。
    在此源代码中、最大值设置为9、但0不显示、最大值为10这一事实尚未解决。
    您对此有何看法?

    我已经验证了这些内容
    -RTCSR 位设置为1、但 RTCCNT 不会复位为0。
    - MSP-EXPFR2433上确认了同样的现象(没有 X 设备)。
     (即使9被设定为 RTCMOD、RTCCNT 也会从 μ 1~10变为0)


    此致。
    Ryu

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

    Ryu、

    出于您看到这些结果的原因、我想指引您查看此主题中的早期帖子。 RTC 的硬件设计使得使用 CPU 访问难以正确读取 RTC 计数值、尤其是在使用调试器时。  

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

    您好!Dylan、

    感谢您的回复。
    我将把这个问题分解成几个部分。

    问题1:我在您的回答中是否正确、可用于计时器的变通办法(多次读取、多数票决)不适用于 RTC?

    Q2:在本例中读取 RTCCNT 时、是否应使用-1值作为权变措施?

    问题3:您能否提供能够根据用户指南证明 RTCCNT = 0的软件? (当 RCTCNT 为0时、我还尝试了一个程序来点亮 EVM LED、但 LED 没有亮起。)

    我知道 CPU 对 RTCCNT 的访问会导致不可预知的运行状态、但是从目前的信息来看、似乎并不能证明 RTCCNT 不会变为0。

     此致。
    Ryu

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

    1) 1)提供的权变措施可能是找到该计时器值的最佳方法、但由于计时器的性质、该方法不太可能为您提供完美的结果。

    2) 2)如果您读取的 RTCCNT 值适合您的应用、则可以从该值中减去1。 如果您在测试中发现这是最适合您的结果、那么您可以这样做。

    3) 3)请参考可用的基于定时器的软件示例来执行您自己对 RTCCNT 寄存器的检查、但请记住、定时器和 RTC 硬件的性质会影响您看到的结果。

    您可能需要尝试(我将自己尝试)的方法是测量使用相同 RTC 中断切换 GPIO 的时序。 这可用于验证时序是否正确、而不考虑起始值。

    我应该在前面问的问题:您能解释一下为什么您需要计数器从1变为10、而不是从0变为9?  

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

    您好!Dylan、

    感谢您的回复。
    我尝试了1)、但无法解决问题。
    我理解2)。
    至于3)、我非常希望您实施它。
    此外、我之所以担心、是因为行为与用户指南中所述的行为不同。
    在用户指南的图15-2中、RTC 在设定值处停止并返回0。

     此致。
    Ryu

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

    我建议该行为可能与用户指南中显示的行为没有什么不同、而是很难使用调试工具正确观察该行为。 我将在接下来的3天内再次回复、届时我将有机会进行测量。

    编辑:Ryu、您是否还在寻找使用 RTC 生成的信号频率是否正确的验证、或者您是否只是在寻找计数器从0 vs 1开始的验证?

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

    您好!Dylan、

    感谢您的回复。
    我完全了解软件访问可能会导致错误移动。
    但是、我对计数器的值相对于设定值超过或仅0不可访问的情况有疑问。

    我期待运行检查的结果。
    我认为 RTC 的工作频率没有问题。
    我担心它的运行方式与用户指南不同、并且我无法确认它在我实际运行时通过0。
    因此、我担心计数器是否从0 vs 1开始。

    此致。
    Ryu

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

    Ryu、

    如 UG 中所述、RTC 模块在复位时确实会在"0"重新启动。 您还可以在 RTC 的默认代码示例中看到这一点、我们将值调整32-1以考虑从0开始的值。  

    由于 RTC 的 plar 中存在影子寄存器、并且调试器具有极高的侵入性、并且在激活时会减慢芯片中的所有内容、因此您可能无法在调试器视图中准确地反映这一点。  

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

    尊敬的 Jace:

    我知道调试器不是一个好主意、但为什么在不使用调试器的情况下 LED 不能在使 LED 发光的程序中亮起?
    此外、如果最大值设置为10、则调试器可能不会看到0、而是11。
    这样就可以设置11-1而不从0开始。

    此致。
    Ryu

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

    Ryu、

    您绝对可以这么做。 您只需在 RTC ISR 内部设置/切换 GPIO (连接到 LED)。