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.

[参考译文] CCS/TM4C123GH6PGE:休眠 RTC 问题

Guru**** 2391415 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/711098/ccs-tm4c123gh6pge-hibernation-rtc-issue

器件型号:TM4C123GH6PGE
主题中讨论的其他器件:TM4C123

工具/软件:Code Composer Studio

大家好、

我的平台是 TM4C123GH6PGE

CCS 版本6.2、

我正在基于  实时时钟执行太阳能跟踪器项目、

我在 RTC 中遇到问题,我的时钟在工作,但 理想的实时时钟相比,时间(秒)增量要快得多,我使用的是 RTC 晶体值32.768KHz。

我的 RTC 代码是......

//
//休眠处理程序
//
//
无效休眠处理程序(无效)

//复位中断标志

uint32_t ui32Status = HibernateIntStatus (1);

HibernateIntClear (ui32状态);
//ASD++;
calender_read = HibernateRTCGet ();

ulocaltime (calender_read、&tm2);
//zxc=TM1.TM_Hour;
//格式化 UART 的输出


strfttime (((char *) buf_Rz、60、"%c\r\n"、&tm2);
strftTime (RTC_LCD_h、4、"%H"、&tm2);
strfttime (rtc_lcd_m、4、"%M"、&tm2);
strftTime (RTC_LCD_s、4、"%S"、&tm2);
HibernateRTCMatchSet (0、calender_read+1);
// HibernateRTCMatchSet (0、HibernateRTCGet ()+5);
// UARTSend (((uint8_t *) buf_Rz、60);
//calender_read=mktime (&TM1);


ADCIntClear (ADC0_BASE、0);
ADCProcessorTrigger (ADC0_BASE、0);

MAIN ()

//将系统时钟设置为50MHz
MAP_SysCtlClockSet (SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHz|SYSCTL_OSC_MAIN);

 SysCtlPeripheralEnable (SYSCTL_Periph_HIBERNATE);

 IntMasterEnable();

IntPrioritySet (INT_HIBERY_TM4C123、0x40);


//********* 休眠模式


HibernateEnableExpClk (SysCtlClockGet ());
HibernateRTCTrimSet (0x7FFF);
HibernateRTCEnable();
SysCtlDelay (SysCtlClockGet ()/12);
HibernateClockConfig (HIBERNATE_OSC_HIGRHIVE);
HibernateIntRegister (HibernateHandler);
HibernateIntEnable (HIBERNATE_INT_RTC_MATH_0);
HibernateWakeSet (HIBERNATE_WAKE_RTC);
HibernateRTCMatchSet (0、HibernateRTCGet ()+4);
// HibernateRTCMatchSet (0.5);
休眠计数器模式(HIBERNATE_COUNTER_24HR);
HibernateCalendarSet (&TM1);
//
//
//
/*

calender_write = umktime (&TM1);
if (calender_write ==(uint32_t)(-1))){
// UARTSend (((uint8_t *) buf_er、sizeof (buf_er));
while (1);

否则{
HibernateRTCSet (calender_write);
//在一秒后为 RTC 设置中断。
HibernateRTCMatchSet (0、HibernateRTCGet ()+5);

*
//
//
//

如何解决此 问题? plz 尽快回复!!!!!!!!

谢谢您!   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能"快得多"量化吗? 我们说的是百分比还是数量级?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我使用 Stopwatch (Mobile)与 RTC 秒数(通过 CCS 调试器窗口的帮助)进行了比较。
    然后,我得到了它,RTC 时间比秒表时间快。


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

    如果您能让我了解速度快了多少、1%、10%、是速度的两倍、那么这将有助于诊断问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大约1分钟2秒增量意味着大约4-5%。


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

    我认为您的问题在以下方面:

    HibernateRTCMatchSet (0、HibernateRTCGet ()+5);
    

    大多数情况下、这将起作用。 有时 RTC 亚秒计数器可能会在调用 HiberneRTCGet ()和 RTCMatchSet ()之间溢出。 在这些情况下、您会在上一个中断4秒后而不是5秒后获得下一个中断。 如果您初始化 RTC 计数器和匹配值、然后定期递增匹配值、则它应该起作用。

    HibernateRTCMatchSet (0、HibernateRTCMatchGet ()+5);
    

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

    此致、
    Satya
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    但是,在该函数的 HibernateRTCMatchGet ()中,SIR 需要一个参数,,,,,,,,,,,
    那么、我将传递该函数的内容。

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

    抱歉、使用0、与您设置的匹配寄存器相同。

    HibernateRTCMatchSet (0、HibernateRTCMatchGet (0)+5);