Hi all ,
I found that my TM4C1231E6PM processor can't always be waken up form deep-sleep mode.
First , I had configure the following configuration in the header of main function :
SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ |SYSCTL_OSC_MAIN); //Enable peripherals SysCtlPeripheralEnable(SYSCTL_PERIPH_HIBERNATE); SysCtlPeripheralEnable(SYSCTL_PERIPH_CAN0); SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); SysCtlPeripheralEnable(SYSCTL_PERIPH_WDOG0); SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_HIBERNATE); SysCtlPeripheralDeepSleepEnable(SYSCTL_PERIPH_HIBERNATE); SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_CAN0); SysCtlPeripheralDeepSleepEnable(SYSCTL_PERIPH_CAN0); SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_GPIOA); SysCtlPeripheralDeepSleepEnable(SYSCTL_PERIPH_GPIOA); SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_GPIOB); SysCtlPeripheralDeepSleepEnable(SYSCTL_PERIPH_GPIOB); SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_GPIOC); SysCtlPeripheralDeepSleepEnable(SYSCTL_PERIPH_GPIOC); SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_GPIOD); SysCtlPeripheralDeepSleepEnable(SYSCTL_PERIPH_GPIOD); SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_GPIOE); SysCtlPeripheralDeepSleepEnable(SYSCTL_PERIPH_GPIOE); SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_GPIOF); SysCtlPeripheralDeepSleepEnable(SYSCTL_PERIPH_GPIOF); SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_WDOG0); SysCtlPeripheralDeepSleepEnable(SYSCTL_PERIPH_WDOG0); SysCtlPeripheralClockGating(true);
Second , I register a interrupt handler in GPIO_PORTC_BASE - GPIO_PIN_4 :
GPIOPinTypeGPIOInput(GPIO_PORTC_BASE, GPIO_PIN_4); GPIOPinIntClear(GPIO_PORTC_BASE , GPIO_PIN_4); GPIOIntTypeSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_FALLING_EDGE); IntPrioritySet(INT_GPIOC, 6<<5); GPIOPortIntRegister(GPIO_PORTC_BASE, GPIO_C_INT_HANDLER); GPIOPinIntEnable(GPIO_PORTC_BASE, GPIO_PIN_4);
Third , periodically enter deep-sleep by calling the following function :
SysCtlDeepSleepClockSet(SYSCTL_DSLP_DIV_4|SYSCTL_DSLP_OSC_INT30); SysCtlDeepSleep();
I found my TM4C1231E6PM processor can't always be waken up by GPIO_PORTC_BASE - GPIO_PIN_4. I put a pulse per 10 seconds to GPIO_PORTC_BASE - GPIO_PIN_4 , and the processor can be waken up for most of times (>99 %) when it in deep-sleep mode. But once the processor miss a interrupt , it will always hang in deep-sleep mode.
Would anyone knows the condition that TM4C1231E6PM will hang in deep-sleep mode and can't be waken up by interrupt ?
Thanks.
Cory