/* Turn off all other peripheral dividers */
LPC_SYSCON->SSP0CLKDIV = 0;
LPC_SYSCON->SSP1CLKDIV = 0;
LPC_SYSCON->WDTCLKDIV = 0;
/* SYSAHBCLKCTRL while running in FLASH */
LPC_SYSCON->SYSAHBCLKCTRL=
(1<<0) //SYS Clock
|(1<<1)//ROM
|(1<<2) //RAM
|(1<<3) //FLASHREG
|(1<<4) //FLASHARRAY
|(1<<6) //GPIO
|(1<<12)//UART
|(1<<16)//IOCON
;
/* Specify the start logic to allow the chip to be waken up */
LPC_SYSCON->STARTAPRP0 &= ~(1<<(2));// Falling edge
LPC_SYSCON->STARTRSRP0CLR|=(1<<(2));// Clear pending bit
LPC_SYSCON->STARTERP0|=(1<<(2));// Enable Start Logic
void SLEEP(void){
/* Turn on all the IRC & Flash */
LPC_SYSCON->PDRUNCFG &= ~((1<<0) | (1<<1) | (1<<2));
/* Switch MAINCLKSEL to IRC */
LPC_SYSCON->MAINCLKSEL= 0;
LPC_SYSCON->MAINCLKUEN = 0;
LPC_SYSCON->MAINCLKUEN = 1;
while (!(LPC_SYSCON->MAINCLKUEN & 0x01));
/* Make sure only the IRC is running */
LPC_SYSCON->PDRUNCFG = ~((1<<0) | (1<<1) | (1<<2) | (1<<9)) ;
/* Clear the Deep Sleep Flag */
LPC_PMU->PCON |= (1<<8);
/* All OFF */
LPC_SYSCON->PDSLEEPCFG |= 0x000018FF;
/* Specify peripherals to be powered up again when returning from deep sleep mode */
LPC_SYSCON->PDAWAKECFG = LPC_SYSCON->PDRUNCFG;
/* Ensure DPDEN is disabled in the power control register */
LPC_PMU->PCON= (1<<11); //Clear DPDFLAG if it was set
/* Specify Deep Sleep mode before entering mode */
SCB->SCR|=(1<<2);//Set SLEEPDEEP bit
SYST_CSR &= ~(uint32_t)0x00000001; //Clear ENABLE to 1b - enable SYSTICK.
LPC_SYSCON->STARTRSRP0CLR |= (1<<(2));
NVIC_ClearPendingIRQ(WAKEUP2_IRQn);
NVIC_EnableIRQ(WAKEUP2_IRQn);
/* Reconfigure the IOs */
config_ios();
/* Enter Deep Sleep mode */
__WFI();
}
|