see: http://mbed.org/users/okini3939/notebook/low-power-lpc81x/
main.cpp
- Committer:
- okini3939
- Date:
- 2013-06-07
- Revision:
- 1:f336c9774f7a
- Parent:
- 0:349dc3aae37a
File content as of revision 1:f336c9774f7a:
/* * Can not be compiled with mbed.org. * I used MDK-ARM Lite + LPC-LINK2. */ #include "LPC8xx.h" void SwitchMatrix_Init (void); void sleep () { LPC_PMU->PCON = 0; SCB->SCR &= ~(1<<2); __WFI(); } void deep_sleep () { LPC_SYSCON->PDAWAKECFG = LPC_SYSCON->PDRUNCFG; LPC_PMU->PCON = (1<<0); SCB->SCR |= (1<<2); __WFI(); } void power_down () { LPC_SYSCON->PDAWAKECFG = LPC_SYSCON->PDRUNCFG; LPC_PMU->PCON = (2<<0); SCB->SCR |= (1<<2); __WFI(); } void WKT_IRQHandler () { if (LPC_WKT->CTRL & (1<<1)) { LPC_GPIO_PORT->CLR0 = (1<<7); // R on LPC_WKT->CTRL |= (1<<2)|(1<<1); } else { LPC_GPIO_PORT->CLR0 = (1<<17); // G on } } int main(void) { int i; SwitchMatrix_Init(); // GPIO LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6); LPC_GPIO_PORT->DIR0 = (1<<17)|(1<<16)|(1<<7); LPC_GPIO_PORT->SET0 = (1<<17)|(1<<16)|(1<<7); LPC_GPIO_PORT->CLR0 = (1<<16); // B on for (i = 0; i < 500000; i ++) __NOP(); LPC_GPIO_PORT->SET0 = (1<<16); // B off // WKT LPC_SYSCON->SYSAHBCLKCTRL |= (1<<9); LPC_SYSCON->PRESETCTRL &= ~(1<<9); LPC_SYSCON->PRESETCTRL |= (1<<9); LPC_PMU->DPDCTRL |= (1<<2); LPC_SYSCON->STARTERP1 |= (1<<15); LPC_WKT->CTRL = (1<<2)|(1<<1)|(1<<0); LPC_WKT->COUNT = 10000 * 3; NVIC_EnableIRQ(WKT_IRQn); __enable_irq(); // sleep(); // deep_sleep(); power_down(); for (i = 0; i < 500000; i ++) __NOP(); LPC_GPIO_PORT->SET0 = (1<<7); // R off for (;;) { __NOP(); } }