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.

[参考译文] 编译器/TM4C129EKCPDT:休眠

Guru**** 2484615 points
Other Parts Discussed in Thread: TM4C129EKCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/732492/compiler-tm4c129ekcpdt-hibernate

器件型号:TM4C129EKCPDT

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

我们使用的是 TM4C129EKCPDT 芯片。

我想做的是、每次 IO 端口状态改变时、状态(uint32_t 的变量数据)都会保存到 HIBDATA 寄存器(调用 HibernateDataSet)中、并且在电源重新通电时可以再次读取之前记录的 IO 状态。(HibernateDataGet 函数被读出)
硬件操作是通过按钮电池为 VBAT (引脚68)引脚供电、而不是为 XSOC0或 XSOC1 (引脚66/67)和晶体振动供电。是否存在问题?

参考 TI 演示,我编写了以下简化代码(实际上我不确定如何配置):

uint32_t pin_vel = 0x00000001;
uint32_t bk_pin = 0x00000000;
Set_HIBERNATE ()
{
HibernateDataSet (&pin_vel、1);//pin_vel 根据 IO 的状态变化
}

get_HIBERNATE ()
{
SysCtlPeripheralEnable (SYSCTL_Periph_HIBERNATE);//启用休眠模块。
HibernateClockConfig (HIBERNATE_OSC_LOWDRIVE);
ui32Status = HibernateIntStatus (0);
HibernateIntClear (ui32状态);
if (HibernateIsActivate())
{
HibernateDataGet (&bk_pin、1);//将数据读取到 bk_pin
rt_kprintf ("读取值=%ld\r\n"、bk_pin);//获取断电前写入的值并将其输出
}
}

void hip_thread()
{
//其他初始化

get_hibernate()
while (1)
{
get_Hibernate ();//不断写入"pin_vel"值,"pin_vel"将发生变化
delay();
}
} 

程序运行打印以获得值0、而不是写入值。 如何修改软件?

我需要详细的配置。我多次尝试自己配置、但测试不起作用。
因为我是第一次使用 TI 的芯片、所以不是很熟悉。我最好能给我一个简单的程序、它只能实现我想要的。

谢谢!

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

    下面是一个简单的程序、用于配置休眠模块并从备用电池的存储器中读取一个32位整数。 它将该值输出到 UART 中、并允许用户更改 UART 中的值。 如果您正确连接了电池、则在断电期间将保留最后输入的值。 主例程如下所示、整个工程附加在.zip 文件中。

    //
    int
    main (void)
    {
    unsigned int hibernateData;
    char buffer[32];
    //
    //从 PLL 以120MHz 运行。
    //
    G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
    SYSCTL_OSC_MAIN | SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480)、120000000);
    
    //
    //初始化 UART。
    //
    ConfigureUART();
    
    //初始化休眠模块
    SysCtlPeripheralEnable (SYSCTL_Periph_HIBERNATE);
    //
    //等待休眠模块准备就绪。
    //
    while (!SysCtlPeripheralReady (SYSCTL_Periph_HIBERNATE))
    {
    }
    HibernateEnableExpClk (g_ui32SysClock);
    HibernateClockConfig (HIBERNATE_OSC_LFIOSC);
    
    //读取存储在休眠存储器中的数据
    HibernateDataGet (HibernateData、1);
    
    while (1)
    {
    UARTprintf ("存储在休眠存储器中的当前值为:%d\n",HibernateData);
    UARTprintf ("输入新值:");
    UARTgets (buffer、32);
    sscanf (buffer、"%d"、HibernateData);
    
    //将新值存储在休眠存储器中
    HibernateDataSet (HibernateData、1);
    }
    }
    

    /cfs-file/__key/communityserver-discussions-components-files/908/EK_2D00_HibernateData.zip

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