Andrew Miller
/
EV_0_test
sentral tester
main.cpp@0:6834f1402927, 2014-01-04 (annotated)
- Committer:
- awmiller
- Date:
- Sat Jan 04 00:33:35 2014 +0000
- Revision:
- 0:6834f1402927
- Child:
- 1:29e57acc058b
Final Draft for LPC1768
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
awmiller | 0:6834f1402927 | 1 | #include "mbed.h" |
awmiller | 0:6834f1402927 | 2 | #include <stdio.h> |
awmiller | 0:6834f1402927 | 3 | #include "Sentral.h" |
awmiller | 0:6834f1402927 | 4 | #include "Test_Routines.h" |
awmiller | 0:6834f1402927 | 5 | |
awmiller | 0:6834f1402927 | 6 | typedef char* string; |
awmiller | 0:6834f1402927 | 7 | |
awmiller | 0:6834f1402927 | 8 | AnalogIn VDD_Check(p15); |
awmiller | 0:6834f1402927 | 9 | |
awmiller | 0:6834f1402927 | 10 | PwmOut led1(LED1); |
awmiller | 0:6834f1402927 | 11 | PwmOut led2(LED2); |
awmiller | 0:6834f1402927 | 12 | PwmOut led3(LED3); |
awmiller | 0:6834f1402927 | 13 | PwmOut led4(LED4); |
awmiller | 0:6834f1402927 | 14 | |
awmiller | 0:6834f1402927 | 15 | DigitalIn POWER(p22); |
awmiller | 0:6834f1402927 | 16 | |
awmiller | 0:6834f1402927 | 17 | I2C master(p28, p27); |
awmiller | 0:6834f1402927 | 18 | I2CSlave slave(p9,p10); |
awmiller | 0:6834f1402927 | 19 | |
awmiller | 0:6834f1402927 | 20 | Serial pc(USBTX,USBRX); |
awmiller | 0:6834f1402927 | 21 | |
awmiller | 0:6834f1402927 | 22 | LocalFileSystem local("local"); // Create the local filesystem under the name "local" |
awmiller | 0:6834f1402927 | 23 | |
awmiller | 0:6834f1402927 | 24 | void RX_int_cb(); |
awmiller | 0:6834f1402927 | 25 | |
awmiller | 0:6834f1402927 | 26 | void VDD_read_request(); |
awmiller | 0:6834f1402927 | 27 | |
awmiller | 0:6834f1402927 | 28 | void find_PROM(I2C i2c,int &address); |
awmiller | 0:6834f1402927 | 29 | int hex_read_line(FILE *hexfile); |
awmiller | 0:6834f1402927 | 30 | char ascii_hex2byte(char* ascii); |
awmiller | 0:6834f1402927 | 31 | |
awmiller | 0:6834f1402927 | 32 | int EEPROM_ADDR; |
awmiller | 0:6834f1402927 | 33 | int reading,readhex; |
awmiller | 0:6834f1402927 | 34 | |
awmiller | 0:6834f1402927 | 35 | void find_sentral(); |
awmiller | 0:6834f1402927 | 36 | //void sentral_startup(); |
awmiller | 0:6834f1402927 | 37 | |
awmiller | 0:6834f1402927 | 38 | |
awmiller | 0:6834f1402927 | 39 | int main() { |
awmiller | 0:6834f1402927 | 40 | |
awmiller | 0:6834f1402927 | 41 | |
awmiller | 0:6834f1402927 | 42 | Set_SA0(); |
awmiller | 0:6834f1402927 | 43 | Sentral_Power(0); |
awmiller | 0:6834f1402927 | 44 | led1 =0; |
awmiller | 0:6834f1402927 | 45 | led2 =0.25; |
awmiller | 0:6834f1402927 | 46 | led3 =0.5; |
awmiller | 0:6834f1402927 | 47 | led4 =0.75; |
awmiller | 0:6834f1402927 | 48 | |
awmiller | 0:6834f1402927 | 49 | pc.attach(&RX_int_cb); |
awmiller | 0:6834f1402927 | 50 | pc.baud(115200); |
awmiller | 0:6834f1402927 | 51 | pc.printf("Hello, press 't' to test a module \r\n"); |
awmiller | 0:6834f1402927 | 52 | |
awmiller | 0:6834f1402927 | 53 | reading =1; |
awmiller | 0:6834f1402927 | 54 | readhex=0; |
awmiller | 0:6834f1402927 | 55 | |
awmiller | 0:6834f1402927 | 56 | |
awmiller | 0:6834f1402927 | 57 | |
awmiller | 0:6834f1402927 | 58 | |
awmiller | 0:6834f1402927 | 59 | |
awmiller | 0:6834f1402927 | 60 | //pc.attach(&RX_int_cb); |
awmiller | 0:6834f1402927 | 61 | |
awmiller | 0:6834f1402927 | 62 | while(1){ |
awmiller | 0:6834f1402927 | 63 | |
awmiller | 0:6834f1402927 | 64 | if(led1 = 1) |
awmiller | 0:6834f1402927 | 65 | led1 =0; |
awmiller | 0:6834f1402927 | 66 | if(led2 = 1) |
awmiller | 0:6834f1402927 | 67 | led2 =0; |
awmiller | 0:6834f1402927 | 68 | if(led3 = 1) |
awmiller | 0:6834f1402927 | 69 | led3 =0; |
awmiller | 0:6834f1402927 | 70 | if(led4 = 1) |
awmiller | 0:6834f1402927 | 71 | led4 =0; |
awmiller | 0:6834f1402927 | 72 | |
awmiller | 0:6834f1402927 | 73 | led1 = led1 + 0.01; |
awmiller | 0:6834f1402927 | 74 | led2 = led2 + 0.01; |
awmiller | 0:6834f1402927 | 75 | led3 = led3 + 0.01; |
awmiller | 0:6834f1402927 | 76 | led4 = led4 + 0.01; |
awmiller | 0:6834f1402927 | 77 | |
awmiller | 0:6834f1402927 | 78 | if(POWER==0) |
awmiller | 0:6834f1402927 | 79 | { |
awmiller | 0:6834f1402927 | 80 | pc.attach(NULL); |
awmiller | 0:6834f1402927 | 81 | while(Sentral_Power(0)); |
awmiller | 0:6834f1402927 | 82 | pc.printf("MODULE POWER DISABLED \r\n"); |
awmiller | 0:6834f1402927 | 83 | VDD_read_request(); |
awmiller | 0:6834f1402927 | 84 | wait_ms(10); |
awmiller | 0:6834f1402927 | 85 | pc.printf("ENABLE POWER TO CONTINUE \r\n"); |
awmiller | 0:6834f1402927 | 86 | while(!POWER); |
awmiller | 0:6834f1402927 | 87 | while(!Sentral_Power(1)); |
awmiller | 0:6834f1402927 | 88 | wait_ms(10); |
awmiller | 0:6834f1402927 | 89 | pc.attach(&RX_int_cb); |
awmiller | 0:6834f1402927 | 90 | pc.printf("MODULE POWER ENABLED\r\n"); |
awmiller | 0:6834f1402927 | 91 | VDD_read_request(); |
awmiller | 0:6834f1402927 | 92 | } |
awmiller | 0:6834f1402927 | 93 | |
awmiller | 0:6834f1402927 | 94 | } |
awmiller | 0:6834f1402927 | 95 | //find_PROM(master, EEPROM_ADDR); |
awmiller | 0:6834f1402927 | 96 | /* |
awmiller | 0:6834f1402927 | 97 | FILE *fp = fopen("/local/TEST.hex", "r"); // Open "out.txt" on the local file system for writing |
awmiller | 0:6834f1402927 | 98 | //hex_read_line(FILE *hexfile); |
awmiller | 0:6834f1402927 | 99 | |
awmiller | 0:6834f1402927 | 100 | while(reading) |
awmiller | 0:6834f1402927 | 101 | if(readhex) |
awmiller | 0:6834f1402927 | 102 | { |
awmiller | 0:6834f1402927 | 103 | if(feof(fp)) |
awmiller | 0:6834f1402927 | 104 | { |
awmiller | 0:6834f1402927 | 105 | reading=0; |
awmiller | 0:6834f1402927 | 106 | break; |
awmiller | 0:6834f1402927 | 107 | } |
awmiller | 0:6834f1402927 | 108 | |
awmiller | 0:6834f1402927 | 109 | string input; fgets(input,2,fp); |
awmiller | 0:6834f1402927 | 110 | if(input[1] == ':') |
awmiller | 0:6834f1402927 | 111 | |
awmiller | 0:6834f1402927 | 112 | pc.printf("%X",ascii_hex2byte(input)); |
awmiller | 0:6834f1402927 | 113 | |
awmiller | 0:6834f1402927 | 114 | readhex =0; |
awmiller | 0:6834f1402927 | 115 | } |
awmiller | 0:6834f1402927 | 116 | |
awmiller | 0:6834f1402927 | 117 | fclose(fp); |
awmiller | 0:6834f1402927 | 118 | pc.printf("File Closed \r\n"); |
awmiller | 0:6834f1402927 | 119 | */ |
awmiller | 0:6834f1402927 | 120 | } |
awmiller | 0:6834f1402927 | 121 | |
awmiller | 0:6834f1402927 | 122 | void RX_int_cb() { |
awmiller | 0:6834f1402927 | 123 | |
awmiller | 0:6834f1402927 | 124 | switch(pc.getc()) { |
awmiller | 0:6834f1402927 | 125 | |
awmiller | 0:6834f1402927 | 126 | case 'r': |
awmiller | 0:6834f1402927 | 127 | VDD_read_request(); |
awmiller | 0:6834f1402927 | 128 | break; |
awmiller | 0:6834f1402927 | 129 | /* |
awmiller | 0:6834f1402927 | 130 | case 'l': |
awmiller | 0:6834f1402927 | 131 | if(reading){ |
awmiller | 0:6834f1402927 | 132 | if(!hex_read_line(FILE *hexfile)){ |
awmiller | 0:6834f1402927 | 133 | reading =0; |
awmiller | 0:6834f1402927 | 134 | pc.printf("EOF\r\n");} |
awmiller | 0:6834f1402927 | 135 | }else pc.printf("no file open\r\n"); |
awmiller | 0:6834f1402927 | 136 | break; |
awmiller | 0:6834f1402927 | 137 | */ |
awmiller | 0:6834f1402927 | 138 | case 'h': |
awmiller | 0:6834f1402927 | 139 | if(reading) |
awmiller | 0:6834f1402927 | 140 | { |
awmiller | 0:6834f1402927 | 141 | readhex = 1; |
awmiller | 0:6834f1402927 | 142 | |
awmiller | 0:6834f1402927 | 143 | } |
awmiller | 0:6834f1402927 | 144 | break; |
awmiller | 0:6834f1402927 | 145 | |
awmiller | 0:6834f1402927 | 146 | case 'f': |
awmiller | 0:6834f1402927 | 147 | find_sentral(); |
awmiller | 0:6834f1402927 | 148 | break; |
awmiller | 0:6834f1402927 | 149 | |
awmiller | 0:6834f1402927 | 150 | case 's': |
awmiller | 0:6834f1402927 | 151 | pc.printf("Sentral Starting up. \r\n"); |
awmiller | 0:6834f1402927 | 152 | //find_sentral(); |
awmiller | 0:6834f1402927 | 153 | if(!SentralSetup(pc,master)) |
awmiller | 0:6834f1402927 | 154 | //pc.printf("returning to loop\r\n"); |
awmiller | 0:6834f1402927 | 155 | //else |
awmiller | 0:6834f1402927 | 156 | pc.printf("Sentral Start exit failure\r\n"); |
awmiller | 0:6834f1402927 | 157 | break; |
awmiller | 0:6834f1402927 | 158 | |
awmiller | 0:6834f1402927 | 159 | case 't': |
awmiller | 0:6834f1402927 | 160 | pc.printf("Begginng module test...\r\n"); |
awmiller | 0:6834f1402927 | 161 | pc.printf("Sentral Starting up. \r\n"); |
awmiller | 0:6834f1402927 | 162 | //find_sentral(); |
awmiller | 0:6834f1402927 | 163 | if(!SentralSetup(pc,master)) |
awmiller | 0:6834f1402927 | 164 | //pc.printf("returning to loop\r\n"); |
awmiller | 0:6834f1402927 | 165 | //else |
awmiller | 0:6834f1402927 | 166 | pc.printf("Sentral exit failure\r\n"); |
awmiller | 0:6834f1402927 | 167 | |
awmiller | 0:6834f1402927 | 168 | else if(EV0_test(pc,master)) pc.printf("Module PASS\r\n"); |
awmiller | 0:6834f1402927 | 169 | |
awmiller | 0:6834f1402927 | 170 | break; |
awmiller | 0:6834f1402927 | 171 | |
awmiller | 0:6834f1402927 | 172 | default: |
awmiller | 0:6834f1402927 | 173 | pc.printf("undefined command \r\n"); |
awmiller | 0:6834f1402927 | 174 | break; |
awmiller | 0:6834f1402927 | 175 | } |
awmiller | 0:6834f1402927 | 176 | |
awmiller | 0:6834f1402927 | 177 | } |
awmiller | 0:6834f1402927 | 178 | |
awmiller | 0:6834f1402927 | 179 | void VDD_read_request() { |
awmiller | 0:6834f1402927 | 180 | |
awmiller | 0:6834f1402927 | 181 | pc.printf("Moudle Voltage: %f \r\n",(VDD_Check.read()*3.3f)); |
awmiller | 0:6834f1402927 | 182 | |
awmiller | 0:6834f1402927 | 183 | } |
awmiller | 0:6834f1402927 | 184 | |
awmiller | 0:6834f1402927 | 185 | void find_PROM(I2C i2c,int &EEPROM_ADDR) { |
awmiller | 0:6834f1402927 | 186 | |
awmiller | 0:6834f1402927 | 187 | int eeprom_success =1 ; |
awmiller | 0:6834f1402927 | 188 | |
awmiller | 0:6834f1402927 | 189 | for(EEPROM_ADDR = 0xA0;(eeprom_success && EEPROM_ADDR < 0xB0); EEPROM_ADDR+=0x02) |
awmiller | 0:6834f1402927 | 190 | { |
awmiller | 0:6834f1402927 | 191 | i2c.start(); |
awmiller | 0:6834f1402927 | 192 | eeprom_success = !(master.write(EEPROM_ADDR + 0x01)); |
awmiller | 0:6834f1402927 | 193 | i2c.stop(); |
awmiller | 0:6834f1402927 | 194 | } |
awmiller | 0:6834f1402927 | 195 | |
awmiller | 0:6834f1402927 | 196 | if(EEPROM_ADDR < 0xB0) |
awmiller | 0:6834f1402927 | 197 | pc.printf("EEPROM found at %X \r\n", EEPROM_ADDR-2); |
awmiller | 0:6834f1402927 | 198 | else |
awmiller | 0:6834f1402927 | 199 | pc.printf("No EEPROM found ... \r\n"); |
awmiller | 0:6834f1402927 | 200 | EEPROM_ADDR -= 2; |
awmiller | 0:6834f1402927 | 201 | |
awmiller | 0:6834f1402927 | 202 | pc.printf("Testing %X, Writing '!' to 0x00 ... ", EEPROM_ADDR); |
awmiller | 0:6834f1402927 | 203 | |
awmiller | 0:6834f1402927 | 204 | |
awmiller | 0:6834f1402927 | 205 | char cmd[10]; |
awmiller | 0:6834f1402927 | 206 | cmd[0] = 0x00; |
awmiller | 0:6834f1402927 | 207 | cmd[1] = 0x00; |
awmiller | 0:6834f1402927 | 208 | cmd[2] = '!'; |
awmiller | 0:6834f1402927 | 209 | i2c.write(EEPROM_ADDR, cmd, 3); |
awmiller | 0:6834f1402927 | 210 | |
awmiller | 0:6834f1402927 | 211 | cmd[2] = 0; |
awmiller | 0:6834f1402927 | 212 | |
awmiller | 0:6834f1402927 | 213 | wait(0.5); |
awmiller | 0:6834f1402927 | 214 | |
awmiller | 0:6834f1402927 | 215 | i2c.write(EEPROM_ADDR, cmd, 2); |
awmiller | 0:6834f1402927 | 216 | i2c.read(EEPROM_ADDR, cmd, 1); |
awmiller | 0:6834f1402927 | 217 | |
awmiller | 0:6834f1402927 | 218 | pc.printf("Reading Back: %c \r\n",cmd[0]) ; |
awmiller | 0:6834f1402927 | 219 | } |
awmiller | 0:6834f1402927 | 220 | /* |
awmiller | 0:6834f1402927 | 221 | int hex_read_line(FILE *hexfile) { |
awmiller | 0:6834f1402927 | 222 | |
awmiller | 0:6834f1402927 | 223 | char c; |
awmiller | 0:6834f1402927 | 224 | |
awmiller | 0:6834f1402927 | 225 | do{ |
awmiller | 0:6834f1402927 | 226 | c = fgetc(hexfile); |
awmiller | 0:6834f1402927 | 227 | }while(!feof(hexfile) && c !=':'); |
awmiller | 0:6834f1402927 | 228 | |
awmiller | 0:6834f1402927 | 229 | if(foef(hexfile)){ |
awmiller | 0:6834f1402927 | 230 | pc.printf("EOF"); |
awmiller | 0:6834f1402927 | 231 | return 0; |
awmiller | 0:6834f1402927 | 232 | } |
awmiller | 0:6834f1402927 | 233 | else |
awmiller | 0:6834f1402927 | 234 | { |
awmiller | 0:6834f1402927 | 235 | string hexbyte; |
awmiller | 0:6834f1402927 | 236 | fgets(hexbyte,2,hexfile); |
awmiller | 0:6834f1402927 | 237 | ascii_hex2byte(hexbyte); |
awmiller | 0:6834f1402927 | 238 | } |
awmiller | 0:6834f1402927 | 239 | |
awmiller | 0:6834f1402927 | 240 | pc.printf("Done"); |
awmiller | 0:6834f1402927 | 241 | |
awmiller | 0:6834f1402927 | 242 | } |
awmiller | 0:6834f1402927 | 243 | */ |
awmiller | 0:6834f1402927 | 244 | char ascii_hex2byte(char* ascii){ |
awmiller | 0:6834f1402927 | 245 | |
awmiller | 0:6834f1402927 | 246 | if(ascii[1]>'Z') |
awmiller | 0:6834f1402927 | 247 | ascii[1] = ascii[1] - 'a' + 10; |
awmiller | 0:6834f1402927 | 248 | else if(ascii[1] > '9') |
awmiller | 0:6834f1402927 | 249 | ascii[1] = ascii[1] - 'A' + 10; |
awmiller | 0:6834f1402927 | 250 | else if((ascii[1] >= '0') && (ascii[1] <= '9')) |
awmiller | 0:6834f1402927 | 251 | ascii[1] = ascii[1] - '0'; |
awmiller | 0:6834f1402927 | 252 | else |
awmiller | 0:6834f1402927 | 253 | pc.printf("Bad Hex Word: ascii[1]"); |
awmiller | 0:6834f1402927 | 254 | |
awmiller | 0:6834f1402927 | 255 | if(ascii[0]>'Z') |
awmiller | 0:6834f1402927 | 256 | ascii[0] = ascii[1] - 'a' + 10; |
awmiller | 0:6834f1402927 | 257 | else if(ascii[0] > '9') |
awmiller | 0:6834f1402927 | 258 | ascii[0] = ascii[0] - 'A' + 10; |
awmiller | 0:6834f1402927 | 259 | else if((ascii[0] >= '0') && (ascii[1] <= '9')) |
awmiller | 0:6834f1402927 | 260 | ascii[0] = ascii[0] - '0'; |
awmiller | 0:6834f1402927 | 261 | else |
awmiller | 0:6834f1402927 | 262 | pc.printf("Bad Hex Word: ascii[0]"); |
awmiller | 0:6834f1402927 | 263 | |
awmiller | 0:6834f1402927 | 264 | return (ascii[0] *16 )+ ascii[1]; |
awmiller | 0:6834f1402927 | 265 | |
awmiller | 0:6834f1402927 | 266 | |
awmiller | 0:6834f1402927 | 267 | } |
awmiller | 0:6834f1402927 | 268 | |
awmiller | 0:6834f1402927 | 269 | void find_sentral(){ |
awmiller | 0:6834f1402927 | 270 | char inbuff[2],obuff[2]; |
awmiller | 0:6834f1402927 | 271 | obuff[0] = 0x37; |
awmiller | 0:6834f1402927 | 272 | int check[2]; |
awmiller | 0:6834f1402927 | 273 | |
awmiller | 0:6834f1402927 | 274 | check[0] = master.write(0x50, obuff, 1); |
awmiller | 0:6834f1402927 | 275 | check[1] = master.read(0x50, inbuff, 1); |
awmiller | 0:6834f1402927 | 276 | pc.printf("finding sentral... \r\nwrite %s \r\n",check[0] ? "Fail" : "Pass" ); |
awmiller | 0:6834f1402927 | 277 | |
awmiller | 0:6834f1402927 | 278 | pc.printf("read %s \r\n reading back: %X \r\n",check[1] ? "Fail" : "Pass" , inbuff[0]); |
awmiller | 0:6834f1402927 | 279 | |
awmiller | 0:6834f1402927 | 280 | if(!check[0] && !check[1]){ |
awmiller | 0:6834f1402927 | 281 | pc.printf("Sentral Status: \r\n"); |
awmiller | 0:6834f1402927 | 282 | pc.printf("NEEPROM: %d \r\n", (int)((inbuff[0] & 16)>0)); |
awmiller | 0:6834f1402927 | 283 | pc.printf("StbyState: %d \r\n", (int)((inbuff[0] & 8)>0)); |
awmiller | 0:6834f1402927 | 284 | pc.printf("UploadErr: %d \r\n", (int)((inbuff[0] & 4)>0)); |
awmiller | 0:6834f1402927 | 285 | pc.printf("UploadCPT: %d \r\n", (int)((inbuff[0] & 2)>0)); |
awmiller | 0:6834f1402927 | 286 | pc.printf("EEPROMDTC: %d \r\n", (int)((inbuff[0] & 1)>0));} |
awmiller | 0:6834f1402927 | 287 | |
awmiller | 0:6834f1402927 | 288 | //pc.printf("Sentral Status: %X",cmd[0]); |
awmiller | 0:6834f1402927 | 289 | } |
awmiller | 0:6834f1402927 | 290 | /* |
awmiller | 0:6834f1402927 | 291 | void sentral_startup() |
awmiller | 0:6834f1402927 | 292 | { |
awmiller | 0:6834f1402927 | 293 | //reset request : 50.9c.01 |
awmiller | 0:6834f1402927 | 294 | |
awmiller | 0:6834f1402927 | 295 | //readback status, looking for xxxx x01x -- while((byte & 0x06) !=2)) |
awmiller | 0:6834f1402927 | 296 | |
awmiller | 0:6834f1402927 | 297 | wait(100) |
awmiller | 0:6834f1402927 | 298 | |
awmiller | 0:6834f1402927 | 299 | }*/ |
awmiller | 0:6834f1402927 | 300 | //EOL |