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@3:e1a6e12233dd, 2014-07-17 (annotated)
- Committer:
- liangzhen
- Date:
- Thu Jul 17 22:16:45 2014 +0000
- Revision:
- 3:e1a6e12233dd
- Parent:
- 2:e94460b2149f
simplify for functional purpose only
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 | 1:6a820a0ca03b | 24 | float mem_volt = periph_volt; |
liangzhen | 1:6a820a0ca03b | 25 | if(core_volt > 1){ |
liangzhen | 1:6a820a0ca03b | 26 | periph_volt = 1; |
liangzhen | 1:6a820a0ca03b | 27 | core_volt = 1; |
liangzhen | 1:6a820a0ca03b | 28 | mem_volt = 1; |
liangzhen | 0:84a8bcfbdec9 | 29 | } |
liangzhen | 0:84a8bcfbdec9 | 30 | if(core_volt < 0.9){ |
liangzhen | 0:84a8bcfbdec9 | 31 | periph_volt = 0.9; |
liangzhen | 0:84a8bcfbdec9 | 32 | } |
liangzhen | 1:6a820a0ca03b | 33 | if(core_volt < 0.8){ |
liangzhen | 1:6a820a0ca03b | 34 | mem_volt = core_volt + 0.05; |
liangzhen | 1:6a820a0ca03b | 35 | } |
liangzhen | 0:84a8bcfbdec9 | 36 | power_chan(PADVDD, periph_volt); |
liangzhen | 0:84a8bcfbdec9 | 37 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 38 | |
liangzhen | 0:84a8bcfbdec9 | 39 | // Core and Memory |
liangzhen | 0:84a8bcfbdec9 | 40 | power_chan(COREVDD, core_volt); |
liangzhen | 0:84a8bcfbdec9 | 41 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 42 | power_chan(MEM1VDD, mem_volt); |
liangzhen | 0:84a8bcfbdec9 | 43 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 44 | power_chan(MEM2VDD, mem_volt); |
liangzhen | 0:84a8bcfbdec9 | 45 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 46 | |
liangzhen | 0:84a8bcfbdec9 | 47 | // Clock |
liangzhen | 0:84a8bcfbdec9 | 48 | power_chan(CLOCKVDD, periph_volt); |
liangzhen | 0:84a8bcfbdec9 | 49 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 50 | power_chan(PLLAVDD, periph_volt); |
liangzhen | 0:84a8bcfbdec9 | 51 | wait(POWER_UP_TIME); |
liangzhen | 3:e1a6e12233dd | 52 | |
liangzhen | 1:6a820a0ca03b | 53 | // Sensor |
liangzhen | 1:6a820a0ca03b | 54 | power_chan(SENSORVDD, core_volt);//power_chan(SENSORVDD, 1.0); |
liangzhen | 1:6a820a0ca03b | 55 | wait(POWER_UP_TIME); |
liangzhen | 1:6a820a0ca03b | 56 | power_chan(SENSORLOWVDD, 0.35); |
liangzhen | 1:6a820a0ca03b | 57 | wait(POWER_UP_TIME); |
liangzhen | 1:6a820a0ca03b | 58 | power_chan(SENSORSTRESSVDD, periph_volt);//power_chan(SENSORSTRESSVDD, 1.0); |
liangzhen | 1:6a820a0ca03b | 59 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 60 | } |
liangzhen | 0:84a8bcfbdec9 | 61 | |
liangzhen | 0:84a8bcfbdec9 | 62 | |
liangzhen | 0:84a8bcfbdec9 | 63 | void power_up(float core_volt) |
liangzhen | 0:84a8bcfbdec9 | 64 | { |
liangzhen | 0:84a8bcfbdec9 | 65 | // The 1.8V supplies MUST be up whenever the 3.3V ones are |
liangzhen | 0:84a8bcfbdec9 | 66 | power_chan(ADVDD2, 1.8); |
liangzhen | 0:84a8bcfbdec9 | 67 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 68 | power_chan(DVDD2, 1.8); |
liangzhen | 0:84a8bcfbdec9 | 69 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 70 | |
liangzhen | 1:6a820a0ca03b | 71 | float periph_volt = core_volt; |
liangzhen | 1:6a820a0ca03b | 72 | |
liangzhen | 1:6a820a0ca03b | 73 | |
liangzhen | 1:6a820a0ca03b | 74 | if(core_volt > 1){ |
liangzhen | 1:6a820a0ca03b | 75 | periph_volt = 1; |
liangzhen | 1:6a820a0ca03b | 76 | core_volt = 1; |
liangzhen | 1:6a820a0ca03b | 77 | } |
liangzhen | 1:6a820a0ca03b | 78 | if(core_volt < 0.95){ |
liangzhen | 1:6a820a0ca03b | 79 | periph_volt = 0.95; |
liangzhen | 1:6a820a0ca03b | 80 | } |
liangzhen | 1:6a820a0ca03b | 81 | |
liangzhen | 1:6a820a0ca03b | 82 | float mem_volt = periph_volt; |
liangzhen | 0:84a8bcfbdec9 | 83 | |
liangzhen | 0:84a8bcfbdec9 | 84 | // Other padring |
liangzhen | 0:84a8bcfbdec9 | 85 | power_chan(ADVDD, 3.3); |
liangzhen | 0:84a8bcfbdec9 | 86 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 87 | power_chan(DVDD, 3.3); |
liangzhen | 0:84a8bcfbdec9 | 88 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 89 | power_chan(PADVDD, 1.0);//power_chan(PADVDD, 1.0); |
liangzhen | 0:84a8bcfbdec9 | 90 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 91 | |
liangzhen | 0:84a8bcfbdec9 | 92 | // Core and Memory |
liangzhen | 1:6a820a0ca03b | 93 | power_chan(COREVDD, core_volt); |
liangzhen | 0:84a8bcfbdec9 | 94 | wait(POWER_UP_TIME); |
liangzhen | 1:6a820a0ca03b | 95 | power_chan(MEM1VDD, mem_volt);//power_chan(MEM1VDD, 1.0); |
liangzhen | 0:84a8bcfbdec9 | 96 | wait(POWER_UP_TIME); |
liangzhen | 1:6a820a0ca03b | 97 | power_chan(MEM2VDD, mem_volt);//power_chan(MEM2VDD, 1.0); |
liangzhen | 0:84a8bcfbdec9 | 98 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 99 | |
liangzhen | 0:84a8bcfbdec9 | 100 | // Clock |
liangzhen | 1:6a820a0ca03b | 101 | power_chan(CLOCKVDD, periph_volt);//power_chan(CLOCKVDD, 1.0); |
liangzhen | 0:84a8bcfbdec9 | 102 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 103 | power_chan(PLLAVDD, 1.0);//power_chan(PLLAVDD, 1.0); |
liangzhen | 0:84a8bcfbdec9 | 104 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 105 | power_chan(RING_OSC_NBIAS, 0.75); |
liangzhen | 0:84a8bcfbdec9 | 106 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 107 | |
liangzhen | 0:84a8bcfbdec9 | 108 | // Sensor Supplies |
liangzhen | 1:6a820a0ca03b | 109 | power_chan(SENSORVDD, core_volt);//power_chan(SENSORVDD, 1.0); |
liangzhen | 0:84a8bcfbdec9 | 110 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 111 | power_chan(SENSORLOWVDD, 0.35); |
liangzhen | 0:84a8bcfbdec9 | 112 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 113 | power_chan(SENSORSTRESSVDD, 1.0);//power_chan(SENSORSTRESSVDD, 1.0); |
liangzhen | 0:84a8bcfbdec9 | 114 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 115 | |
liangzhen | 0:84a8bcfbdec9 | 116 | power_indicator = 1; |
liangzhen | 0:84a8bcfbdec9 | 117 | } |
liangzhen | 0:84a8bcfbdec9 | 118 | |
liangzhen | 0:84a8bcfbdec9 | 119 | void power_down() |
liangzhen | 0:84a8bcfbdec9 | 120 | { |
liangzhen | 0:84a8bcfbdec9 | 121 | |
liangzhen | 0:84a8bcfbdec9 | 122 | // Zero/float all inputs, so they are not above DVDD when you lower it |
liangzhen | 0:84a8bcfbdec9 | 123 | PORESETn = 0; |
liangzhen | 0:84a8bcfbdec9 | 124 | CORERESETn = 0; |
liangzhen | 2:e94460b2149f | 125 | GPIO1.input(); |
liangzhen | 2:e94460b2149f | 126 | GPIO2.input(); |
liangzhen | 2:e94460b2149f | 127 | GPIO3.input(); |
liangzhen | 0:84a8bcfbdec9 | 128 | TCK = 0; |
liangzhen | 0:84a8bcfbdec9 | 129 | TMS = 0; |
liangzhen | 0:84a8bcfbdec9 | 130 | TDI = 0; |
liangzhen | 0:84a8bcfbdec9 | 131 | scan_data_in = 0; |
liangzhen | 0:84a8bcfbdec9 | 132 | scan_phi = 0; |
liangzhen | 0:84a8bcfbdec9 | 133 | scan_phi_bar = 0; |
liangzhen | 0:84a8bcfbdec9 | 134 | scan_load_chain = 0; |
liangzhen | 0:84a8bcfbdec9 | 135 | scan_load_chip = 0; |
liangzhen | 0:84a8bcfbdec9 | 136 | |
liangzhen | 0:84a8bcfbdec9 | 137 | // Core and Memory |
liangzhen | 0:84a8bcfbdec9 | 138 | power_chan(COREVDD, 0); |
liangzhen | 0:84a8bcfbdec9 | 139 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 140 | power_chan(MEM1VDD, 0); |
liangzhen | 0:84a8bcfbdec9 | 141 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 142 | power_chan(MEM2VDD, 0); |
liangzhen | 0:84a8bcfbdec9 | 143 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 144 | |
liangzhen | 0:84a8bcfbdec9 | 145 | // Clock |
liangzhen | 0:84a8bcfbdec9 | 146 | power_chan(CLOCKVDD, 0); |
liangzhen | 0:84a8bcfbdec9 | 147 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 148 | power_chan(PLLAVDD, 0); |
liangzhen | 0:84a8bcfbdec9 | 149 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 150 | power_chan(RING_OSC_NBIAS, 0); |
liangzhen | 0:84a8bcfbdec9 | 151 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 152 | |
liangzhen | 0:84a8bcfbdec9 | 153 | // Sensor Supplies |
liangzhen | 0:84a8bcfbdec9 | 154 | power_chan(SENSORVDD, 0); |
liangzhen | 0:84a8bcfbdec9 | 155 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 156 | power_chan(SENSORLOWVDD, 0); |
liangzhen | 0:84a8bcfbdec9 | 157 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 158 | power_chan(SENSORSTRESSVDD, 0); |
liangzhen | 0:84a8bcfbdec9 | 159 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 160 | |
liangzhen | 0:84a8bcfbdec9 | 161 | // Other padring |
liangzhen | 0:84a8bcfbdec9 | 162 | power_chan(ADVDD, 0); |
liangzhen | 0:84a8bcfbdec9 | 163 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 164 | power_chan(DVDD, 0); |
liangzhen | 0:84a8bcfbdec9 | 165 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 166 | power_chan(PADVDD, 0); |
liangzhen | 0:84a8bcfbdec9 | 167 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 168 | |
liangzhen | 0:84a8bcfbdec9 | 169 | // The 1.8V supplies MUST be up whenever the 3.3V ones are |
liangzhen | 0:84a8bcfbdec9 | 170 | power_chan(ADVDD2, 0); |
liangzhen | 0:84a8bcfbdec9 | 171 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 172 | power_chan(DVDD2, 0); |
liangzhen | 0:84a8bcfbdec9 | 173 | wait(POWER_UP_TIME); |
liangzhen | 0:84a8bcfbdec9 | 174 | |
liangzhen | 0:84a8bcfbdec9 | 175 | power_indicator = 0; |
liangzhen | 0:84a8bcfbdec9 | 176 | } |