Andrew Miller
/
FRDM_Serial
ak;jglif;awjd
Diff: Test_Routines.cpp
- Revision:
- 4:1e5639a2a3ae
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test_Routines.cpp Fri May 20 17:24:57 2016 +0000 @@ -0,0 +1,274 @@ +#include "mbed.h" +#include "Sentral.h" +#include "Test_Routines.h" + +BusIn GPIOS(PTE4,PTE3,PTE2,PTB11,PTB10,PTB9,PTB8); +Timeout escape; + +int timeout=0; + +void timeit() +{ + timeout =1; + } + +int EV0_test(Serial &pc,I2C &master) +{ + + //Set SA0 to 1 + pc.printf("SA0 set to %d \r\n", Set_SA0(1)); + wait(0.1); + //Startup Sentral at SA0 = 1; + if(!SentralSetup(pc,master)){ + pc.printf("[*{10}Sentral Start-up Failure*] SA1 Failed\r\n"); + return 0; + } + int P=0 , trig =0 ; + //Wait for any pin to fire + do + { + P = GPIOS; + + if(P&&0x40) + trig = 0x40; + if(P&&0x01) + trig = 0x01; + if(P&&0x02) + trig = 0x02; + if(P&&0x04) + trig = 0x04; + if(P&&0x08) + trig = 0x08; + if(P&&0x10) + trig = 0x10; + if(P&&0x20) + trig = 0x20; + } while((!(GPIOS) && (timeout++ < 1000))); + + //Wait for pin to go low again + while(GPIOS & trig); + + if(timeout < 1000) + pc.printf("Trigger: Pin %d \r\n",trig); + else + { + pc.printf("[*{10}GPIO Timeout*] \r\n"); + return 0; + } + + //reset timeout + timeout=0; + + //Check for simultaneity + while( ( GPIOS < 0x7F ) && (timeout < 1000) ) + timeout++; + + if(timeout < 100) + pc.printf("Notice: Pins are simultaneous, check continuity \r\n"); + + //reset triger and timeout + timeout=0; + trig =0; + + //start a timer + escape.attach(&timeit, 10.0); + + //wait for each pin to fire********** + while(!(GPIOS&&0x40))//6 + if(timeout) { trig = -7; break; } + escape.detach(); + escape.attach(&timeit, 10.0); + + while(!(GPIOS&&0x01))//0 + if(timeout) { trig = -1; break; } + escape.detach(); + escape.attach(&timeit, 10.0); + + while(!(GPIOS&&0x02))//1 + if(timeout) { trig = -2; break; } + escape.detach(); + escape.attach(&timeit, 10.0); + + while(!(GPIOS&&0x04))//2 + if(timeout) { trig = -3; break; } + escape.detach(); + escape.attach(&timeit, 10.0); + + while(!(GPIOS&&0x08))//3 + if(timeout){ trig = -4; break; } + escape.detach(); + escape.attach(&timeit, 10.0); + + while(!(GPIOS&&0x10))//4 + if(timeout) { trig = -5; break; } + escape.detach(); + escape.attach(&timeit, 10.0); + + while(!(GPIOS&&0x20))//5 + if(timeout) { trig = -6; break; } + //END SINGLE PIN TEST + + if(!timeout){ + pc.printf("All Pins Fired\r\n"); + //return 1; + } + else + { + pc.printf("Timeout on %d, [*{10}Test FAILED*] \r\n GPIO Failure at SA0 = 1 \r\n", ( trig * (-1) ) - 1 ); + return 0; + } + + + //Set SA0 to 0 + pc.printf("SA0 set to %d \r\n", Set_SA0(0)); + wait(0.1); + //Startup Sentral at SA0 = 0; + if(!SentralSetup(pc,master)){ + pc.printf("[*{10}Sentral Start-up Failure*] SA0 Failed\r\n"); + return 0; + } + + //Wait for any pin to fire + do + { + P = GPIOS; + + if(P&&0x40) + trig = 0x40; + if(P&&0x01) + trig = 0x01; + if(P&&0x02) + trig = 0x02; + if(P&&0x04) + trig = 0x04; + if(P&&0x08) + trig = 0x08; + if(P&&0x10) + trig = 0x10; + if(P&&0x20) + trig = 0x20; + } while((!(GPIOS) && (timeout++ < 1000))); + + //Wait for pin to go low again + while(GPIOS & trig); + + if(timeout < 1000) + pc.printf("Trigger: Pin%d \r\n",trig); + else + { + pc.printf("[*{10}GPIO Timeout*] \r\n"); + return 0; + } + + //reset timeout + timeout=0; + + //Check for simultaneity + while( ( GPIOS < 0x7F ) && (timeout < 1000) ) + timeout++; + + if(timeout < 100) + pc.printf("Notice: Pins are simultaneous, check continuity \r\n"); + + //reset triger and timeout + timeout=0; + trig =0; + + //start a timer + escape.attach(&timeit, 10.0); + + //wait for each pin to fire********** + while(!(GPIOS&&0x40))//6 + if(timeout) { trig = -7; break; } + escape.detach(); + escape.attach(&timeit, 10.0); + + while(!(GPIOS&&0x01))//0 + if(timeout) { trig = -1; break; } + escape.detach(); + escape.attach(&timeit, 10.0); + + while(!(GPIOS&&0x02))//1 + if(timeout) { trig = -2; break; } + escape.detach(); + escape.attach(&timeit, 10.0); + + while(!(GPIOS&&0x04))//2 + if(timeout) { trig = -3; break; } + escape.detach(); + escape.attach(&timeit, 10.0); + + while(!(GPIOS&&0x08))//3 + if(timeout){ trig = -4; break; } + escape.detach(); + escape.attach(&timeit, 10.0); + + while(!(GPIOS&&0x10))//4 + if(timeout) { trig = -5; break; } + escape.detach(); + escape.attach(&timeit, 10.0); + + while(!(GPIOS&&0x20))//5 + if(timeout) { trig = -6; break; } + //END SINGLE PIN TEST + + if(!timeout){ + pc.printf("All Pins Fired\r\n"); + //return 1; + } + else + { + pc.printf("Timeout on %d, [*{10}Test FAILED*] \r\n GPIO Failure at SA0 = 0 \r\n", ( trig * (-1) ) - 1 ); + return 0; + } + + + + + //FINALLY, Test pass through mode + + + return 1; + + + +} + +int PassThroughTest(Serial &pc,I2C &master) +{ + if( !Sentral_pass_through(pc,master) ) + { + return 0; + } + + char cmd[3]; + char chk[3]; + + cmd[0] = 0x00; + cmd[1] = 0x00; + cmd[2] = 0x00; + for(int i = 0xA0; i < 0xB0; i += 2) + { + int check = master.write(i,cmd,2); + + if(check) + pc.printf("."); + //break;//return 0; + else + { + check = master.read(i,chk,3); + + if(check) + pc.printf(".");//break;//return 0; + else + { + pc.printf("\r\n%X,%X,%X \r\n",chk[0],chk[1],chk[2]); + return 1; + } + } + } + return 0; +} + +//EOF +