Hi Team,
I am using a custom S32K118 board where i want to enter the VLPS Mode, i am disabling all the peripherals that can stop entering the VLPS Mode and then able to enter to VLPS mode. But after that for waking up i have configured the Pin interrupt as the Wakeup Source, Now i have written two functions one for going to sleep and one for wakeup, Please find the two functions below.
The problem i am facing is, it is stucking somewhere in the wakeup sequence and then MCU is not responding, then i have to do complete power down and power up again..
void Enter_VLPS_Mode (void)
{
INT_SYS_DisableIRQ(ADC0_IRQn);
INT_SYS_DisableIRQ(CAN0_ORed_0_31_MB_IRQn);
INT_SYS_DisableIRQ(CAN0_ORed_Err_Wakeup_IRQn);
INT_SYS_DisableIRQ(LPIT0_IRQn);
INT_SYS_DisableIRQ(LPUART1_RxTx_IRQn);
INT_SYS_DisableIRQ(LPUART0_RxTx_IRQn);
INT_SYS_DisableIRQ(FTFC_IRQn);
CAN_DeInit();
Pit_DeInit();
UART_DeInit();
INT_SYS_ClearPending(ADC0_IRQn);
INT_SYS_ClearPending(CAN0_ORed_0_31_MB_IRQn);
INT_SYS_ClearPending(CAN0_ORed_Err_Wakeup_IRQn);
INT_SYS_ClearPending(LPIT0_IRQn);
INT_SYS_ClearPending(LPUART1_RxTx_IRQn);
INT_SYS_ClearPending(LPUART0_RxTx_IRQn);
INT_SYS_ClearPending(FTFC_IRQn);
RTC_SetAlarmAfterPeriod (Configured_Heartbeat_Frequency,0,0);
INT_SYS_ClearPending(PORT_IRQn);
POWER_SYS_SetMode(VLPR, POWER_MANAGER_POLICY_AGREEMENT);
POWER_SYS_SetMode(VLPS, POWER_MANAGER_POLICY_AGREEMENT);
}
void Restore_From_VLPS_To_RUN(void)
{
// Go back to RUN Mode
POWER_SYS_SetMode(RUN, POWER_MANAGER_POLICY_AGREEMENT);
// Restore the RUN cocke.
CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT);
// Re initialize the modules we have de-inititalized.
CAN_Init();
Pit_Init(); /* or LPIT_Init, be consistent with what you use */
LPI2C_INIT();
LPUART_Initialization();
ADC_Initialization();
CSEC_Init();
RTC_Init(); /* if you need it active right after wake */
Accelerometer_Init(&ACC_Info);
// Re enable the IRQ's we disabled.
INT_SYS_EnableIRQ(ADC0_IRQn);
INT_SYS_EnableIRQ(CAN0_ORed_0_31_MB_IRQn);
INT_SYS_EnableIRQ(CAN0_ORed_Err_Wakeup_IRQn);
INT_SYS_EnableIRQ(LPIT0_IRQn);
INT_SYS_EnableIRQ(LPUART1_RxTx_IRQn);
INT_SYS_EnableIRQ(LPUART0_RxTx_IRQn);
INT_SYS_EnableIRQ(FTFC_IRQn);
INT_SYS_EnableIRQGlobal();
}