ECE 4180 Lab 1 Extra Credit 3

Dependencies:   EthernetPowerControl mbed

Committer:
abraha2d
Date:
Tue Oct 09 00:15:25 2018 +0000
Revision:
0:d6455f342aef
Save point

Who changed what in which revision?

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