This is the the starting version of autograder hardwrae

Dependencies:   mbed

Fork of AutoGrader_HW_01 by Gopal Nair

Committer:
naray23
Date:
Mon Aug 24 01:36:23 2015 +0000
Revision:
0:440ae480bff2
Child:
1:97884b766b51
This is  the starting version of Auto Grader Hardware

Who changed what in which revision?

UserRevisionLine numberNew contents of line
naray23 0:440ae480bff2 1 #include "mbed.h"
naray23 0:440ae480bff2 2
naray23 0:440ae480bff2 3 Ticker Read_Port;
naray23 0:440ae480bff2 4 PortIn DataIn(PortC, 0x000000FF); // p21-p26
naray23 0:440ae480bff2 5 DigitalOut Reset(PTC12);
naray23 0:440ae480bff2 6 Serial Comm(USBTX, USBRX);
naray23 0:440ae480bff2 7
naray23 0:440ae480bff2 8 #define RX_BUFF_SIZE 64
naray23 0:440ae480bff2 9
naray23 0:440ae480bff2 10 int rx_write_ptr=0;
naray23 0:440ae480bff2 11 int rx_read_ptr=0;
naray23 0:440ae480bff2 12 int RX_buff[RX_BUFF_SIZE];
naray23 0:440ae480bff2 13
naray23 0:440ae480bff2 14 int Data_avl;
naray23 0:440ae480bff2 15 int Port_Data;
naray23 0:440ae480bff2 16
naray23 0:440ae480bff2 17 void Serial_Read_callback()
naray23 0:440ae480bff2 18 {
naray23 0:440ae480bff2 19 RX_buff[rx_write_ptr++]=Comm.getc();
naray23 0:440ae480bff2 20 if(rx_write_ptr >= RX_BUFF_SIZE)
naray23 0:440ae480bff2 21 rx_write_ptr=0;
naray23 0:440ae480bff2 22
naray23 0:440ae480bff2 23 }
naray23 0:440ae480bff2 24
naray23 0:440ae480bff2 25 int Serial_Read()
naray23 0:440ae480bff2 26 {
naray23 0:440ae480bff2 27 int temp;
naray23 0:440ae480bff2 28
naray23 0:440ae480bff2 29 temp=RX_buff[rx_read_ptr++];
naray23 0:440ae480bff2 30 if(rx_read_ptr >= RX_BUFF_SIZE)
naray23 0:440ae480bff2 31 rx_read_ptr=0;
naray23 0:440ae480bff2 32 return temp;
naray23 0:440ae480bff2 33 }
naray23 0:440ae480bff2 34
naray23 0:440ae480bff2 35 int Serial_Available()
naray23 0:440ae480bff2 36 {
naray23 0:440ae480bff2 37 if(rx_read_ptr != rx_write_ptr)
naray23 0:440ae480bff2 38 return 1;
naray23 0:440ae480bff2 39 else
naray23 0:440ae480bff2 40 return 0;
naray23 0:440ae480bff2 41 }
naray23 0:440ae480bff2 42
naray23 0:440ae480bff2 43 void Read_Port_callback()
naray23 0:440ae480bff2 44 {
naray23 0:440ae480bff2 45 Port_Data=DataIn.read();
naray23 0:440ae480bff2 46 Data_avl=1;
naray23 0:440ae480bff2 47 }
naray23 0:440ae480bff2 48
naray23 0:440ae480bff2 49 int main()
naray23 0:440ae480bff2 50 {
naray23 0:440ae480bff2 51 int ch;
naray23 0:440ae480bff2 52 int state=0;
naray23 0:440ae480bff2 53 int cmd;
naray23 0:440ae480bff2 54 int new_frame;
naray23 0:440ae480bff2 55 int run_debug;
naray23 0:440ae480bff2 56 Comm.baud(115200);
naray23 0:440ae480bff2 57 Comm.attach(&Serial_Read_callback);
naray23 0:440ae480bff2 58
naray23 0:440ae480bff2 59 while(true)
naray23 0:440ae480bff2 60 {
naray23 0:440ae480bff2 61 if(Serial_Available())
naray23 0:440ae480bff2 62 {
naray23 0:440ae480bff2 63 ch=Serial_Read();
naray23 0:440ae480bff2 64 switch (state)
naray23 0:440ae480bff2 65 {
naray23 0:440ae480bff2 66 case 0: if(ch == '<')
naray23 0:440ae480bff2 67 state++;
naray23 0:440ae480bff2 68 break;
naray23 0:440ae480bff2 69
naray23 0:440ae480bff2 70 case 1: cmd = ch;
naray23 0:440ae480bff2 71 state++;
naray23 0:440ae480bff2 72 break;
naray23 0:440ae480bff2 73
naray23 0:440ae480bff2 74 case 2: if(ch == '>')
naray23 0:440ae480bff2 75 {
naray23 0:440ae480bff2 76 state=0;
naray23 0:440ae480bff2 77 new_frame =1;
naray23 0:440ae480bff2 78 }
naray23 0:440ae480bff2 79 break;
naray23 0:440ae480bff2 80
naray23 0:440ae480bff2 81
naray23 0:440ae480bff2 82 }//switch
naray23 0:440ae480bff2 83
naray23 0:440ae480bff2 84
naray23 0:440ae480bff2 85 }//Serial_available
naray23 0:440ae480bff2 86
naray23 0:440ae480bff2 87 if(new_frame)
naray23 0:440ae480bff2 88 {
naray23 0:440ae480bff2 89 new_frame =0;
naray23 0:440ae480bff2 90
naray23 0:440ae480bff2 91 if(cmd == 'P')
naray23 0:440ae480bff2 92 {
naray23 0:440ae480bff2 93 Read_Port.attach(&Read_Port_callback,0.1);
naray23 0:440ae480bff2 94 Reset=0;
naray23 0:440ae480bff2 95 wait(0.01);
naray23 0:440ae480bff2 96 Reset=1;
naray23 0:440ae480bff2 97 run_debug=1;
naray23 0:440ae480bff2 98 }
naray23 0:440ae480bff2 99 else if(cmd == 'X')
naray23 0:440ae480bff2 100 {
naray23 0:440ae480bff2 101 Read_Port.detach();
naray23 0:440ae480bff2 102 run_debug=0;
naray23 0:440ae480bff2 103 }
naray23 0:440ae480bff2 104
naray23 0:440ae480bff2 105 }
naray23 0:440ae480bff2 106 if(run_debug)
naray23 0:440ae480bff2 107 {
naray23 0:440ae480bff2 108 if(Data_avl)
naray23 0:440ae480bff2 109 {
naray23 0:440ae480bff2 110 Comm.printf("<%d>",Port_Data);
naray23 0:440ae480bff2 111 }
naray23 0:440ae480bff2 112 }
naray23 0:440ae480bff2 113
naray23 0:440ae480bff2 114 }//while
naray23 0:440ae480bff2 115 }