Liangzhen Lai / Mbed 2 deprecated Orange_Ferrari_board_functional

Dependencies:   DDRO_Farrari mbed

Fork of DDRO_Farrari by Liangzhen Lai

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?

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