Liangzhen Lai / Mbed 2 deprecated Orange_Ferrari_board_functional

Dependencies:   DDRO_Farrari mbed

Fork of DDRO_Farrari by Liangzhen Lai

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?

UserRevisionLine numberNew 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 }