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.
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 | } |
