This is the the starting version of autograder hardwrae

Dependencies:   mbed

Fork of AutoGrader_HW_01 by Gopal Nair

Committer:
naray23
Date:
Mon Aug 31 12:46:13 2015 +0000
Revision:
1:97884b766b51
Parent:
0:440ae480bff2
Child:
2:b3286d232452
This is the autograder demo code developed by gopal and ganesh

Who changed what in which revision?

UserRevisionLine numberNew contents of line
naray23 0:440ae480bff2 1 #include "mbed.h"
naray23 0:440ae480bff2 2
naray23 1:97884b766b51 3 Ticker Read_Port; //Timer Polling
naray23 1:97884b766b51 4
naray23 0:440ae480bff2 5 PortIn DataIn(PortC, 0x000000FF); // p21-p26
naray23 1:97884b766b51 6 DigitalOut Reset(PTC12); //ptc12 reset
naray23 1:97884b766b51 7 Serial Comm(USBTX, USBRX);
naray23 0:440ae480bff2 8
naray23 0:440ae480bff2 9 #define RX_BUFF_SIZE 64
naray23 0:440ae480bff2 10
naray23 0:440ae480bff2 11 int rx_write_ptr=0;
naray23 0:440ae480bff2 12 int rx_read_ptr=0;
naray23 0:440ae480bff2 13 int RX_buff[RX_BUFF_SIZE];
naray23 0:440ae480bff2 14
naray23 0:440ae480bff2 15 int Data_avl;
naray23 0:440ae480bff2 16 int Port_Data;
naray23 1:97884b766b51 17 int Port_Data_prev=0;
naray23 1:97884b766b51 18 int Time_cntr=0;
naray23 0:440ae480bff2 19
naray23 0:440ae480bff2 20 void Serial_Read_callback()
naray23 0:440ae480bff2 21 {
naray23 0:440ae480bff2 22 RX_buff[rx_write_ptr++]=Comm.getc();
naray23 0:440ae480bff2 23 if(rx_write_ptr >= RX_BUFF_SIZE)
naray23 0:440ae480bff2 24 rx_write_ptr=0;
naray23 0:440ae480bff2 25
naray23 0:440ae480bff2 26 }
naray23 0:440ae480bff2 27
naray23 0:440ae480bff2 28 int Serial_Read()
naray23 0:440ae480bff2 29 {
naray23 0:440ae480bff2 30 int temp;
naray23 0:440ae480bff2 31
naray23 0:440ae480bff2 32 temp=RX_buff[rx_read_ptr++];
naray23 0:440ae480bff2 33 if(rx_read_ptr >= RX_BUFF_SIZE)
naray23 0:440ae480bff2 34 rx_read_ptr=0;
naray23 0:440ae480bff2 35 return temp;
naray23 0:440ae480bff2 36 }
naray23 0:440ae480bff2 37
naray23 0:440ae480bff2 38 int Serial_Available()
naray23 0:440ae480bff2 39 {
naray23 0:440ae480bff2 40 if(rx_read_ptr != rx_write_ptr)
naray23 0:440ae480bff2 41 return 1;
naray23 0:440ae480bff2 42 else
naray23 0:440ae480bff2 43 return 0;
naray23 0:440ae480bff2 44 }
naray23 0:440ae480bff2 45
naray23 0:440ae480bff2 46 void Read_Port_callback()
naray23 0:440ae480bff2 47 {
naray23 0:440ae480bff2 48 Port_Data=DataIn.read();
naray23 1:97884b766b51 49 if((Port_Data ^ Port_Data_prev) != 0)
naray23 1:97884b766b51 50 {
naray23 1:97884b766b51 51 Data_avl=1;
naray23 1:97884b766b51 52 Port_Data_prev=Port_Data;
naray23 1:97884b766b51 53 }
naray23 1:97884b766b51 54 Time_cntr++;
naray23 0:440ae480bff2 55 }
naray23 0:440ae480bff2 56
naray23 0:440ae480bff2 57 int main()
naray23 0:440ae480bff2 58 {
naray23 0:440ae480bff2 59 int ch;
naray23 0:440ae480bff2 60 int state=0;
naray23 1:97884b766b51 61 int cmd=0;;
naray23 1:97884b766b51 62 int paramval[3][3];
naray23 1:97884b766b51 63 int paramstate=0;
naray23 1:97884b766b51 64 int paramdigcnt=0;
naray23 1:97884b766b51 65 int new_frame=0;
naray23 1:97884b766b51 66 int run_debug=0;
naray23 1:97884b766b51 67
naray23 1:97884b766b51 68 float scan_time;
naray23 0:440ae480bff2 69 Comm.baud(115200);
naray23 0:440ae480bff2 70 Comm.attach(&Serial_Read_callback);
naray23 0:440ae480bff2 71
naray23 0:440ae480bff2 72 while(true)
naray23 0:440ae480bff2 73 {
naray23 0:440ae480bff2 74 if(Serial_Available())
naray23 0:440ae480bff2 75 {
naray23 0:440ae480bff2 76 ch=Serial_Read();
naray23 1:97884b766b51 77 Comm.printf("%c",ch,state);
naray23 0:440ae480bff2 78 switch (state)
naray23 0:440ae480bff2 79 {
naray23 0:440ae480bff2 80 case 0: if(ch == '<')
naray23 1:97884b766b51 81 {
naray23 0:440ae480bff2 82 state++;
naray23 1:97884b766b51 83 paramstate=0;;
naray23 1:97884b766b51 84 }
naray23 1:97884b766b51 85
naray23 0:440ae480bff2 86 break;
naray23 0:440ae480bff2 87
naray23 0:440ae480bff2 88 case 1: cmd = ch;
naray23 0:440ae480bff2 89 state++;
naray23 0:440ae480bff2 90 break;
naray23 0:440ae480bff2 91
naray23 1:97884b766b51 92 case 2: if(ch == ',')
naray23 1:97884b766b51 93 {
naray23 1:97884b766b51 94 paramstate++;
naray23 1:97884b766b51 95 paramdigcnt=2;
naray23 1:97884b766b51 96 }
naray23 1:97884b766b51 97 else if(ch == '>')
naray23 0:440ae480bff2 98 {
naray23 0:440ae480bff2 99 state=0;
naray23 0:440ae480bff2 100 new_frame =1;
naray23 1:97884b766b51 101
naray23 1:97884b766b51 102 }
naray23 1:97884b766b51 103 else
naray23 1:97884b766b51 104 {
naray23 1:97884b766b51 105 paramval[paramstate-1][paramdigcnt--]=ch-'0';
naray23 0:440ae480bff2 106 }
naray23 0:440ae480bff2 107 break;
naray23 0:440ae480bff2 108
naray23 0:440ae480bff2 109
naray23 0:440ae480bff2 110 }//switch
naray23 0:440ae480bff2 111
naray23 0:440ae480bff2 112
naray23 0:440ae480bff2 113 }//Serial_available
naray23 0:440ae480bff2 114
naray23 0:440ae480bff2 115 if(new_frame)
naray23 0:440ae480bff2 116 {
naray23 1:97884b766b51 117 Comm.printf("\n\rStarted polling Command=%c \n\r",cmd);
naray23 0:440ae480bff2 118 new_frame =0;
naray23 1:97884b766b51 119 Port_Data_prev=0;
naray23 1:97884b766b51 120 Time_cntr=0;
naray23 0:440ae480bff2 121 if(cmd == 'P')
naray23 0:440ae480bff2 122 {
naray23 1:97884b766b51 123 scan_time= (paramval[0][0]-+paramval[0][1]* 10 + paramval[0][2] * 100)*0.01;
naray23 1:97884b766b51 124 Comm.printf("Scan Time %f mS \n\r",scan_time*1000);
naray23 1:97884b766b51 125 Read_Port.attach(&Read_Port_callback,scan_time);
naray23 0:440ae480bff2 126 Reset=0;
naray23 0:440ae480bff2 127 wait(0.01);
naray23 0:440ae480bff2 128 Reset=1;
naray23 0:440ae480bff2 129 run_debug=1;
naray23 0:440ae480bff2 130 }
naray23 0:440ae480bff2 131 else if(cmd == 'X')
naray23 0:440ae480bff2 132 {
naray23 0:440ae480bff2 133 Read_Port.detach();
naray23 0:440ae480bff2 134 run_debug=0;
naray23 0:440ae480bff2 135 }
naray23 0:440ae480bff2 136
naray23 0:440ae480bff2 137 }
naray23 0:440ae480bff2 138 if(run_debug)
naray23 0:440ae480bff2 139 {
naray23 0:440ae480bff2 140 if(Data_avl)
naray23 0:440ae480bff2 141 {
naray23 1:97884b766b51 142 Comm.printf("<%.4X,%.2X>\n\r",Time_cntr,Port_Data);
naray23 1:97884b766b51 143 Data_avl=0;
naray23 1:97884b766b51 144 Time_cntr=0;
naray23 0:440ae480bff2 145 }
naray23 0:440ae480bff2 146 }
naray23 0:440ae480bff2 147
naray23 0:440ae480bff2 148 }//while
naray23 0:440ae480bff2 149 }