C Library for mbedWSE project based single board computer for hardware peripherals

Fork of mbedWSEsbc by Joseph Bradshaw

Committer:
jebradshaw
Date:
Thu Sep 18 15:20:09 2014 +0000
Revision:
2:9cddaa7eee11
Parent:
1:85cd6d500385
Child:
3:103665166deb
20140918 - Added comments and printf in Init function

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jebradshaw 0:dbd8b5c35d0f 1 // C Library for the WSE-PROJ-SBC
jebradshaw 0:dbd8b5c35d0f 2 // J Bradshaw
jebradshaw 0:dbd8b5c35d0f 3 // 20140912
jebradshaw 0:dbd8b5c35d0f 4
jebradshaw 0:dbd8b5c35d0f 5 //=============================================================================
jebradshaw 0:dbd8b5c35d0f 6 // Four commands for the Instruction Register (B7,B6) - LS7366
jebradshaw 0:dbd8b5c35d0f 7 //=============================================================================
jebradshaw 0:dbd8b5c35d0f 8 #define CLR 0x00 //Clear Instruction
jebradshaw 0:dbd8b5c35d0f 9 #define RD 0x01 //Read Instruction
jebradshaw 0:dbd8b5c35d0f 10 #define WR 0x02 //Write Instruction
jebradshaw 0:dbd8b5c35d0f 11 #define LOAD 0x03 //Load Instruction
jebradshaw 0:dbd8b5c35d0f 12
jebradshaw 0:dbd8b5c35d0f 13 //=============================================================================
jebradshaw 0:dbd8b5c35d0f 14 // Register to Select from the Instruction Register (B5,B4,B3) - LS7366
jebradshaw 0:dbd8b5c35d0f 15 //=============================================================================
jebradshaw 0:dbd8b5c35d0f 16 #define NONE 0x00 //No Register Selected
jebradshaw 0:dbd8b5c35d0f 17 #define MDR0 0x01 //Mode Register 0
jebradshaw 0:dbd8b5c35d0f 18 #define MDR1 0x02 //Mode Register 1
jebradshaw 0:dbd8b5c35d0f 19 #define DTR 0x03 //Data Transfer Register
jebradshaw 0:dbd8b5c35d0f 20 #define CNTR 0x04 //Software Configurable Counter Register
jebradshaw 0:dbd8b5c35d0f 21 #define OTR 0x05 //Output Transfer Register
jebradshaw 0:dbd8b5c35d0f 22 #define STR 0x06 //Status Register
jebradshaw 0:dbd8b5c35d0f 23 #define NONE_REG 0x07 //No Register Selected
jebradshaw 0:dbd8b5c35d0f 24
jebradshaw 0:dbd8b5c35d0f 25 // Set-up hardwired IO
jebradshaw 0:dbd8b5c35d0f 26 SPI spi_max1270(p5, p6, p7);
jebradshaw 0:dbd8b5c35d0f 27 SPI spi(p5, p6, p7);
jebradshaw 0:dbd8b5c35d0f 28 DigitalOut max1270_cs(p8); //MAX1270 ADC CS
jebradshaw 0:dbd8b5c35d0f 29 DigitalOut max522_cs(p11); //MAX522 DAC CS
jebradshaw 0:dbd8b5c35d0f 30
jebradshaw 0:dbd8b5c35d0f 31 DigitalOut ls7166_cs1(p19); //CS for LS7366
jebradshaw 0:dbd8b5c35d0f 32 DigitalOut ls7166_cs2(p20); //CS for LS7366
jebradshaw 0:dbd8b5c35d0f 33
jebradshaw 0:dbd8b5c35d0f 34 DigitalOut mot1_ph1(p21);
jebradshaw 0:dbd8b5c35d0f 35 DigitalOut mot1_ph2(p22);
jebradshaw 0:dbd8b5c35d0f 36 PwmOut mot_en1(p23);
jebradshaw 0:dbd8b5c35d0f 37
jebradshaw 0:dbd8b5c35d0f 38 DigitalOut mot2_ph1(p24);
jebradshaw 0:dbd8b5c35d0f 39 DigitalOut mot2_ph2(p25);
jebradshaw 0:dbd8b5c35d0f 40 PwmOut mot_en2(p26);
jebradshaw 0:dbd8b5c35d0f 41
jebradshaw 0:dbd8b5c35d0f 42 DigitalOut led1(LED1);
jebradshaw 0:dbd8b5c35d0f 43 DigitalOut led2(LED2);
jebradshaw 0:dbd8b5c35d0f 44 DigitalOut led3(LED3);
jebradshaw 0:dbd8b5c35d0f 45 DigitalOut led4(LED4);
jebradshaw 0:dbd8b5c35d0f 46
jebradshaw 0:dbd8b5c35d0f 47 Serial pc(USBTX, USBRX); // tx, rx for serial USB interface to pc
jebradshaw 0:dbd8b5c35d0f 48 Serial xbee(p13, p14); // tx, rx for Xbee
jebradshaw 0:dbd8b5c35d0f 49 Timer t; // create timer instance
jebradshaw 0:dbd8b5c35d0f 50
jebradshaw 0:dbd8b5c35d0f 51 // ------ Prototypes -----------
jebradshaw 0:dbd8b5c35d0f 52 int read_max1270(int chan, int range, int bipol);
jebradshaw 0:dbd8b5c35d0f 53 float read_max1270_volts(int chan, int range, int bipol);
jebradshaw 0:dbd8b5c35d0f 54 void mot_control(int drv_num, float dc);
jebradshaw 0:dbd8b5c35d0f 55 void LS7366_cmd(int inst, int reg);
jebradshaw 0:dbd8b5c35d0f 56 long LS7366_read_counter(int chan_num);
jebradshaw 0:dbd8b5c35d0f 57 void LS7366_quad_mode_x4(int chan_num);
jebradshaw 0:dbd8b5c35d0f 58 void LS7366_reset_counter(int chan_num);
jebradshaw 0:dbd8b5c35d0f 59 void LS7366_write_DTR(int chan_num,long enc_value);
jebradshaw 0:dbd8b5c35d0f 60 void write_max522(int chan, float volts);
jebradshaw 0:dbd8b5c35d0f 61
jebradshaw 0:dbd8b5c35d0f 62 //---- Function Listing -------------------------------
jebradshaw 0:dbd8b5c35d0f 63 int read_max1270(int chan, int range, int bipol){
jebradshaw 0:dbd8b5c35d0f 64 int cword=0x80; //set the start bit
jebradshaw 0:dbd8b5c35d0f 65
jebradshaw 0:dbd8b5c35d0f 66 spi_max1270.frequency(10000000);
jebradshaw 0:dbd8b5c35d0f 67 spi_max1270.format(8, 0); // 8 data bits, CPOL0, and CPHA0 (datasheet Digital Interface)
jebradshaw 0:dbd8b5c35d0f 68
jebradshaw 0:dbd8b5c35d0f 69 cword |= (chan << 4); //shift channel
jebradshaw 0:dbd8b5c35d0f 70 cword |= (range << 3);
jebradshaw 0:dbd8b5c35d0f 71 cword |= (bipol << 2);
jebradshaw 0:dbd8b5c35d0f 72
jebradshaw 0:dbd8b5c35d0f 73 max1270_cs = 0;
jebradshaw 0:dbd8b5c35d0f 74
jebradshaw 0:dbd8b5c35d0f 75 spi_max1270.write(cword);
jebradshaw 0:dbd8b5c35d0f 76 wait_us(15); //15us
jebradshaw 0:dbd8b5c35d0f 77 spi_max1270.format(12, 3);
jebradshaw 0:dbd8b5c35d0f 78
jebradshaw 0:dbd8b5c35d0f 79 int result = spi_max1270.write(0);
jebradshaw 0:dbd8b5c35d0f 80
jebradshaw 0:dbd8b5c35d0f 81 max1270_cs = 1;
jebradshaw 0:dbd8b5c35d0f 82 spi_max1270.format(8, 0);
jebradshaw 0:dbd8b5c35d0f 83 return result;
jebradshaw 0:dbd8b5c35d0f 84 }
jebradshaw 0:dbd8b5c35d0f 85
jebradshaw 0:dbd8b5c35d0f 86 float read_max1270_volts(int chan, int range, int bipol){
jebradshaw 0:dbd8b5c35d0f 87 float rangevolts=0.0;
jebradshaw 0:dbd8b5c35d0f 88 float volts=0.0;
jebradshaw 0:dbd8b5c35d0f 89 int adc_res;
jebradshaw 0:dbd8b5c35d0f 90
jebradshaw 0:dbd8b5c35d0f 91 //read the ADC converter
jebradshaw 0:dbd8b5c35d0f 92 adc_res = read_max1270(chan, range, bipol) & 0xFFF;
jebradshaw 0:dbd8b5c35d0f 93
jebradshaw 0:dbd8b5c35d0f 94 //Determine the voltage range
jebradshaw 0:dbd8b5c35d0f 95 if(range) //RNG bit
jebradshaw 0:dbd8b5c35d0f 96 rangevolts=10.0;
jebradshaw 0:dbd8b5c35d0f 97 else
jebradshaw 0:dbd8b5c35d0f 98 rangevolts=5.0;
jebradshaw 0:dbd8b5c35d0f 99
jebradshaw 0:dbd8b5c35d0f 100 //bi-polar input range
jebradshaw 0:dbd8b5c35d0f 101 if(bipol){ //BIP is set, input is +/-
jebradshaw 0:dbd8b5c35d0f 102 if(adc_res < 0x800){ //if result was positive
jebradshaw 0:dbd8b5c35d0f 103 volts = ((float)adc_res/0x7FF) * rangevolts;
jebradshaw 0:dbd8b5c35d0f 104 }
jebradshaw 0:dbd8b5c35d0f 105 else{ //result was negative
jebradshaw 0:dbd8b5c35d0f 106 volts = -(-((float)adc_res/0x7FF) * rangevolts) - (rangevolts * 2.0);
jebradshaw 0:dbd8b5c35d0f 107 }
jebradshaw 0:dbd8b5c35d0f 108 }
jebradshaw 0:dbd8b5c35d0f 109 else{ //input is positive polarity only
jebradshaw 0:dbd8b5c35d0f 110 volts = ((float)adc_res/0xFFF) * rangevolts;
jebradshaw 0:dbd8b5c35d0f 111 }
jebradshaw 0:dbd8b5c35d0f 112
jebradshaw 0:dbd8b5c35d0f 113 return volts;
jebradshaw 0:dbd8b5c35d0f 114 }
jebradshaw 0:dbd8b5c35d0f 115
jebradshaw 0:dbd8b5c35d0f 116 //Motor control routine for PWM on 5 pin motor driver header
jebradshaw 0:dbd8b5c35d0f 117 // drv_num is 1 or 2 (defaults to 1, anything but 2)
jebradshaw 0:dbd8b5c35d0f 118 // dc is signed duty cycle (+/-1.0)
jebradshaw 0:dbd8b5c35d0f 119
jebradshaw 0:dbd8b5c35d0f 120 void mot_control(int drv_num, float dc){
jebradshaw 0:dbd8b5c35d0f 121 if(dc>1.0)
jebradshaw 0:dbd8b5c35d0f 122 dc=1.0;
jebradshaw 0:dbd8b5c35d0f 123 if(dc<-1.0)
jebradshaw 0:dbd8b5c35d0f 124 dc=-1.0;
jebradshaw 0:dbd8b5c35d0f 125
jebradshaw 0:dbd8b5c35d0f 126 if(drv_num != 2){
jebradshaw 0:dbd8b5c35d0f 127 if(dc > 0.0){
jebradshaw 0:dbd8b5c35d0f 128 mot1_ph2 = 0;
jebradshaw 0:dbd8b5c35d0f 129 mot1_ph1 = 1;
jebradshaw 0:dbd8b5c35d0f 130 mot_en1 = dc;
jebradshaw 0:dbd8b5c35d0f 131 }
jebradshaw 0:dbd8b5c35d0f 132 else if(dc < -0.0){
jebradshaw 0:dbd8b5c35d0f 133 mot1_ph1 = 0;
jebradshaw 0:dbd8b5c35d0f 134 mot1_ph2 = 1;
jebradshaw 0:dbd8b5c35d0f 135 mot_en1 = abs(dc);
jebradshaw 0:dbd8b5c35d0f 136 }
jebradshaw 0:dbd8b5c35d0f 137 else{
jebradshaw 0:dbd8b5c35d0f 138 mot1_ph1 = 0;
jebradshaw 0:dbd8b5c35d0f 139 mot1_ph2 = 0;
jebradshaw 0:dbd8b5c35d0f 140 mot_en1 = 0.0;
jebradshaw 0:dbd8b5c35d0f 141 }
jebradshaw 0:dbd8b5c35d0f 142 }
jebradshaw 0:dbd8b5c35d0f 143 else{
jebradshaw 0:dbd8b5c35d0f 144 if(dc > 0.0){
jebradshaw 0:dbd8b5c35d0f 145 mot2_ph2 = 0;
jebradshaw 0:dbd8b5c35d0f 146 mot2_ph1 = 1;
jebradshaw 0:dbd8b5c35d0f 147 mot_en2 = dc;
jebradshaw 0:dbd8b5c35d0f 148 }
jebradshaw 0:dbd8b5c35d0f 149 else if(dc < -0.0){
jebradshaw 0:dbd8b5c35d0f 150 mot2_ph1 = 0;
jebradshaw 0:dbd8b5c35d0f 151 mot2_ph2 = 1;
jebradshaw 0:dbd8b5c35d0f 152 mot_en2 = abs(dc);
jebradshaw 0:dbd8b5c35d0f 153 }
jebradshaw 0:dbd8b5c35d0f 154 else{
jebradshaw 0:dbd8b5c35d0f 155 mot2_ph1 = 0;
jebradshaw 0:dbd8b5c35d0f 156 mot2_ph2 = 0;
jebradshaw 0:dbd8b5c35d0f 157 mot_en2 = 0.0;
jebradshaw 0:dbd8b5c35d0f 158 }
jebradshaw 0:dbd8b5c35d0f 159 }
jebradshaw 0:dbd8b5c35d0f 160 }
jebradshaw 0:dbd8b5c35d0f 161
jebradshaw 0:dbd8b5c35d0f 162 //----- LS7366 Encoder/Counter Routines --------------------
jebradshaw 0:dbd8b5c35d0f 163 void LS7366_cmd(int inst, int reg){
jebradshaw 0:dbd8b5c35d0f 164 char cmd;
jebradshaw 0:dbd8b5c35d0f 165
jebradshaw 0:dbd8b5c35d0f 166 spi.format(8, 0);
jebradshaw 0:dbd8b5c35d0f 167 spi.frequency(2000000);
jebradshaw 0:dbd8b5c35d0f 168 cmd = (inst << 6) | (reg << 3);
jebradshaw 0:dbd8b5c35d0f 169 // printf("\r\ncmd=0X%2X", cmd);
jebradshaw 0:dbd8b5c35d0f 170 spi.write(cmd);
jebradshaw 0:dbd8b5c35d0f 171 }
jebradshaw 0:dbd8b5c35d0f 172
jebradshaw 0:dbd8b5c35d0f 173 long LS7366_read_counter(int chan_num){
jebradshaw 0:dbd8b5c35d0f 174 union bytes{
jebradshaw 0:dbd8b5c35d0f 175 char byte_enc[4];
jebradshaw 0:dbd8b5c35d0f 176 long long_enc;
jebradshaw 0:dbd8b5c35d0f 177 }counter;
jebradshaw 0:dbd8b5c35d0f 178
jebradshaw 0:dbd8b5c35d0f 179 counter.long_enc = 0;
jebradshaw 0:dbd8b5c35d0f 180
jebradshaw 0:dbd8b5c35d0f 181 spi.format(8, 0);
jebradshaw 0:dbd8b5c35d0f 182 spi.frequency(2000000);
jebradshaw 0:dbd8b5c35d0f 183
jebradshaw 0:dbd8b5c35d0f 184 if(chan_num!=2){
jebradshaw 0:dbd8b5c35d0f 185 ls7166_cs1 = 0;
jebradshaw 0:dbd8b5c35d0f 186 wait_us(1);
jebradshaw 0:dbd8b5c35d0f 187 LS7366_cmd(LOAD,OTR);//cmd = 0xe8, LOAD to OTR
jebradshaw 0:dbd8b5c35d0f 188 ls7166_cs1 = 1;
jebradshaw 0:dbd8b5c35d0f 189 wait_us(1);
jebradshaw 0:dbd8b5c35d0f 190 ls7166_cs1 = 0;
jebradshaw 0:dbd8b5c35d0f 191 }
jebradshaw 0:dbd8b5c35d0f 192 else{
jebradshaw 0:dbd8b5c35d0f 193 ls7166_cs2 = 0;
jebradshaw 0:dbd8b5c35d0f 194 wait_us(1);
jebradshaw 0:dbd8b5c35d0f 195 LS7366_cmd(LOAD,OTR);//cmd = 0xe8, LOAD to OTR
jebradshaw 0:dbd8b5c35d0f 196 ls7166_cs2 = 1;
jebradshaw 0:dbd8b5c35d0f 197 wait_us(1);
jebradshaw 0:dbd8b5c35d0f 198
jebradshaw 0:dbd8b5c35d0f 199 ls7166_cs2 = 0;
jebradshaw 0:dbd8b5c35d0f 200 }
jebradshaw 0:dbd8b5c35d0f 201 wait_us(1);
jebradshaw 0:dbd8b5c35d0f 202 LS7366_cmd(RD,CNTR); //cmd = 0x60, READ from CNTR
jebradshaw 0:dbd8b5c35d0f 203 counter.byte_enc[3] = spi.write(0x00);
jebradshaw 0:dbd8b5c35d0f 204 counter.byte_enc[2] = spi.write(0x00);
jebradshaw 0:dbd8b5c35d0f 205 counter.byte_enc[1] = spi.write(0x00);
jebradshaw 0:dbd8b5c35d0f 206 counter.byte_enc[0] = spi.write(0x00);
jebradshaw 0:dbd8b5c35d0f 207
jebradshaw 0:dbd8b5c35d0f 208 if(chan_num!=2){
jebradshaw 0:dbd8b5c35d0f 209 ls7166_cs1 = 1;
jebradshaw 0:dbd8b5c35d0f 210 }
jebradshaw 0:dbd8b5c35d0f 211 else{
jebradshaw 0:dbd8b5c35d0f 212 ls7166_cs2 = 1;
jebradshaw 0:dbd8b5c35d0f 213 }
jebradshaw 0:dbd8b5c35d0f 214
jebradshaw 0:dbd8b5c35d0f 215 return counter.long_enc; //return count
jebradshaw 0:dbd8b5c35d0f 216 }
jebradshaw 0:dbd8b5c35d0f 217
jebradshaw 0:dbd8b5c35d0f 218 void LS7366_quad_mode_x4(int chan_num){
jebradshaw 0:dbd8b5c35d0f 219
jebradshaw 0:dbd8b5c35d0f 220 spi.format(8, 0);
jebradshaw 0:dbd8b5c35d0f 221 spi.frequency(2000000);
jebradshaw 0:dbd8b5c35d0f 222
jebradshaw 0:dbd8b5c35d0f 223 if(chan_num!=2){
jebradshaw 0:dbd8b5c35d0f 224 ls7166_cs1 = 0;
jebradshaw 0:dbd8b5c35d0f 225 }
jebradshaw 0:dbd8b5c35d0f 226 else{
jebradshaw 0:dbd8b5c35d0f 227 ls7166_cs2 = 0;
jebradshaw 0:dbd8b5c35d0f 228 }
jebradshaw 0:dbd8b5c35d0f 229 wait_us(1);
jebradshaw 0:dbd8b5c35d0f 230 LS7366_cmd(WR,MDR0);// Write to the MDR0 register
jebradshaw 0:dbd8b5c35d0f 231 spi.write(0x03); // X4 quadrature count mode
jebradshaw 0:dbd8b5c35d0f 232 if(chan_num!=2){
jebradshaw 0:dbd8b5c35d0f 233 ls7166_cs1 = 1;
jebradshaw 0:dbd8b5c35d0f 234 }
jebradshaw 0:dbd8b5c35d0f 235 else{
jebradshaw 0:dbd8b5c35d0f 236 ls7166_cs2 = 1;
jebradshaw 0:dbd8b5c35d0f 237 }
jebradshaw 0:dbd8b5c35d0f 238 }
jebradshaw 0:dbd8b5c35d0f 239
jebradshaw 0:dbd8b5c35d0f 240 void LS7366_reset_counter(int chan_num){
jebradshaw 0:dbd8b5c35d0f 241
jebradshaw 0:dbd8b5c35d0f 242 spi.format(8, 0);
jebradshaw 0:dbd8b5c35d0f 243 spi.frequency(2000000);
jebradshaw 0:dbd8b5c35d0f 244
jebradshaw 0:dbd8b5c35d0f 245 if(chan_num!=2){
jebradshaw 0:dbd8b5c35d0f 246 ls7166_cs1 = 0;
jebradshaw 0:dbd8b5c35d0f 247 }
jebradshaw 0:dbd8b5c35d0f 248 else{
jebradshaw 0:dbd8b5c35d0f 249 ls7166_cs2 = 0;
jebradshaw 0:dbd8b5c35d0f 250 }
jebradshaw 0:dbd8b5c35d0f 251 wait_us(1);
jebradshaw 0:dbd8b5c35d0f 252 LS7366_cmd(CLR,CNTR);//Clear the counter register
jebradshaw 0:dbd8b5c35d0f 253 if(chan_num!=2){
jebradshaw 0:dbd8b5c35d0f 254 ls7166_cs1 = 1;
jebradshaw 0:dbd8b5c35d0f 255 }
jebradshaw 0:dbd8b5c35d0f 256 else{
jebradshaw 0:dbd8b5c35d0f 257 ls7166_cs2 = 1;
jebradshaw 0:dbd8b5c35d0f 258 }
jebradshaw 0:dbd8b5c35d0f 259 wait_us(1);
jebradshaw 0:dbd8b5c35d0f 260
jebradshaw 0:dbd8b5c35d0f 261 if(chan_num!=2){
jebradshaw 0:dbd8b5c35d0f 262 ls7166_cs1 = 0;
jebradshaw 0:dbd8b5c35d0f 263 }
jebradshaw 0:dbd8b5c35d0f 264 else{
jebradshaw 0:dbd8b5c35d0f 265 ls7166_cs2 = 0;
jebradshaw 0:dbd8b5c35d0f 266 }
jebradshaw 0:dbd8b5c35d0f 267 wait_us(1);
jebradshaw 0:dbd8b5c35d0f 268 LS7366_cmd(LOAD,CNTR);//
jebradshaw 0:dbd8b5c35d0f 269 if(chan_num!=2){
jebradshaw 0:dbd8b5c35d0f 270 ls7166_cs1 = 1;
jebradshaw 0:dbd8b5c35d0f 271 }
jebradshaw 0:dbd8b5c35d0f 272 else{
jebradshaw 0:dbd8b5c35d0f 273 ls7166_cs1 = 1;
jebradshaw 0:dbd8b5c35d0f 274 }
jebradshaw 0:dbd8b5c35d0f 275 }
jebradshaw 0:dbd8b5c35d0f 276
jebradshaw 0:dbd8b5c35d0f 277 void LS7366_write_DTR(int chan_num,long enc_value){
jebradshaw 0:dbd8b5c35d0f 278 union bytes
jebradshaw 0:dbd8b5c35d0f 279 {
jebradshaw 0:dbd8b5c35d0f 280 char byte_enc[4];
jebradshaw 0:dbd8b5c35d0f 281 long long_enc;
jebradshaw 0:dbd8b5c35d0f 282 }counter;
jebradshaw 0:dbd8b5c35d0f 283
jebradshaw 0:dbd8b5c35d0f 284 spi.format(8, 0);
jebradshaw 0:dbd8b5c35d0f 285 spi.frequency(2000000);
jebradshaw 0:dbd8b5c35d0f 286
jebradshaw 0:dbd8b5c35d0f 287 counter.long_enc = enc_value;
jebradshaw 0:dbd8b5c35d0f 288
jebradshaw 0:dbd8b5c35d0f 289 if(chan_num!=2){
jebradshaw 0:dbd8b5c35d0f 290 ls7166_cs1 = 0;
jebradshaw 0:dbd8b5c35d0f 291 }
jebradshaw 0:dbd8b5c35d0f 292 else{
jebradshaw 0:dbd8b5c35d0f 293 ls7166_cs2 = 0;
jebradshaw 0:dbd8b5c35d0f 294 }
jebradshaw 0:dbd8b5c35d0f 295 wait_us(1);
jebradshaw 0:dbd8b5c35d0f 296 LS7366_cmd(WR,DTR);//
jebradshaw 0:dbd8b5c35d0f 297 spi.write(counter.byte_enc[3]);
jebradshaw 0:dbd8b5c35d0f 298 spi.write(counter.byte_enc[2]);
jebradshaw 0:dbd8b5c35d0f 299 spi.write(counter.byte_enc[1]);
jebradshaw 0:dbd8b5c35d0f 300 spi.write(counter.byte_enc[0]);
jebradshaw 0:dbd8b5c35d0f 301 if(chan_num!=2){
jebradshaw 0:dbd8b5c35d0f 302 ls7166_cs1 = 1;
jebradshaw 0:dbd8b5c35d0f 303 }
jebradshaw 0:dbd8b5c35d0f 304 else{
jebradshaw 0:dbd8b5c35d0f 305 ls7166_cs2 = 1;
jebradshaw 0:dbd8b5c35d0f 306 }
jebradshaw 0:dbd8b5c35d0f 307
jebradshaw 0:dbd8b5c35d0f 308 wait_us(1);
jebradshaw 0:dbd8b5c35d0f 309 if(chan_num!=2){
jebradshaw 0:dbd8b5c35d0f 310 ls7166_cs1 = 0;
jebradshaw 0:dbd8b5c35d0f 311 }
jebradshaw 0:dbd8b5c35d0f 312 else{
jebradshaw 0:dbd8b5c35d0f 313 ls7166_cs2 = 0;
jebradshaw 0:dbd8b5c35d0f 314 }
jebradshaw 0:dbd8b5c35d0f 315 wait_us(1);
jebradshaw 0:dbd8b5c35d0f 316 LS7366_cmd(LOAD,CNTR);//
jebradshaw 0:dbd8b5c35d0f 317 if(chan_num!=2){
jebradshaw 0:dbd8b5c35d0f 318 ls7166_cs1 = 1;
jebradshaw 0:dbd8b5c35d0f 319 }
jebradshaw 0:dbd8b5c35d0f 320 else{
jebradshaw 0:dbd8b5c35d0f 321 ls7166_cs2 = 1;
jebradshaw 0:dbd8b5c35d0f 322 }
jebradshaw 0:dbd8b5c35d0f 323 }
jebradshaw 0:dbd8b5c35d0f 324
jebradshaw 0:dbd8b5c35d0f 325 //------- MAX522 routines ---------------------------------
jebradshaw 0:dbd8b5c35d0f 326 void write_max522(int chan, float volts){
jebradshaw 0:dbd8b5c35d0f 327 int cmd=0x20; //set UB3
jebradshaw 0:dbd8b5c35d0f 328 int data_word = (int)((volts/5.0) * 256.0);
jebradshaw 0:dbd8b5c35d0f 329 if(chan != 2)
jebradshaw 0:dbd8b5c35d0f 330 cmd |= 0x01; //set DAC A out
jebradshaw 0:dbd8b5c35d0f 331 else
jebradshaw 0:dbd8b5c35d0f 332 cmd |= 0x02; //set DACB out
jebradshaw 0:dbd8b5c35d0f 333
jebradshaw 0:dbd8b5c35d0f 334 // pc.printf("cmd=0x%4X data_word=0x%4X \r\n", cmd, data_word);
jebradshaw 0:dbd8b5c35d0f 335
jebradshaw 0:dbd8b5c35d0f 336 spi.format(8, 0);
jebradshaw 0:dbd8b5c35d0f 337 spi.frequency(2000000);
jebradshaw 0:dbd8b5c35d0f 338 max522_cs = 0;
jebradshaw 0:dbd8b5c35d0f 339 spi.write(cmd & 0xFF);
jebradshaw 0:dbd8b5c35d0f 340 spi.write(data_word & 0xFF);
jebradshaw 0:dbd8b5c35d0f 341 max522_cs = 1;
jebradshaw 0:dbd8b5c35d0f 342 }
jebradshaw 0:dbd8b5c35d0f 343
jebradshaw 1:85cd6d500385 344 void mbedWSEsbcInit(unsigned long pcbaud){
jebradshaw 2:9cddaa7eee11 345 led1 = 0;
jebradshaw 2:9cddaa7eee11 346 led2 = 0;
jebradshaw 2:9cddaa7eee11 347 led3 = 0;
jebradshaw 0:dbd8b5c35d0f 348 led4 = 0;
jebradshaw 0:dbd8b5c35d0f 349 max1270_cs = 1;
jebradshaw 0:dbd8b5c35d0f 350 max522_cs = 1;
jebradshaw 0:dbd8b5c35d0f 351 ls7166_cs1 = 1;
jebradshaw 0:dbd8b5c35d0f 352 ls7166_cs2 = 1;
jebradshaw 0:dbd8b5c35d0f 353
jebradshaw 0:dbd8b5c35d0f 354 wait(.2); //delay at beginning for voltage settle purposes
jebradshaw 0:dbd8b5c35d0f 355
jebradshaw 0:dbd8b5c35d0f 356 mot_en1.period_us(50);
jebradshaw 2:9cddaa7eee11 357
jebradshaw 2:9cddaa7eee11 358 pc.baud(pcbaud); //Set up serial port baud rate
jebradshaw 2:9cddaa7eee11 359 pc.printf("\r\n"); //Initialize with a Carriage Return and Newline
jebradshaw 0:dbd8b5c35d0f 360 xbee.baud(9600);
jebradshaw 0:dbd8b5c35d0f 361
jebradshaw 0:dbd8b5c35d0f 362 spi.frequency(5000000);
jebradshaw 0:dbd8b5c35d0f 363 LS7366_reset_counter(1);
jebradshaw 0:dbd8b5c35d0f 364 LS7366_quad_mode_x4(1);
jebradshaw 0:dbd8b5c35d0f 365 LS7366_write_DTR(1,0);
jebradshaw 0:dbd8b5c35d0f 366
jebradshaw 0:dbd8b5c35d0f 367 LS7366_reset_counter(2);
jebradshaw 0:dbd8b5c35d0f 368 LS7366_quad_mode_x4(2);
jebradshaw 0:dbd8b5c35d0f 369 LS7366_write_DTR(2,0);
jebradshaw 0:dbd8b5c35d0f 370
jebradshaw 0:dbd8b5c35d0f 371 t.start(); // Set up timer
jebradshaw 0:dbd8b5c35d0f 372 }//mbedWSEsbc_init()