/*********************************************************************//** * @brief c_entry: Main program body * @param[in] None * @return None **********************************************************************/ void c_entry (void) { EXTI_InitTypeDef EXTICfg; /* Initialize debug via UART0 * – 115200bps * – 8 data bit * – No parity * – 1 stop bit * – No flow control */ debug_frmwrk_init(); // print welcome screen print_menu(); /* Initialize EXT pin and registers * P2.10 as /EINT0 */ PINSEL_ConfigPin(2,10,1); EXTI_Init(); EXTICfg.EXTI_Line = EXTI_EINT0; /* edge sensitive */ EXTICfg.EXTI_Mode = EXTI_MODE_EDGE_SENSITIVE; EXTICfg.EXTI_polarity = EXTI_POLARITY_LOW_ACTIVE_OR_FALLING_EDGE; EXTI_ClearEXTIFlag(EXTI_EINT0); EXTI_Config(&EXTICfg); NVIC_SetPriorityGrouping(4); NVIC_SetPriority(EINT0_IRQn, 0); NVIC_EnableIRQ(EINT0_IRQn); _DBG_("Press '1' to enter system in deep sleep mode.\n\r"\ "If you want to wake-up the system, press INT/WAKE-UP button."); while(_DG !='1') { _DBG_("I'm waiting...\n\r"); } _DBG_("I'm sleeping..."); // Enter target deep sleep mode CLKPWR_DeepSleep(); SystemInit(); debug_frmwrk_init(); // MCU will be here after waking up _DBG_("\n\r-------- I'm wake up! -------- "); while (1); }
/*********************************************************************//** * @brief c_entry: Main program body * @param[in] None * @return int **********************************************************************/ int c_entry (void) { /* Initialize debug via UART0 * – 115200bps * – 8 data bit * – No parity * – 1 stop bit * – No flow control */ debug_frmwrk_init(); // print welcome screen print_menu(); // Init WDT, IRC OSC, interrupt mode, timeout = 2000000 us = 2s WDT_Init(WDT_CLKSRC_IRC, WDT_MODE_INT_ONLY); _DBG_("Press '1' to enter system in Deep Sleep mode"); while(_DG !='1'); NVIC_EnableIRQ(WDT_IRQn); WDT_Start(WDT_TIMEOUT); _DBG_("Enter Deep Sleep mode!"); _DBG_("Wait 2s for WDT wake-up system..."); /*---------- Disable and disconnect the main PLL0 before enter into Deep-Sleep * or Power-Down mode <according to errata.lpc1768-16.March.2010> ------------ */ LPC_SC->PLL0CON &= ~(1<<1); /* Disconnect the main PLL (PLL0) */ LPC_SC->PLL0FEED = 0xAA; /* Feed */ LPC_SC->PLL0FEED = 0x55; /* Feed */ while ((LPC_SC->PLL0STAT & (1<<25)) != 0x00); /* Wait for main PLL (PLL0) to disconnect */ LPC_SC->PLL0CON &= ~(1<<0); /* Turn off the main PLL (PLL0) */ LPC_SC->PLL0FEED = 0xAA; /* Feed */ LPC_SC->PLL0FEED = 0x55; /* Feed */ while ((LPC_SC->PLL0STAT & (1<<24)) != 0x00); /* Wait for main PLL (PLL0) to shut down */ /*------------Then enter into PowerDown mode ----------------------------------*/ // Enter target power down mode CLKPWR_DeepSleep(); SystemInit(); debug_frmwrk_init(); _DBG_("\n\rSystem wake-up!\n\r"); while(1); return 1; }