mbed library sources modified for open wear
Dependents: openwear-lifelogger-example
Fork of mbed-src by
Diff: targets/hal/TARGET_NXP/TARGET_LPC11XX_11CXX/sleep.c
- Revision:
- 268:402bcc0c870b
- Parent:
- 30:91c1d09ada54
--- a/targets/hal/TARGET_NXP/TARGET_LPC11XX_11CXX/sleep.c Tue Jul 29 18:45:06 2014 +0100 +++ b/targets/hal/TARGET_NXP/TARGET_LPC11XX_11CXX/sleep.c Tue Jul 29 19:00:07 2014 +0100 @@ -18,10 +18,6 @@ #include "mbed_interface.h" void sleep(void) { -#if DEVICE_SEMIHOST - // ensure debug is disconnected - mbed_interface_disconnect(); -#endif // PCON[DPDEN] set to sleep LPC_PMU->PCON = 0x0; @@ -33,46 +29,20 @@ __WFI(); } -/* -* The mbed lpc1768 does not support the deepsleep mode -* as a debugger is connected to it (the mbed interface). -* -* As mentionned in an application note from NXP: -* -* http://www.po-star.com/public/uploads/20120319123122_141.pdf -* -* {{{ -* The user should be aware of certain limitations during debugging. -* The most important is that, due to limitations of the Cortex-M3 -* integration, the LPC17xx cannot wake up in the usual manner from -* Deep Sleep and Power-down modes. It is recommended not to use these -* modes during debug. Once an application is downloaded via JTAG/SWD -* interface, the USB to SWD/JTAG debug adapter (Keil ULINK2 for example) -* should be removed from the target board, and thereafter, power cycle -* the LPC17xx to allow wake-up from deep sleep and power-down modes -* }}} -* -* As the interface firmware does not reset the target when a -* mbed_interface_disconnect() semihosting call is made, the -* core cannot wake-up from deepsleep. -* -* We treat a deepsleep() as a normal sleep(). -*/ - void deepsleep(void) { -#if DEVICE_SEMIHOST - // ensure debug is disconnected - mbed_interface_disconnect(); -#endif // PCON[DPDEN] set to deepsleep - LPC_PMU->PCON = 0x2; + LPC_PMU->PCON = 0; // SRC[SLEEPDEEP] set to 1 = deep sleep SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; - // Power up everything after powerdown - LPC_SYSCON->PDAWAKECFG &= 0xFFFFF800; + //According to user manual it is kinda picky about reserved bits, so we follow that nicely + //Keep WDOSC and BOD in same state as they are now during deepsleep + LPC_SYSCON->PDSLEEPCFG = 0x000018B7 | (LPC_SYSCON->PDRUNCFG & (PDRUNCFG_WDTOSC_PD | PDRUNCFG_BOD_PD)); + + // Power up same as before powerdown + LPC_SYSCON->PDAWAKECFG = LPC_SYSCON->PDRUNCFG; // wait for interrupt __WFI();