Demo of working sleep and deepsleep commands. mbed's version currently does not

Dependencies:   mbed

Fork of DipCortex-SleepyTime by Carl - SolderSplash Labs

Committer:
SolderSplashLabs
Date:
Thu Nov 14 22:31:45 2013 +0000
Revision:
0:d616150fefca
Child:
1:03baf535e2fc
Demo bypassing mbed library sleep and deepsleep commands

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SolderSplashLabs 0:d616150fefca 1 #include "mbed.h"
SolderSplashLabs 0:d616150fefca 2
SolderSplashLabs 0:d616150fefca 3 DigitalIn Button(P0_1);
SolderSplashLabs 0:d616150fefca 4 InterruptIn ButtonIrq(P0_1);
SolderSplashLabs 0:d616150fefca 5
SolderSplashLabs 0:d616150fefca 6 DigitalOut Led2(P1_22);
SolderSplashLabs 0:d616150fefca 7
SolderSplashLabs 0:d616150fefca 8 Ticker timer;
SolderSplashLabs 0:d616150fefca 9
SolderSplashLabs 0:d616150fefca 10 void sleep_normal ( void )
SolderSplashLabs 0:d616150fefca 11 {
SolderSplashLabs 0:d616150fefca 12 // PCON[PD] set to sleep
SolderSplashLabs 0:d616150fefca 13 LPC_PMU->PCON = 0x0;
SolderSplashLabs 0:d616150fefca 14
SolderSplashLabs 0:d616150fefca 15 // SRC[SLEEPDEEP] set to 0 = sleep
SolderSplashLabs 0:d616150fefca 16 SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk;
SolderSplashLabs 0:d616150fefca 17
SolderSplashLabs 0:d616150fefca 18 // wait for interrupt
SolderSplashLabs 0:d616150fefca 19 __WFI();
SolderSplashLabs 0:d616150fefca 20 }
SolderSplashLabs 0:d616150fefca 21
SolderSplashLabs 0:d616150fefca 22 // Section 3.9.4 of the LPC11U24 User Manual
SolderSplashLabs 0:d616150fefca 23 void sleep_deep ( void )
SolderSplashLabs 0:d616150fefca 24 {
SolderSplashLabs 0:d616150fefca 25 // PCON[PD] set to deepsleep
SolderSplashLabs 0:d616150fefca 26 LPC_PMU->PCON = 0x1;
SolderSplashLabs 0:d616150fefca 27
SolderSplashLabs 0:d616150fefca 28 // SRC[SLEEPDEEP] set to 1 = deep sleep
SolderSplashLabs 0:d616150fefca 29 SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
SolderSplashLabs 0:d616150fefca 30
SolderSplashLabs 0:d616150fefca 31 // Power up everything after powerdown
SolderSplashLabs 0:d616150fefca 32 LPC_SYSCON->PDAWAKECFG &= 0xFFFFF800;
SolderSplashLabs 0:d616150fefca 33
SolderSplashLabs 0:d616150fefca 34 // wait for interrupt
SolderSplashLabs 0:d616150fefca 35 __WFI();
SolderSplashLabs 0:d616150fefca 36 }
SolderSplashLabs 0:d616150fefca 37
SolderSplashLabs 0:d616150fefca 38 void ButtonPressed ( void )
SolderSplashLabs 0:d616150fefca 39 {
SolderSplashLabs 0:d616150fefca 40 // Wake up ..
SolderSplashLabs 0:d616150fefca 41 Led2 = !Led2;
SolderSplashLabs 0:d616150fefca 42 }
SolderSplashLabs 0:d616150fefca 43
SolderSplashLabs 0:d616150fefca 44 int main()
SolderSplashLabs 0:d616150fefca 45 {
SolderSplashLabs 0:d616150fefca 46 Led2 = 1;
SolderSplashLabs 0:d616150fefca 47 Button.mode(PullUp);
SolderSplashLabs 0:d616150fefca 48 ButtonIrq.fall(ButtonPressed);
SolderSplashLabs 0:d616150fefca 49
SolderSplashLabs 0:d616150fefca 50 while(1)
SolderSplashLabs 0:d616150fefca 51 {
SolderSplashLabs 0:d616150fefca 52 // All I do is sleep
SolderSplashLabs 0:d616150fefca 53 //sleep_normal();
SolderSplashLabs 0:d616150fefca 54 sleep_deep();
SolderSplashLabs 0:d616150fefca 55 }
SolderSplashLabs 0:d616150fefca 56 }