sentral tester

Dependencies:   mbed

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?

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