
ok
main.cpp@0:ca2e1d0254a6, 2013-09-11 (annotated)
- Committer:
- avnisha
- Date:
- Wed Sep 11 17:14:35 2013 +0000
- Revision:
- 0:ca2e1d0254a6
ok
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
avnisha | 0:ca2e1d0254a6 | 1 | |
avnisha | 0:ca2e1d0254a6 | 2 | #include "mbed.h" |
avnisha | 0:ca2e1d0254a6 | 3 | #include "PowerControl.h" |
avnisha | 0:ca2e1d0254a6 | 4 | //#include "EthernetPowerControl.h" |
avnisha | 0:ca2e1d0254a6 | 5 | // Need PowerControl *.h files from this URL |
avnisha | 0:ca2e1d0254a6 | 6 | // http://mbed.org/users/no2chem/notebook/mbed-power-controlconsumption/ |
avnisha | 0:ca2e1d0254a6 | 7 | |
avnisha | 0:ca2e1d0254a6 | 8 | // Function to power down magic USB interface chip with new firmware |
avnisha | 0:ca2e1d0254a6 | 9 | #define USR_POWERDOWN (0x104) |
avnisha | 0:ca2e1d0254a6 | 10 | int semihost_powerdown() { |
avnisha | 0:ca2e1d0254a6 | 11 | uint32_t arg; |
avnisha | 0:ca2e1d0254a6 | 12 | return __semihost(USR_POWERDOWN, &arg); |
avnisha | 0:ca2e1d0254a6 | 13 | } |
avnisha | 0:ca2e1d0254a6 | 14 | |
avnisha | 0:ca2e1d0254a6 | 15 | DigitalOut myled1(LED1); |
avnisha | 0:ca2e1d0254a6 | 16 | DigitalOut myled2(LED2); |
avnisha | 0:ca2e1d0254a6 | 17 | DigitalOut myled3(LED3); |
avnisha | 0:ca2e1d0254a6 | 18 | DigitalOut myled4(LED4); |
avnisha | 0:ca2e1d0254a6 | 19 | |
avnisha | 0:ca2e1d0254a6 | 20 | Ticker blinker; |
avnisha | 0:ca2e1d0254a6 | 21 | int count=1; |
avnisha | 0:ca2e1d0254a6 | 22 | |
avnisha | 0:ca2e1d0254a6 | 23 | void blink() { |
avnisha | 0:ca2e1d0254a6 | 24 | count = count << 1; |
avnisha | 0:ca2e1d0254a6 | 25 | if (count > 0x08) count = 0x01; |
avnisha | 0:ca2e1d0254a6 | 26 | myled1 = count & 0x01; |
avnisha | 0:ca2e1d0254a6 | 27 | myled2 = count & 0x02; |
avnisha | 0:ca2e1d0254a6 | 28 | myled3 = count & 0x04; |
avnisha | 0:ca2e1d0254a6 | 29 | myled4 = count & 0x08; |
avnisha | 0:ca2e1d0254a6 | 30 | } |
avnisha | 0:ca2e1d0254a6 | 31 | |
avnisha | 0:ca2e1d0254a6 | 32 | int main() { |
avnisha | 0:ca2e1d0254a6 | 33 | int result; |
avnisha | 0:ca2e1d0254a6 | 34 | |
avnisha | 0:ca2e1d0254a6 | 35 | #ifdef NOETHER |
avnisha | 0:ca2e1d0254a6 | 36 | // Normal mbed power level for this setup is around 690mW |
avnisha | 0:ca2e1d0254a6 | 37 | // assuming 5V used on Vin pin |
avnisha | 0:ca2e1d0254a6 | 38 | // If you don't need networking... |
avnisha | 0:ca2e1d0254a6 | 39 | // Power down Ethernet interface - saves around 175mW |
avnisha | 0:ca2e1d0254a6 | 40 | // Also need to unplug network cable - just a cable sucks power |
avnisha | 0:ca2e1d0254a6 | 41 | PHY_PowerDown(); |
avnisha | 0:ca2e1d0254a6 | 42 | #endif |
avnisha | 0:ca2e1d0254a6 | 43 | |
avnisha | 0:ca2e1d0254a6 | 44 | #ifdef LOCALPOWER |
avnisha | 0:ca2e1d0254a6 | 45 | // If you don't need the PC host USB interface.... |
avnisha | 0:ca2e1d0254a6 | 46 | // Power down magic USB interface chip - saves around 150mW |
avnisha | 0:ca2e1d0254a6 | 47 | // Needs new firmware (URL below) and USB cable not connected |
avnisha | 0:ca2e1d0254a6 | 48 | // http://mbed.org/users/simon/notebook/interface-powerdown/ |
avnisha | 0:ca2e1d0254a6 | 49 | // Supply power to mbed using Vin pin |
avnisha | 0:ca2e1d0254a6 | 50 | result = semihost_powerdown(); |
avnisha | 0:ca2e1d0254a6 | 51 | // Power consumption is now around half |
avnisha | 0:ca2e1d0254a6 | 52 | #endif |
avnisha | 0:ca2e1d0254a6 | 53 | |
avnisha | 0:ca2e1d0254a6 | 54 | // Turn off clock enables on unused I/O Peripherals (UARTs, Timers, PWM, SPI, CAN, I2C, A/D...) |
avnisha | 0:ca2e1d0254a6 | 55 | // To save just a tiny bit more power - most are already off by default in this short code example |
avnisha | 0:ca2e1d0254a6 | 56 | // See PowerControl.h for I/O device bit assignments |
avnisha | 0:ca2e1d0254a6 | 57 | // Don't turn off GPIO - it is needed to blink the LEDs |
avnisha | 0:ca2e1d0254a6 | 58 | //Peripheral_PowerDown(0xFFFF7FFF); |
avnisha | 0:ca2e1d0254a6 | 59 | |
avnisha | 0:ca2e1d0254a6 | 60 | // use Ticker interrupt and Sleep instead of a wait for time delay - saves up to 70mW |
avnisha | 0:ca2e1d0254a6 | 61 | // Sleep halts and waits for an interrupt instead of executing instructions |
avnisha | 0:ca2e1d0254a6 | 62 | // power is saved by not constantly fetching and decoding instructions |
avnisha | 0:ca2e1d0254a6 | 63 | // Exact power level reduction depends on the amount of time spent in Sleep mode |
avnisha | 0:ca2e1d0254a6 | 64 | blinker.attach(&blink, 0.0625); |
avnisha | 0:ca2e1d0254a6 | 65 | while (1) { |
avnisha | 0:ca2e1d0254a6 | 66 | Sleep(); |
avnisha | 0:ca2e1d0254a6 | 67 | } |
avnisha | 0:ca2e1d0254a6 | 68 | } |