/*********************************************************************//**
 * @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);
}
Пример #2
0
/*********************************************************************//**
 * @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;
}