int main(void)
{ SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
if(HibernateIsActive() == false)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0x08);//1000
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1, GPIO_PIN_1); //使能低功耗模式
SysCtlPeripheralEnable(SYSCTL_PERIPH_HIBERNATE);
//Enables the Hibernation module for operation
HibernateEnableExpClk(SysCtlClockGet());
//Enables GPIO retention(保留) after wake from hibernation.
HibernateGPIORetentionEnable();
SysCtlDelay(64000000);
//低功耗模式下唤醒引脚配置
//HibernateWakeSet(HIBERNATE_WAKE_PIN);
HibernateRTCSet(0);
HibernateRTCEnable();
HibernateRTCMatchSet(0,5);//RTC唤醒时间5s
HibernateWakeSet(HIBERNATE_WAKE_PIN | HIBERNATE_WAKE_RTC);
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3, 0x00);
HibernateRequest();
}
while(1)
{
}
}
发现即使是初次上电,HibernateIsActive()函数返回值仍然是true,想实现休眠一次,唤醒后不再休眠,但是如上代码烧录进TM4后无法进入休眠
Susan Yang:
您是在连接仿真器/电脑上的CCS下测试的?此时无法真正进入休眠的
您现在使用的哪款芯片/开发板?或者私信给一下您的工程,我明天来测试一下您的程序,谢谢
user6380423:
回复 Susan Yang:
我使用的是TM4C123GH6PM Launchpad,是用USB供电测试的,这个函数始终返回true,不过我发现SW2和WAKE管脚相连,我把if(HibernateIsActive())改为了if(GPIOPinRead(GPIO_PORTF_BASE,GIPO_PIN_0) == 0x00)之后用按下SW2来唤醒,可以实现只休眠一次了
Susan Yang:
回复 user6380423:
您使用的应该是EK-TM4C123GXL?
www.ti.com/…/EK-TM4C123GXL
在EK-TM4C123上,只有VDD3ON是可用的休眠模式。您可以看一下
www.ti.com/…/spmu296.pdf
2.2.2 Hibernate