主题中讨论的其他器件: CAPTIVATE-FR2676
大家好、
当 RTC 计数器在 RTCMOD 被设定为9时、RTCCNTR 寄存器从1开始。
我想它将从0开始。 这是为什么?
请告诉我是否有任何可能的原因。
此致。
Ryu
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.
大家好、
当 RTC 计数器在 RTCMOD 被设定为9时、RTCCNTR 寄存器从1开始。
我想它将从0开始。 这是为什么?
请告诉我是否有任何可能的原因。
此致。
Ryu
您好!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 值(这种情况发生频率应更少、此时计时更准确)。
遗憾的是、这是使用调试器的不可避免的一部分、调试器会更改器件的时序并在特定点完全停止器件。
您好!Dylan、
感谢您的回复。
我按照您的建议对程序进行了一些更改、并确认 LED 亮起、尽管我是独立检查的、而不是在调试器中。
我仍然认为溢出正在发生。
我还尝试使它在0时发光、如所附代码所示、但它在这里没有发光。
回到我的第一个问题、我认为 CNT 不会初始化为0。
此致。
Ryu
Ryu、
我在我的假设上寻求某种程度的确认、即这是由器件固有的时序问题引起的、在调试模式下似乎就是这样、 但在正常运行期间、CPU 和 RTC 的不匹配时钟频率通常不会导致此问题、因为 RTC 应大约每100ms 递增一次、CPU 时钟频率默认为1MHz、 足够高的数据、以便处理 ISR 请求并将 CNT 寄存器的值保存到"A"变量中。
话虽如此、我还发现我们不建议使用软件显式读取 RTC 或任何定时器的值、因为这会干扰它们的正确运行。 这些模块被设计成与特定的硬件一起工作以实现最佳性能、并且使用软件访问计数值会抑制性能。
我还想指出的是、我们确实建议、正如 Bruce 之前所做的那样、您在程序开始时重置计数器的值、因为计数值将是剩下的任何剩余值、但欠压情况除外、 或执行该复位命令。
我放入了一个数组,这样我就可以观察它的计数,我看到同样的结果--它看起来是从1到10计数,而不是从0到9计数。 我的第一个猜测是(正如迪伦所建议的)、RTCCNT 获取是奇怪的(为什么10应该是特殊的?)、但我真的不知道。
您能在芯片上张贴标记的最上面一行吗? 我说"XFR2476"、其中"X"表示预制。 (Launchpad 已经很旧了。) 我模糊地回忆了在我第一次使用这个特定 Launchpad 时的其他几个(无害的)奇怪现象、我将它们归咎于"X"。
请参阅器件系列用户指南第13.2.1节中的注释、了解有关使用软件访问计时器值的说明:
您好!Dylan、
感谢您的回复。
该注释指出、可以通过反复读取值来获得准确值。
换句话说、计数器的值不会仅通过读出来改变。
在此源代码中、最大值设置为9、但0不显示、最大值为10这一事实尚未解决。
您对此有何看法?
我已经验证了这些内容
-RTCSR 位设置为1、但 RTCCNT 不会复位为0。
- MSP-EXPFR2433上确认了同样的现象(没有 X 设备)。
(即使9被设定为 RTCMOD、RTCCNT 也会从 μ 1~10变为0)
此致。
Ryu
您好!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?