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/TM4C1231E6PM:将 RTC 时钟计数器设置为等于 HIBRTCM0后、休眠 RTC 匹配0 ISR 缺失。

Guru**** 2485715 points
Other Parts Discussed in Thread: TM4C1231H6PM

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/732020/ccs-tm4c1231e6pm-hibernation-rtc-match0-isr-missing-after-setting-rtc-clock-counter-equal-to-hibrtcm0

器件型号:TM4C1231H6PM

工具/软件:Code Composer Studio

您好!


我创建了一个休眠 RTC 匹配0 ISR (不在休眠模式中)、并 在每次 ISR 触发后将 RTC 匹配0设置为10秒。


它一直工作、直到我更新 RTC 值、使其恰好等于下一个 match0值。 该中断将在设置后发生一次、但在以下中断上缺失。


在这种情况下、 是否需要在设置下一个 HIBRTCM0值后禁用 ISR 中的中断并启用中断?

谢谢、

Jacky

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

    器件型号:TM4C1231H6PM

    工具/软件:Code Composer Studio

    你(们)好

    我创建了一个休眠 RTC 匹配0 ISR (无休眠) 、并 在每个 ISR 触发后将 RTC 匹配0设置为10秒。

    它一直工作、直到我更新 RTC 值、使其恰好等于下一个 match0值。 该中断将在设置后发生一次、但缺少以下中断。

    在这种情况下、是否需要 在 每次稳定下一 个 HIBRTCM0值后禁用中断处理程序中的中断并启用中断?

    或其他任何解决方法?

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

    您的帖子是相同的、因此我将这些主题合并在一起、以便在一个位置回答这一问题。

    能否有人发布您用于以下目的的代码:
    1) 1)配置 RTC
    2) 2)更新 RTC
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    MAIN ()
    {
    SysCtlPeripheralEnable (SYSCTL_Periph_HIBERNATE);
    SysCtlPeripheralSlepEnable (SYSCTL_Periph_HIBERY);
    SysCtlPeripheralDeepSlepEnable (SYSCTL_Periph_HIBERNATE);
    
    xTaskCreate (MonitorTask、(signed portCHAR *)"MonitorTask"、240、NULL、4、 null);
    
    vTaskStartScheduler();
    while (1)
    {
    }
    }
    
    void MonitorTask (void *pvParameters)
    {
    HibernateIntClear (HIBERNATE_INT_RTC_MATH_0);
    IntPrioritySet (INT_HIBERNATE、6<5);
    HibernateIntRegister (IntRTCIntHandler);
    
    HibernateRTCMatch0Set (HibernateRTCGet ()+ 10);
    HibernateIntEnable (HIBERNATE_INT_RTC_MATH_0);
    
    G_xMonitorQueue = xQueueCreate( 4, sizeof(tMonitorTrigSource ));
    
    for (;;)
    {
    xQueueReceive( g_xMonitorQueue,MonitorTrigSource,portMAX_DELAY );
    if (MonitorTrigSource = Monitor_Trig_IntRTC)
    {
    //执行主代码。
    HibernateRTCMatch0Set (HibernateRTCGet ()+ 10);
    }
    }
    
    
    void IntRTCIntHandler (void)
    {
    无符号超长整型休眠值;
    signed portbase_type xHigherPriorityTaskWoken = pdFALSE;
    
    ulHibernateIntValue = HibernateIntStatus (真);
    
    IF (ulHibernateIntValue 和 HIBERNATE_INT_RTC_MATH_0)
    {
    tMonitorTrigSource MonitorTrigSource = Monitor_Trig_IntRTC;
    HibernateIntClear (HIBERNATE_INT_RTC_MATH_0);
    xQueueSendFromISR( g_xMonitorQueue,( void *)MonitorTrigSource、&xHigherPriorityTaskWeoken );
    
    if (xHigherPriorityTaskWeoken!= pdFALSE)
    {
    taskYIELD();
    }
    }
    
    void UpdateRTC (unsigned long ulRTC)//更新 RTC 等于 match0值时出现问题
    {
    HibernateRTCSet (ulRTC);
    } 

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

    很抱歉耽误你的时间。

    您能否尝试重新加载休眠 RTC、方法是先使用 HibernateRTCDisable 禁用 RTC、然后使用 HibernateRTCSet 加载计数、最后使用 HibernateRTCEnable 启用 RTC? 看看这是否解决了问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     您好,Ralph:

    不管用。

    一个 RTC 匹配后仍然没有中断请求。