hw functions for the SOLID slow control
Dependents: S_SCTRL_e_test SPItest sscm
S_SCTRL_SM1_hwfunct.cpp@13:3d82f8e27414, 2014-11-19 (annotated)
- Committer:
- wbeaumont
- Date:
- Wed Nov 19 23:17:57 2014 +0000
- Revision:
- 13:3d82f8e27414
- Parent:
- 12:467def75b457
- Child:
- 14:ee02872b282b
added function to calculate the dac voltage from the bias
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wbeaumont | 8:fe1477cd1c14 | 1 | /* hardware functions |
wbeaumont | 8:fe1477cd1c14 | 2 | * ver 1.0 |
wbeaumont | 8:fe1477cd1c14 | 3 | * ver 1.1x connectors signal working |
wbeaumont | 8:fe1477cd1c14 | 4 | * ver 1.20 added serialnr read |
wbeaumont | 9:20f21cb7792e | 5 | * ver 1.22 defined cs lines to inactive in safe settings |
wbeaumont | 11:0416cf017b7a | 6 | * ver 1.30 added CAL puls function |
wbeaumont | 13:3d82f8e27414 | 7 | * ver 1.31 added CAL line lvl function |
wbeaumont | 13:3d82f8e27414 | 8 | * ver 1.32 added bias2dac voltage and dac2bias |
wbeaumont | 8:fe1477cd1c14 | 9 | */ |
wbeaumont | 8:fe1477cd1c14 | 10 | |
wbeaumont | 0:8d755a0f3ab3 | 11 | #include "mbed.h" |
wbeaumont | 0:8d755a0f3ab3 | 12 | #include "S_SCTRL_SM1_PinDef.h" |
wbeaumont | 1:af78e316f889 | 13 | #include "S_SCTRL_SM1_hwfunct.h" |
wbeaumont | 1:af78e316f889 | 14 | |
wbeaumont | 0:8d755a0f3ab3 | 15 | |
wbeaumont | 13:3d82f8e27414 | 16 | #define HW_LIB_SRC_VERSION "1.32" |
wbeaumont | 3:39671ee1347d | 17 | |
wbeaumont | 3:39671ee1347d | 18 | #define MAXLIBVERCHAR 100 // max char for lib version |
wbeaumont | 0:8d755a0f3ab3 | 19 | |
wbeaumont | 1:af78e316f889 | 20 | void assignports(HWlines *hwlines ){ |
wbeaumont | 0:8d755a0f3ab3 | 21 | |
wbeaumont | 0:8d755a0f3ab3 | 22 | /// devices |
wbeaumont | 0:8d755a0f3ab3 | 23 | // SPI BI pins |
wbeaumont | 1:af78e316f889 | 24 | hwlines->msio[0] = new DigitalInOut(ADC_STIO); |
wbeaumont | 1:af78e316f889 | 25 | hwlines->sclk[0] = new DigitalOut(SCLK); |
wbeaumont | 1:af78e316f889 | 26 | hwlines->direction[0] = new DigitalOut(DIRECTION); |
wbeaumont | 1:af78e316f889 | 27 | hwlines->stio_mo[0] = new DigitalOut(STIO_MO); |
wbeaumont | 4:a83242fe9d37 | 28 | hwlines->csb1[0] = new DigitalOut(ADC1_CSN); |
wbeaumont | 4:a83242fe9d37 | 29 | hwlines->csb2[0] = new DigitalOut(ADC2_CSN); |
wbeaumont | 0:8d755a0f3ab3 | 30 | |
wbeaumont | 0:8d755a0f3ab3 | 31 | |
wbeaumont | 0:8d755a0f3ab3 | 32 | |
wbeaumont | 0:8d755a0f3ab3 | 33 | // SPI pins |
wbeaumont | 1:af78e316f889 | 34 | hwlines->mosi[0] = new DigitalOut(MOSI); |
wbeaumont | 1:af78e316f889 | 35 | hwlines->miso[0] = new DigitalIn(MISO); |
wbeaumont | 0:8d755a0f3ab3 | 36 | |
wbeaumont | 1:af78e316f889 | 37 | hwlines->t_cs[0] = new DigitalOut(TEMP_CSN); |
wbeaumont | 1:af78e316f889 | 38 | hwlines->tc_cs1[0] = new DigitalOut(TEMP_CABLE_CSN1); |
wbeaumont | 1:af78e316f889 | 39 | hwlines->tc_cs2[0] = new DigitalOut(TEMP_CABLE_CSN2); |
wbeaumont | 1:af78e316f889 | 40 | hwlines->dac_cs[0] = new DigitalOut(DAC_DCEN); |
wbeaumont | 1:af78e316f889 | 41 | hwlines->dac_rst[0] = new DigitalOut(DAC_RSTN); |
wbeaumont | 0:8d755a0f3ab3 | 42 | |
wbeaumont | 0:8d755a0f3ab3 | 43 | |
wbeaumont | 0:8d755a0f3ab3 | 44 | |
wbeaumont | 0:8d755a0f3ab3 | 45 | |
wbeaumont | 0:8d755a0f3ab3 | 46 | // devices |
wbeaumont | 0:8d755a0f3ab3 | 47 | // SPI BI pins |
wbeaumont | 1:af78e316f889 | 48 | hwlines->msio[1] = new DigitalInOut(ADC_2_STIO); |
wbeaumont | 1:af78e316f889 | 49 | hwlines->sclk[1] = new DigitalOut(SCLK_2); |
wbeaumont | 1:af78e316f889 | 50 | hwlines->direction[1] = new DigitalOut(DIRECTION2); |
wbeaumont | 1:af78e316f889 | 51 | hwlines->stio_mo[1] = new DigitalOut(STIO2_MO); |
wbeaumont | 4:a83242fe9d37 | 52 | hwlines->csb1[1] = new DigitalOut(ADC1_2_CSN); |
wbeaumont | 4:a83242fe9d37 | 53 | hwlines->csb2[1] = new DigitalOut(ADC2_2_CSN); |
wbeaumont | 0:8d755a0f3ab3 | 54 | |
wbeaumont | 0:8d755a0f3ab3 | 55 | // SPI pins |
wbeaumont | 1:af78e316f889 | 56 | hwlines->mosi[1] = new DigitalOut(MOSI_2); |
wbeaumont | 1:af78e316f889 | 57 | hwlines->miso[1] = new DigitalIn(MISO_2); |
wbeaumont | 0:8d755a0f3ab3 | 58 | |
wbeaumont | 1:af78e316f889 | 59 | hwlines->t_cs[1] = new DigitalOut(TEMP_2_CSN); |
wbeaumont | 1:af78e316f889 | 60 | hwlines->tc_cs1[1] = new DigitalOut(TEMP_2_CABLE_CSN1); |
wbeaumont | 1:af78e316f889 | 61 | hwlines->tc_cs2[1] = new DigitalOut(TEMP_2_CABLE_CSN2); |
wbeaumont | 1:af78e316f889 | 62 | hwlines->dac_cs[1] = new DigitalOut(DAC_2_DCEN); |
wbeaumont | 1:af78e316f889 | 63 | hwlines->dac_rst[1] = new DigitalOut(DAC_2_RSTN); |
wbeaumont | 0:8d755a0f3ab3 | 64 | |
wbeaumont | 0:8d755a0f3ab3 | 65 | |
wbeaumont | 0:8d755a0f3ab3 | 66 | //cal |
wbeaumont | 1:af78e316f889 | 67 | hwlines->cal13[0] = new DigitalOut(CAL_TRIG_1AND3); |
wbeaumont | 1:af78e316f889 | 68 | hwlines->cal24[0] = new DigitalOut(CAL_TRIG_2AND4); |
wbeaumont | 1:af78e316f889 | 69 | hwlines->calint[0] = new DigitalOut(SEL_CAL_INT); |
wbeaumont | 1:af78e316f889 | 70 | hwlines->cal13[1] = new DigitalOut(CAL_TRIG_1AND3); |
wbeaumont | 1:af78e316f889 | 71 | hwlines->cal24[1] = new DigitalOut(CAL_TRIG_2AND4); |
wbeaumont | 1:af78e316f889 | 72 | hwlines->calint[1] = new DigitalOut(SEL_2_CAL_INT); |
wbeaumont | 0:8d755a0f3ab3 | 73 | |
wbeaumont | 1:af78e316f889 | 74 | hwlines->calext = new DigitalOut(SEL_CAL_EXT); |
wbeaumont | 1:af78e316f889 | 75 | hwlines->calgenext = new DigitalOut(GEN_EXT_CAL); |
wbeaumont | 0:8d755a0f3ab3 | 76 | |
wbeaumont | 1:af78e316f889 | 77 | hwlines->ledred = new DigitalOut(LEDRED); |
wbeaumont | 1:af78e316f889 | 78 | hwlines->ledgreen = new DigitalOut(LEDGREEN); |
wbeaumont | 0:8d755a0f3ab3 | 79 | |
wbeaumont | 1:af78e316f889 | 80 | hwlines->ain[0] = new AnalogIn(ADC1); |
wbeaumont | 1:af78e316f889 | 81 | hwlines->ain[1] = new AnalogIn(ADC2); |
wbeaumont | 0:8d755a0f3ab3 | 82 | |
wbeaumont | 8:fe1477cd1c14 | 83 | hwlines->snr[0] = new DigitalIn(AD0); |
wbeaumont | 8:fe1477cd1c14 | 84 | hwlines->snr[1] = new DigitalIn(AD1); |
wbeaumont | 8:fe1477cd1c14 | 85 | hwlines->snr[2] = new DigitalIn(AD2); |
wbeaumont | 8:fe1477cd1c14 | 86 | hwlines->snr[3] = new DigitalIn(AD3); |
wbeaumont | 8:fe1477cd1c14 | 87 | hwlines->snr[4] = new DigitalIn(AD4); |
wbeaumont | 0:8d755a0f3ab3 | 88 | |
wbeaumont | 0:8d755a0f3ab3 | 89 | } |
wbeaumont | 0:8d755a0f3ab3 | 90 | |
wbeaumont | 0:8d755a0f3ab3 | 91 | |
wbeaumont | 0:8d755a0f3ab3 | 92 | |
wbeaumont | 0:8d755a0f3ab3 | 93 | // select intern or extern cal 0 = intern, 1 is extern |
wbeaumont | 1:af78e316f889 | 94 | void setcalsource( int external, HWlines hwl) { |
wbeaumont | 9:20f21cb7792e | 95 | *(hwl.calext)=0; |
wbeaumont | 9:20f21cb7792e | 96 | *(hwl.calint[0])=0; *(hwl.calint[1])=0; //disable all |
wbeaumont | 0:8d755a0f3ab3 | 97 | if ( external==1 ) {*(hwl.calext)=1; } |
wbeaumont | 8:fe1477cd1c14 | 98 | else {*(hwl.calint[0])=1; *(hwl.calint[1])=1; } |
wbeaumont | 0:8d755a0f3ab3 | 99 | |
wbeaumont | 0:8d755a0f3ab3 | 100 | |
wbeaumont | 0:8d755a0f3ab3 | 101 | } |
wbeaumont | 0:8d755a0f3ab3 | 102 | |
wbeaumont | 5:b527df9432c3 | 103 | // set the default , save values |
wbeaumont | 0:8d755a0f3ab3 | 104 | void setdefault(HWlines hwl ) { |
wbeaumont | 11:0416cf017b7a | 105 | for ( int i=0;i<2;i++){ // i == connector |
wbeaumont | 0:8d755a0f3ab3 | 106 | hwl.msio[i]->input(); |
wbeaumont | 8:fe1477cd1c14 | 107 | *(hwl.direction[i])=RDIR_IN; |
wbeaumont | 8:fe1477cd1c14 | 108 | *(hwl.stio_mo[i])=LDIR_IN; |
wbeaumont | 9:20f21cb7792e | 109 | hwl.sclk[i]->write(0); |
wbeaumont | 9:20f21cb7792e | 110 | hwl.csb1[i]->write(0); |
wbeaumont | 9:20f21cb7792e | 111 | hwl.csb2[i]->write(0); |
wbeaumont | 9:20f21cb7792e | 112 | hwl.t_cs[i]->write(0); |
wbeaumont | 9:20f21cb7792e | 113 | hwl.tc_cs1[i]->write(0); |
wbeaumont | 9:20f21cb7792e | 114 | hwl.tc_cs2[i]->write(0); |
wbeaumont | 9:20f21cb7792e | 115 | hwl.dac_cs[i]->write(0); |
wbeaumont | 9:20f21cb7792e | 116 | hwl.dac_rst[i]->write(0); |
wbeaumont | 0:8d755a0f3ab3 | 117 | } |
wbeaumont | 11:0416cf017b7a | 118 | hwl.cal13[0]->write(CAL_DEACTIVE); |
wbeaumont | 11:0416cf017b7a | 119 | hwl.cal24[0]->write(CAL_DEACTIVE); |
wbeaumont | 1:af78e316f889 | 120 | setcalsource(0,hwl); //intern |
wbeaumont | 0:8d755a0f3ab3 | 121 | } |
wbeaumont | 0:8d755a0f3ab3 | 122 | |
wbeaumont | 6:24e981a63851 | 123 | |
wbeaumont | 5:b527df9432c3 | 124 | void set_bi_spi_mo(int masterout, DigitalInOut* msio, DigitalOut* ldir, DigitalOut* rdir){ |
wbeaumont | 5:b527df9432c3 | 125 | // default directions |
wbeaumont | 5:b527df9432c3 | 126 | if( masterout == 0 ) { // master in |
wbeaumont | 5:b527df9432c3 | 127 | msio->input(); |
wbeaumont | 5:b527df9432c3 | 128 | rdir->write(RDIR_IN); |
wbeaumont | 5:b527df9432c3 | 129 | ldir->write(LDIR_IN); |
wbeaumont | 5:b527df9432c3 | 130 | |
wbeaumont | 5:b527df9432c3 | 131 | } |
wbeaumont | 5:b527df9432c3 | 132 | else { //master out |
wbeaumont | 5:b527df9432c3 | 133 | |
wbeaumont | 5:b527df9432c3 | 134 | ldir->write(LDIR_OUT); |
wbeaumont | 5:b527df9432c3 | 135 | msio->output(); |
wbeaumont | 5:b527df9432c3 | 136 | rdir->write(RDIR_OUT); |
wbeaumont | 5:b527df9432c3 | 137 | } |
wbeaumont | 5:b527df9432c3 | 138 | } |
wbeaumont | 5:b527df9432c3 | 139 | |
wbeaumont | 5:b527df9432c3 | 140 | |
wbeaumont | 6:24e981a63851 | 141 | |
wbeaumont | 3:39671ee1347d | 142 | char libversion[MAXLIBVERCHAR]={'e','m','p','t','y','\0'}; |
wbeaumont | 12:467def75b457 | 143 | |
wbeaumont | 12:467def75b457 | 144 | |
wbeaumont | 12:467def75b457 | 145 | void set_cal_line(HWlines hwl, int calline ,int level ){ |
wbeaumont | 12:467def75b457 | 146 | int lvl; |
wbeaumont | 12:467def75b457 | 147 | if( level ==1) lvl=CAL_ACTIVE; else lvl=CAL_DEACTIVE; |
wbeaumont | 12:467def75b457 | 148 | if( calline == 0) { |
wbeaumont | 12:467def75b457 | 149 | hwl.cal13[0]->write(lvl); //index can be hard coded as it are the same lines) |
wbeaumont | 12:467def75b457 | 150 | hwl.cal24[0]->write(lvl); |
wbeaumont | 12:467def75b457 | 151 | } |
wbeaumont | 12:467def75b457 | 152 | if( calline == 1) { |
wbeaumont | 12:467def75b457 | 153 | hwl.cal13[0]->write(lvl); //index can be hard coded as it are the same lines) |
wbeaumont | 12:467def75b457 | 154 | } |
wbeaumont | 12:467def75b457 | 155 | if( calline == 2) { |
wbeaumont | 12:467def75b457 | 156 | hwl.cal24[0]->write(lvl); |
wbeaumont | 12:467def75b457 | 157 | } |
wbeaumont | 12:467def75b457 | 158 | |
wbeaumont | 12:467def75b457 | 159 | } |
wbeaumont | 11:0416cf017b7a | 160 | |
wbeaumont | 11:0416cf017b7a | 161 | void toggle_cal(HWlines hwl, int calline){ |
wbeaumont | 11:0416cf017b7a | 162 | if( calline == 0) { |
wbeaumont | 11:0416cf017b7a | 163 | hwl.cal13[0]->write(CAL_ACTIVE); //index can be hard coded as it are the same lines) |
wbeaumont | 11:0416cf017b7a | 164 | hwl.cal24[0]->write(CAL_ACTIVE); |
wbeaumont | 11:0416cf017b7a | 165 | } |
wbeaumont | 11:0416cf017b7a | 166 | if( calline == 1) { |
wbeaumont | 11:0416cf017b7a | 167 | hwl.cal13[0]->write(CAL_ACTIVE); //index can be hard coded as it are the same lines) |
wbeaumont | 11:0416cf017b7a | 168 | } |
wbeaumont | 11:0416cf017b7a | 169 | if( calline == 2) { |
wbeaumont | 11:0416cf017b7a | 170 | hwl.cal24[0]->write(CAL_ACTIVE); |
wbeaumont | 11:0416cf017b7a | 171 | } |
wbeaumont | 11:0416cf017b7a | 172 | // else we don't do nothing |
wbeaumont | 11:0416cf017b7a | 173 | wait_us(10); |
wbeaumont | 11:0416cf017b7a | 174 | hwl.cal13[0]->write(CAL_DEACTIVE); |
wbeaumont | 11:0416cf017b7a | 175 | hwl.cal24[0]->write(CAL_DEACTIVE); |
wbeaumont | 11:0416cf017b7a | 176 | |
wbeaumont | 11:0416cf017b7a | 177 | } |
wbeaumont | 3:39671ee1347d | 178 | |
wbeaumont | 3:39671ee1347d | 179 | |
wbeaumont | 3:39671ee1347d | 180 | char* hwfunct_lib_version(){ |
wbeaumont | 8:fe1477cd1c14 | 181 | sprintf(libversion,"hw lib versions src : %s header: %s pindef %s,date:%s %s \n\r", |
wbeaumont | 8:fe1477cd1c14 | 182 | HW_LIB_SRC_VERSION,HW_LIB_HDR_VERSION , PINDEF_VER, __DATE__,__TIME__); |
wbeaumont | 3:39671ee1347d | 183 | return libversion; |
wbeaumont | 3:39671ee1347d | 184 | |
wbeaumont | 6:24e981a63851 | 185 | } |
wbeaumont | 6:24e981a63851 | 186 | |
wbeaumont | 8:fe1477cd1c14 | 187 | int get_serialnr(HWlines *hwlines ){ |
wbeaumont | 8:fe1477cd1c14 | 188 | int snr=0; |
wbeaumont | 8:fe1477cd1c14 | 189 | for( int bitnr=4 ; bitnr >= 0 ;bitnr--){ |
wbeaumont | 8:fe1477cd1c14 | 190 | snr=snr<<1; |
wbeaumont | 8:fe1477cd1c14 | 191 | snr|=hwlines->snr[bitnr]->read(); |
wbeaumont | 8:fe1477cd1c14 | 192 | } |
wbeaumont | 8:fe1477cd1c14 | 193 | return snr; |
wbeaumont | 8:fe1477cd1c14 | 194 | } |
wbeaumont | 13:3d82f8e27414 | 195 | |
wbeaumont | 13:3d82f8e27414 | 196 | |
wbeaumont | 13:3d82f8e27414 | 197 | float Bias2Dac(float biasvolt){ return biasvolt/26.35507246 ; /* no correct implementation */ }; |
wbeaumont | 13:3d82f8e27414 | 198 | float Dac2Bias(float dacvolt) { return dacvolt*26.35507246; /* no correct implementation */ }; |