Enter power-down mode, but couldn't wake it up using an interrupt from a real time clock (RTC) interrupt
Dependencies: PowerControl RTC mbed
main.cpp@1:635eaebcd13f, 2016-02-22 (annotated)
- 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?
User | Revision | Line number | New 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 |