Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: DDRO_Farrari mbed
Fork of DDRO_Farrari by
power.cpp@0:84a8bcfbdec9, 2013-10-07 (annotated)
- Committer:
- liangzhen
- Date:
- Mon Oct 07 22:58:19 2013 +0000
- Revision:
- 0:84a8bcfbdec9
- Child:
- 1:6a820a0ca03b
power sensor tested;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
liangzhen | 0:84a8bcfbdec9 | 1 | #include "dac.h" |
liangzhen | 0:84a8bcfbdec9 | 2 | #include "power.h" |
liangzhen | 0:84a8bcfbdec9 | 3 | |
liangzhen | 0:84a8bcfbdec9 | 4 | using namespace std; |
liangzhen | 0:84a8bcfbdec9 | 5 | |
liangzhen | 0:84a8bcfbdec9 | 6 | #define INA_GAIN 200 |
liangzhen | 0:84a8bcfbdec9 | 7 | /* |
liangzhen | 0:84a8bcfbdec9 | 8 | float current_meas(bool core) |
liangzhen | 0:84a8bcfbdec9 | 9 | { |
liangzhen | 0:84a8bcfbdec9 | 10 | float ampv = meas_amp * 3.3; |
liangzhen | 0:84a8bcfbdec9 | 11 | float vdrop = ampv / INA_GAIN; |
liangzhen | 0:84a8bcfbdec9 | 12 | float res = 1; |
liangzhen | 0:84a8bcfbdec9 | 13 | if(core){ |
liangzhen | 0:84a8bcfbdec9 | 14 | res = 0.25; |
liangzhen | 0:84a8bcfbdec9 | 15 | } |
liangzhen | 0:84a8bcfbdec9 | 16 | return vdrop / res; |
liangzhen | 0:84a8bcfbdec9 | 17 | } |
liangzhen | 0:84a8bcfbdec9 | 18 | */ |
liangzhen | 0:84a8bcfbdec9 | 19 | |
liangzhen | 0:84a8bcfbdec9 | 20 | |
liangzhen | 0:84a8bcfbdec9 | 21 | void power_core(float core_volt) |
liangzhen | 0:84a8bcfbdec9 | 22 | { |
liangzhen | 0:84a8bcfbdec9 | 23 | float periph_volt = core_volt; |
liangzhen | 0:84a8bcfbdec9 | 24 | |
liangzhen | 0:84a8bcfbdec9 | 25 | |
liangzhen | 0:84a8bcfbdec9 | 26 | if(core_volt > 1.1){ |
liangzhen | 0:84a8bcfbdec9 | 27 | periph_volt = 1.1; |
liangzhen | 0:84a8bcfbdec9 | 28 | } |
liangzhen | 0:84a8bcfbdec9 | 29 | if(core_volt < 0.9){ |
liangzhen | 0:84a8bcfbdec9 | 30 | periph_volt = 0.9; |
liangzhen | 0:84a8bcfbdec9 | 31 | } |
liangzhen | 0:84a8bcfbdec9 | 32 | |
liangzhen | 0:84a8bcfbdec9 | 33 | float mem_volt = core_volt; |
liangzhen | 0:84a8bcfbdec9 | 34 | |
liangzhen | 0:84a8bcfbdec9 | 35 | power_chan(PADVDD, periph_volt); |
liangzhen | 0:84a8bcfbdec9 | 36 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 37 | |
liangzhen | 0:84a8bcfbdec9 | 38 | // Core and Memory |
liangzhen | 0:84a8bcfbdec9 | 39 | power_chan(COREVDD, core_volt); |
liangzhen | 0:84a8bcfbdec9 | 40 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 41 | power_chan(MEM1VDD, mem_volt); |
liangzhen | 0:84a8bcfbdec9 | 42 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 43 | power_chan(MEM2VDD, mem_volt); |
liangzhen | 0:84a8bcfbdec9 | 44 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 45 | |
liangzhen | 0:84a8bcfbdec9 | 46 | // Clock |
liangzhen | 0:84a8bcfbdec9 | 47 | power_chan(CLOCKVDD, periph_volt); |
liangzhen | 0:84a8bcfbdec9 | 48 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 49 | power_chan(PLLAVDD, periph_volt); |
liangzhen | 0:84a8bcfbdec9 | 50 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 51 | } |
liangzhen | 0:84a8bcfbdec9 | 52 | |
liangzhen | 0:84a8bcfbdec9 | 53 | |
liangzhen | 0:84a8bcfbdec9 | 54 | void power_up(float core_volt) |
liangzhen | 0:84a8bcfbdec9 | 55 | { |
liangzhen | 0:84a8bcfbdec9 | 56 | // The 1.8V supplies MUST be up whenever the 3.3V ones are |
liangzhen | 0:84a8bcfbdec9 | 57 | power_chan(ADVDD2, 1.8); |
liangzhen | 0:84a8bcfbdec9 | 58 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 59 | power_chan(DVDD2, 1.8); |
liangzhen | 0:84a8bcfbdec9 | 60 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 61 | |
liangzhen | 0:84a8bcfbdec9 | 62 | float new_power = core_volt;////////////////////////////////////////////////////////// |
liangzhen | 0:84a8bcfbdec9 | 63 | |
liangzhen | 0:84a8bcfbdec9 | 64 | // Other padring |
liangzhen | 0:84a8bcfbdec9 | 65 | power_chan(ADVDD, 3.3); |
liangzhen | 0:84a8bcfbdec9 | 66 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 67 | power_chan(DVDD, 3.3); |
liangzhen | 0:84a8bcfbdec9 | 68 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 69 | power_chan(PADVDD, 1.0);//power_chan(PADVDD, 1.0); |
liangzhen | 0:84a8bcfbdec9 | 70 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 71 | |
liangzhen | 0:84a8bcfbdec9 | 72 | // Core and Memory |
liangzhen | 0:84a8bcfbdec9 | 73 | power_chan(COREVDD, 1.0); |
liangzhen | 0:84a8bcfbdec9 | 74 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 75 | power_chan(MEM1VDD, new_power);//power_chan(MEM1VDD, 1.0); |
liangzhen | 0:84a8bcfbdec9 | 76 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 77 | power_chan(MEM2VDD, new_power);//power_chan(MEM2VDD, 1.0); |
liangzhen | 0:84a8bcfbdec9 | 78 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 79 | |
liangzhen | 0:84a8bcfbdec9 | 80 | // Clock |
liangzhen | 0:84a8bcfbdec9 | 81 | power_chan(CLOCKVDD, 1.0);//power_chan(CLOCKVDD, 1.0); |
liangzhen | 0:84a8bcfbdec9 | 82 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 83 | power_chan(PLLAVDD, 1.0);//power_chan(PLLAVDD, 1.0); |
liangzhen | 0:84a8bcfbdec9 | 84 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 85 | power_chan(RING_OSC_NBIAS, 0.75); |
liangzhen | 0:84a8bcfbdec9 | 86 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 87 | |
liangzhen | 0:84a8bcfbdec9 | 88 | // Sensor Supplies |
liangzhen | 0:84a8bcfbdec9 | 89 | power_chan(SENSORVDD, 1.0);//power_chan(SENSORVDD, 1.0); |
liangzhen | 0:84a8bcfbdec9 | 90 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 91 | power_chan(SENSORLOWVDD, 0.35); |
liangzhen | 0:84a8bcfbdec9 | 92 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 93 | power_chan(SENSORSTRESSVDD, 1.0);//power_chan(SENSORSTRESSVDD, 1.0); |
liangzhen | 0:84a8bcfbdec9 | 94 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 95 | |
liangzhen | 0:84a8bcfbdec9 | 96 | power_indicator = 1; |
liangzhen | 0:84a8bcfbdec9 | 97 | } |
liangzhen | 0:84a8bcfbdec9 | 98 | |
liangzhen | 0:84a8bcfbdec9 | 99 | void power_down() |
liangzhen | 0:84a8bcfbdec9 | 100 | { |
liangzhen | 0:84a8bcfbdec9 | 101 | |
liangzhen | 0:84a8bcfbdec9 | 102 | // Zero/float all inputs, so they are not above DVDD when you lower it |
liangzhen | 0:84a8bcfbdec9 | 103 | PORESETn = 0; |
liangzhen | 0:84a8bcfbdec9 | 104 | CORERESETn = 0; |
liangzhen | 0:84a8bcfbdec9 | 105 | GPIO.input(); |
liangzhen | 0:84a8bcfbdec9 | 106 | TCK = 0; |
liangzhen | 0:84a8bcfbdec9 | 107 | TMS = 0; |
liangzhen | 0:84a8bcfbdec9 | 108 | TDI = 0; |
liangzhen | 0:84a8bcfbdec9 | 109 | scan_data_in = 0; |
liangzhen | 0:84a8bcfbdec9 | 110 | scan_phi = 0; |
liangzhen | 0:84a8bcfbdec9 | 111 | scan_phi_bar = 0; |
liangzhen | 0:84a8bcfbdec9 | 112 | scan_load_chain = 0; |
liangzhen | 0:84a8bcfbdec9 | 113 | scan_load_chip = 0; |
liangzhen | 0:84a8bcfbdec9 | 114 | |
liangzhen | 0:84a8bcfbdec9 | 115 | // Core and Memory |
liangzhen | 0:84a8bcfbdec9 | 116 | power_chan(COREVDD, 0); |
liangzhen | 0:84a8bcfbdec9 | 117 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 118 | power_chan(MEM1VDD, 0); |
liangzhen | 0:84a8bcfbdec9 | 119 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 120 | power_chan(MEM2VDD, 0); |
liangzhen | 0:84a8bcfbdec9 | 121 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 122 | |
liangzhen | 0:84a8bcfbdec9 | 123 | // Clock |
liangzhen | 0:84a8bcfbdec9 | 124 | power_chan(CLOCKVDD, 0); |
liangzhen | 0:84a8bcfbdec9 | 125 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 126 | power_chan(PLLAVDD, 0); |
liangzhen | 0:84a8bcfbdec9 | 127 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 128 | power_chan(RING_OSC_NBIAS, 0); |
liangzhen | 0:84a8bcfbdec9 | 129 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 130 | |
liangzhen | 0:84a8bcfbdec9 | 131 | // Sensor Supplies |
liangzhen | 0:84a8bcfbdec9 | 132 | power_chan(SENSORVDD, 0); |
liangzhen | 0:84a8bcfbdec9 | 133 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 134 | power_chan(SENSORLOWVDD, 0); |
liangzhen | 0:84a8bcfbdec9 | 135 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 136 | power_chan(SENSORSTRESSVDD, 0); |
liangzhen | 0:84a8bcfbdec9 | 137 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 138 | |
liangzhen | 0:84a8bcfbdec9 | 139 | // Other padring |
liangzhen | 0:84a8bcfbdec9 | 140 | power_chan(ADVDD, 0); |
liangzhen | 0:84a8bcfbdec9 | 141 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 142 | power_chan(DVDD, 0); |
liangzhen | 0:84a8bcfbdec9 | 143 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 144 | power_chan(PADVDD, 0); |
liangzhen | 0:84a8bcfbdec9 | 145 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 146 | |
liangzhen | 0:84a8bcfbdec9 | 147 | // The 1.8V supplies MUST be up whenever the 3.3V ones are |
liangzhen | 0:84a8bcfbdec9 | 148 | power_chan(ADVDD2, 0); |
liangzhen | 0:84a8bcfbdec9 | 149 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 150 | power_chan(DVDD2, 0); |
liangzhen | 0:84a8bcfbdec9 | 151 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 152 | |
liangzhen | 0:84a8bcfbdec9 | 153 | power_indicator = 0; |
liangzhen | 0:84a8bcfbdec9 | 154 | } |