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/TM4C123GH6PM:休眠模块

Guru**** 2477705 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/686173/ccs-tm4c123gh6pm-hibernation-module

器件型号:TM4C123GH6PM
Thread 中讨论的其他器件: EK-TM4C123GXLTM4C123

工具/软件:Code Composer Studio

大家好、我想休眠10分钟、之后、我的程序应该进入正常运行2分钟、然后再进入休眠10分钟。 通过这种方式、应以这种方式重复整个周期。 是否可以在 tm4c123gh下午6时执行此方法?

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

    这应该是可能的、是的。

    您是否打算为此使用 RTC? 您是否使用过休眠模块? 如果是、您使用的是哪种模式?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ralph Jacobi、

    是的、我将使用 RTC 执行此任务。现在、我开始在休眠模块中工作。 我计划使用 RTC 匹配-秒/亚秒模式和 RTC 计数器-秒/亚秒模式。请分享有关休眠模块模式的任何参考、这对我非常有帮助。

    谢谢、此致、

    Siva  

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

    RTC 匹配绝对是正确的选择! 遗憾的是、我们没有针对它的 TivaWare 示例。

    此主题包含一些有助于指导您实现的详细信息: e2e.ti.com/.../511213

    此外 、在 e2e.ti.com/.../561075上、大家还讨论了休眠与 RTC 匹配的相关代码示例

    请查看这些示例是否能让您继续、如果不能、我可能会在下周有时间来整理一个基本示例。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Ralphi Jacobi、您好!
    该代码在50秒后进入休眠模式、我想将休眠模式延长120秒。 120秒后、它应该从休眠中唤醒。如何设置120秒的休眠和 RTC 匹配唤醒时间。请帮助我解决问题。


    #include
    #include
    #include
    #include
    #include
    #include "tm4c123ghp6.h"
    #include "utils/ustdlib.h"
    #include "inc/hw_types.h"
    #include "inc/hw_memmap.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/debug.h"
    #include "driverlib/hibernate.h"
    #include "driverlib/gpio.h"
    #include "driverlib/interrupt.h"
    #include "inc/hw_hibernate.h"
    空 uart0_init()

    SYSCTL_RCGCUART_R |=0x00000001;
    SYSCTL_RCGCGPIO_R |=0x00000001;
    SYSCTL_RCGCHIB_R |=0x00000001;
    GPIO_Porta_lock_R |=0x4C4F434B;
    GPIO_Porta_CR_R |=0x00000003;
    GPIO_Porta_DEN_R |=0x00000003;
    GPIO_Porta_AFSEL_R |=0x00000003;
    GPIO_Porta_PCTL_R |=0x00000011;
    UART0_CTL_R &=~0x00000001;
    UART0_IBRD_R =104;
    UART0_FBRD_R=11;
    UART0_LCRH_R |=0x00000060;
    UART0_CC_R |=0x00000000;
    UART0_CTL_R |=0x00000301;


    void U0_SEND (无符号字符 k)

    while (((UART0_FR_R & 0x00000020)!=0);
    UART0_DR_R =k;

    void U0_print (无符号字符*p)

    while (* p)

    U0_SEND (*p++);


    空延迟(unsigned int x)

    unsigned int i、j;
    for (i=0;<x;i++))

    对于(j=0;<x;j++)





    int main (空)


    long i=0;
    uart0_init();
    U0_PRINT ("UART0 initialized\r\n");
    延迟(3000);

    SysCtlPeripheralEnable (SYSCTL_Periph_HIBERNATE);
    HibernateEnableExpClk (SysCtlClockGet ());
    HibernateRTCEnable();
    HibernateRTCSet (0);
    uint32_t ui32Status;
    unsigned char bubuff [100]={0};
    unsigned char test[3]="50";
    while (1)

    i++;
    延迟(1000);
    ui32Status = HibernateRTCGet ();
    memset (buff、0、sizeof (buff));
    ltoa (ui32Status、buff);
    U0_PRINT (缓冲器);

    if (strcmp (buff、test)==0)

    SysCtlPeripheralEnable (SYSCTL_Periph_HIBERNATE);
    HibernateEnableExpClk (SysCtlClockGet ());
    HibernateRequest();




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

    您好、Siva、

    我为 EK-TM4C123GXL LaunchPad 准备了一个示例项目(如下所示)、其中包括在50秒后启动休眠、并每120秒从休眠模式唤醒。 启用 RTC 后 RGB LED 启动、50秒后关闭、然后每120秒打开和关闭一次。

    e2e.ti.com/.../hibernate_5F00_120secwake.zip

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

    Ralphi Jacobi、您好!

        在下面的这个代码中、我已添加到以下 API 中、并参考您的示例代码

        1. HibernateRequest();

        HibernateRTCGet ();

        HibernateWakeSet (HIBERNATE_WAKE_PIN | HIBERNATE_WAKE_RTC);

      我的目标是获取 RTC 计数器的当前值、如果该值为50、则应启动休眠。 之后、只要 RTC 匹配发生、它就会从休眠中唤醒。 请确认上述条件是否得到正确满足。 如果需要进一步修改、请向我提供帮助。

    #include
    #include
    #include "inc/hw_ints.h"
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "inc/hw_hibernate.h"
    #include "driverlib/debug.h"
    #include "driverlib/gpio.h"
    #include "driverlib/hibernate.h"
    #include "driverlib/interrupt.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/sysctl.h"
    #include "tm4c123ghp6.h"
    #include


    空 uart0_init()

    SYSCTL_RCGCUART_R |=0x00000001;
    SYSCTL_RCGCGPIO_R |=0x00000001;
    SYSCTL_RCGCHIB_R |=0x00000001;
    GPIO_PORta_lock_R |=0x4C4F434B;
    GPIO_PORta_CR_R |=0x00000003;
    GPIO_Porta_DEN_R |=0x00000003;
    GPIO_PORta_AFSEL_R |=0x00000003;
    GPIO_Porta_PCTL_R |=0x00000011;
    UART0_CTL_R &=~0x00000001;
    UART0_IBRD_R =104;
    UART0_FBRD_R=11;
    UART0_LCRH_R |=0x00000060;
    UART0_CC_R |=0x00000000;
    UART0_CTL_R |=0x00000301;


    void U0_SEND (无符号字符 k)

    while (((UART0_FR_R & 0x00000020)!=0);
    UART0_DR_R =k;

    void U0_print (无符号字符*p)

    while (* p)

    U0_SEND (*p++);


    空延迟(unsigned int x)

    unsigned int i、j;
    for (i=0;<x;i++))

    对于(j=0;<x;j++)




    无效休眠 ISRHandler (无效)

       uint32_t ui32Status;
       ui32Status = HibernateIntStatus (真);
       HibernateIntClear (ui32状态);

       if (ui32Status 和 HIBERNATE_INT_RTC_MATH_0)
        {
          u0_print ("在休眠状态下、INTeruppt \r\n");
          uint32_t ui32RTCMatch;
          ui32RTCMatch = HibernateRTCGet ();
          HibernateRTCMatchSet (0、ui32RTCMatch + 200);
          IF (GPIOPinRead (GPIO_PORTF_BASE、GPIO_PIN_3))
            {
              U0_PRINT ("休眠状态下指示灯熄灭\r\n);
              延迟(1000);
              GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_3、0x00);
            }
          其他
            {
             U0_PRINT ("休眠状态指示灯亮起\r\n);
             延迟(1000);
             GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_3、0x08);
            }
       }

    void main (void)

      long i=0;
      uart0_init();
      U0_PRINT ("UART0 initialized\r\n");
      延迟(3000);


    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
    GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_3);


    SysCtlPeripheralEnable (SYSCTL_Periph_HIBERNATE);
    HibernateEnableExpClk (0);

    while (!(HWREG (HIB_RIS)& HIB_RIS_WC));

    HibernateClockConfig (HIBERNATE_OSC_LOWDRIVE);


    HibernateRTCSet (0);
    HibernateRTCMatchSet (0.5);
    HibernateIntEnable (HIBERNATE_INT_RTC_MATH_0);
    HibernateRTCTrimSet (0x7FFF);
    HibernateRTCEnable();
    HibernateWakeSet (HIBERNATE_WAKE_PIN | HIBERNATE_WAKE_RTC);

    IntEnable (INT_HIBERNATE_TM4C123);
    IntMasterEnable();

    uint32_t ui32Status;
    unsigned char bubuff [100]={0};
    unsigned char test[3]="50";  

      while (1)
      {
        u0_print ("在 main\r\n"中);
        延迟(1000);
         i++;
         延迟(1000);

        ui32Status = HIB_RTCC_R;
        memset (buff、0、sizeof (buff));
        ltoa (ui32Status、buff);
        U0_PRINT (缓冲器);  
        U0_print ("\r\n");
            if (strcmp (buff、test)==0)
             {
              U0_PRINT ("\n\r Hibernate Requested\r\n");
              HibernateRequest();

             }

       }

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

    您好、Siva、

    啊,是的,我忘了加入 HibernateRequest();在 ISR 处理结束时,谢谢您的关注,我专注于 RTC 计时。

    那么、代码中唯一的区别是它、而不是设置

    HibernateRTCMatchSet (0、50);//设置初始匹配值以在50秒后触发 RTC 

    您需要通过 HibernateRTCMet 手动检查计数、并确定何时从此处进入休眠模式。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Ralph Jacobi、
    使用 HibernateRTCMet,我可以使用 HibernateWakeSet()中的 HIBERNATE_WAKE_RTC 进入休眠请求并从休眠中唤醒;只要 RTC 匹配就可以。 非常感谢您帮助我解决问题。


    谢谢、此致、
    Siva