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.

[参考译文] 编译器/EK-TM4C123GXL:EK-TM4C123GXL

Guru**** 2478765 points
Other Parts Discussed in Thread: EK-TM4C123GXL

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/692650/compiler-ek-tm4c123gxl-ek-tm4c123gxl

器件型号:EK-TM4C123GXL

工具/软件:TI C/C++编译器

大家好:

我的测试中出现了有关 RTC 跟随的问题
平台:EK-TM4C123GXL
RTOS:TI RTOS Tivac 2 16 00 08
IDE:
Code Composer Studio 7.3.0
XDCtools 3.32.0.06_core3
编译器 TI v16.9.4.LTS

空 InitHibernation (void)
{
SysCtlPeripheralEnable (SYSCTL_Periph_HIBERNATE);
//
//等待休眠模块准备就绪。
//
while (!SysCtlPeripheralReady (SYSCTL_Periph_HIBERNATE)
){
//

//确定休眠模块是否处于活动状态。
//

HibernateEnableExpClk (SysCtlClockGet ());
//配置休眠模块的时钟源并启用
// RTC 功能。
//
HibernateClockConfig (HIBERNATE_OSC_HIGRIVE);
HibernateRTCEnable ();
} 

然后我将 HibernateRTCGet ()值打印到控制台。   下面是我的日志。  

2018年5月23日17:22:30 [RX]- RTC:172

2018年5月24日09:20:25 [RX]- RTC:58329

58329 - 172 = 58157 = 16 h 09 m 17 s

 2018年5月23日17:22:30 + 16 h 09 m 17 s

= 2018/5/24 09:31:47

 在实际时间11 m 22 s 内

RTC 寄存器设置是否错误? 或需要进行设置?

谢谢你。

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

    尝试使用 HibernateRTCSet (计数器值)。 我认为它应该做到这一点。

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

    我想问题是 RTC 模块为什么不准确以及如何改进  

    寄存器设置??? 还是其他??

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

    很抱歉、我弄混了一些东西、我的错。 在这种情况下、我会尝试将  HibernateClockConfig (HIBERNATE_OSC_HIGRIVE)更改为  HibernateClockConfig (HIBERNATE_OSC_LOWDRIVE)尽管我相信 LP 具有24pF 的滤波电容器。

    我有一个使用中断的代码、如果您想验证它是否仍然存在精度问题...

    uint32_t g_sec = 0;
    
    void CONFIG_HibernateRTC (void)
    {
    //设置休眠时钟
    MAP_HibernateEnableExpClk (MAP_SysCtlClockGet ());
    
    //TODO:更改为 HIBERNATE_OSC_LOWDRIVE
    MAP_HibernateClockConfig (HIBERNATE_OSC_HIGRIVE);
    
    //将计数器设置为0
    MAP_HibernateRTCSet (0);
    
    当休眠计数器达到1时、//match = 0
    HibernateRTCMatchSet (0、MAP_HibernateRTCGet ()+ 1);
    
    //停用和清除中断
    MAP_IntDisable (INT_HIBERNATE);
    MAP_HibernateIntDisable (HIBERNATE_INT_RTC_MATH_0);
    MAP_IntPendClear (INT_HIBERNATE);
    MAP_HibernateIntClear (HIBERNATE_INT_RTC_MATH_0);
    
    当匹配= 0时、//生成中断
    //启用中断
    MAP_HibernateIntEnable (HIBERNATE_INT_RTC_MATH_0);
    MAP_IntEnable (INT_HIBERNATE);
    
    MAP_HibernateRTCEnable();
    }
    
    Void HibernateRTCIntHandler (void)
    {
    //清除中断
    MAP_HibernateIntClear (HIBERNATE_INT_RTC_MATH_0);
    
    G_sec++;
    
    //重置计数器
    MAP_HibernateRTCSet (0);
    }