Enter power-down mode, but couldn't wake it up using an interrupt from a real time clock (RTC) interrupt

Dependencies:   PowerControl RTC mbed

Committer:
weidongguo
Date:
Mon Feb 22 06:57:25 2016 +0000
Revision:
1:635eaebcd13f
Parent:
0:35c76e921818
1)Power down most peripherals except for GPIO for LEDs and UART0 for serial port communication.  2) Can enter sleep mode and be waken by a RTC interrupt every minute after the first 5 seconds

Who changed what in which revision?

UserRevisionLine numberNew contents of line
weidongguo 0:35c76e921818 1 #include "mbed.h"
weidongguo 0:35c76e921818 2 #include "PowerControl.h"
weidongguo 1:635eaebcd13f 3 #include "EthernetPowerControl.h"
weidongguo 0:35c76e921818 4 #include "RTC.h"
weidongguo 0:35c76e921818 5 DigitalOut leds[] = {DigitalOut(LED1), DigitalOut(LED2), DigitalOut(LED3), DigitalOut(LED4)}; // put each LED object into an array, easier to access
weidongguo 1:635eaebcd13f 6 Serial pc(USBTX, USBRX);
weidongguo 0:35c76e921818 7
weidongguo 0:35c76e921818 8 void ISR(void){
weidongguo 0:35c76e921818 9 leds[2] = !leds[2];
weidongguo 1:635eaebcd13f 10 leds[1] = !leds[1];
weidongguo 0:35c76e921818 11 }
weidongguo 0:35c76e921818 12
weidongguo 0:35c76e921818 13
weidongguo 0:35c76e921818 14 int main() {
weidongguo 1:635eaebcd13f 15
weidongguo 1:635eaebcd13f 16 //turn off other unused peripherals
weidongguo 1:635eaebcd13f 17 Peripheral_PowerDown( ~(LPC1768_PCONP_PCUART0 | LPC1768_PCONP_PCGPIO) );
weidongguo 1:635eaebcd13f 18 //turn off everything except for GPIO for LED and UART0 for serial port communication.
weidongguo 1:635eaebcd13f 19
weidongguo 1:635eaebcd13f 20 set_time(1456096500); // Sun, 21 Feb 2016 23:15:00 GMT
weidongguo 0:35c76e921818 21 tm t = RTC::getDefaultTM();
weidongguo 1:635eaebcd13f 22 t.tm_sec = 5;
weidongguo 1:635eaebcd13f 23 RTC::alarm(&ISR, t); //send interrupt to wake up from sleep() mode .
weidongguo 1:635eaebcd13f 24 // the RTC sends one interrupt every minute after the first 5 seconds
weidongguo 1:635eaebcd13f 25 leds[0] = 1;
weidongguo 1:635eaebcd13f 26 char ch;
weidongguo 0:35c76e921818 27 while (true) {
weidongguo 1:635eaebcd13f 28 if(pc.readable()){
weidongguo 1:635eaebcd13f 29 ch = pc.getc();
weidongguo 1:635eaebcd13f 30 pc.putc(ch);
weidongguo 1:635eaebcd13f 31 }
weidongguo 1:635eaebcd13f 32
weidongguo 1:635eaebcd13f 33 leds[3] = !leds[3];
weidongguo 1:635eaebcd13f 34 sleep();
weidongguo 0:35c76e921818 35 }
weidongguo 0:35c76e921818 36 }
weidongguo 0:35c76e921818 37