![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
This is the the starting version of autograder hardwrae
Fork of AutoGrader_HW_01 by
main.cpp@0:440ae480bff2, 2015-08-24 (annotated)
- 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?
User | Revision | Line number | New 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 | } |