Firmware development for use with LF21
Dependencies: USBDevice max32630fthr
Fork of FTHR_USB_serial by
main.cpp@8:e985d3e26b75, 2017-09-07 (annotated)
- Committer:
- nwaskewicz
- Date:
- Thu Sep 07 01:51:21 2017 +0000
- Revision:
- 8:e985d3e26b75
- Parent:
- 6:684c51f32c1d
- Child:
- 9:3c7f27df0b01
test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
switches | 0:60a522ae2e35 | 1 | #include "mbed.h" |
switches | 2:57500e991166 | 2 | #include "max32630fthr.h" |
switches | 1:6923b075c8d7 | 3 | #include "USBSerial.h" |
nwaskewicz | 8:e985d3e26b75 | 4 | //#include "string.h" |
switches | 0:60a522ae2e35 | 5 | |
switches | 1:6923b075c8d7 | 6 | // Hardware serial port over DAPLink |
switches | 2:57500e991166 | 7 | Serial daplink(P2_1, P2_0); |
switches | 1:6923b075c8d7 | 8 | |
switches | 3:601c11238ccb | 9 | // Virtual serial port over USB |
switches | 3:601c11238ccb | 10 | USBSerial microUSB; |
switches | 3:601c11238ccb | 11 | |
nwaskewicz | 8:e985d3e26b75 | 12 | SPI spi(P5_1, P5_2, P5_0); // mosi, miso, sclk |
nwaskewicz | 8:e985d3e26b75 | 13 | DigitalOut spicsb(P4_0); // spi csb line |
nwaskewicz | 8:e985d3e26b75 | 14 | |
nwaskewicz | 8:e985d3e26b75 | 15 | DigitalOut p3_0(P3_0); |
nwaskewicz | 8:e985d3e26b75 | 16 | DigitalOut p3_1(P3_1); |
nwaskewicz | 8:e985d3e26b75 | 17 | DigitalOut p3_2(P3_2); |
nwaskewicz | 8:e985d3e26b75 | 18 | DigitalOut p3_3(P3_3); |
nwaskewicz | 8:e985d3e26b75 | 19 | DigitalOut p5_3(P5_3); |
nwaskewicz | 8:e985d3e26b75 | 20 | DigitalOut p5_4(P5_4); |
nwaskewicz | 8:e985d3e26b75 | 21 | DigitalOut p5_5(P5_5); |
nwaskewicz | 8:e985d3e26b75 | 22 | DigitalOut p5_6(P5_6); |
nwaskewicz | 8:e985d3e26b75 | 23 | |
switches | 2:57500e991166 | 24 | DigitalOut rLED(LED1); |
switches | 2:57500e991166 | 25 | DigitalOut gLED(LED2); |
switches | 2:57500e991166 | 26 | DigitalOut bLED(LED3); |
nwaskewicz | 8:e985d3e26b75 | 27 | MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3); |
nwaskewicz | 8:e985d3e26b75 | 28 | |
nwaskewicz | 8:e985d3e26b75 | 29 | int ascii(char a, char b); |
switches | 0:60a522ae2e35 | 30 | |
switches | 0:60a522ae2e35 | 31 | // main() runs in its own thread in the OS |
switches | 0:60a522ae2e35 | 32 | // (note the calls to Thread::wait below for delays) |
switches | 0:60a522ae2e35 | 33 | int main() |
switches | 0:60a522ae2e35 | 34 | { |
nwaskewicz | 8:e985d3e26b75 | 35 | char buf[10]; |
nwaskewicz | 8:e985d3e26b75 | 36 | |
nwaskewicz | 8:e985d3e26b75 | 37 | gLED = LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 38 | bLED = LED_ON; |
switches | 2:57500e991166 | 39 | rLED = LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 40 | spicsb = 1; |
nwaskewicz | 8:e985d3e26b75 | 41 | pegasus.max14690.ldo3SetVoltage(3600); |
nwaskewicz | 8:e985d3e26b75 | 42 | wait(1.0); |
nwaskewicz | 8:e985d3e26b75 | 43 | |
nwaskewicz | 8:e985d3e26b75 | 44 | p3_0 = 0; |
nwaskewicz | 8:e985d3e26b75 | 45 | p3_1 = 1; |
nwaskewicz | 8:e985d3e26b75 | 46 | |
nwaskewicz | 8:e985d3e26b75 | 47 | p3_2 = 1; |
nwaskewicz | 8:e985d3e26b75 | 48 | p3_3 = 0; |
nwaskewicz | 8:e985d3e26b75 | 49 | |
nwaskewicz | 8:e985d3e26b75 | 50 | p5_3 = 1; |
nwaskewicz | 8:e985d3e26b75 | 51 | p5_4 = 0; |
nwaskewicz | 8:e985d3e26b75 | 52 | |
nwaskewicz | 8:e985d3e26b75 | 53 | p5_5 = 1; |
nwaskewicz | 8:e985d3e26b75 | 54 | p5_6 = 1; |
nwaskewicz | 8:e985d3e26b75 | 55 | |
switches | 1:6923b075c8d7 | 56 | while(1) { |
nwaskewicz | 8:e985d3e26b75 | 57 | |
nwaskewicz | 8:e985d3e26b75 | 58 | microUSB.scanf("%s", buf); |
nwaskewicz | 8:e985d3e26b75 | 59 | |
nwaskewicz | 8:e985d3e26b75 | 60 | // ping command, responds with pong |
nwaskewicz | 8:e985d3e26b75 | 61 | if(buf[0]=='p' && buf[1]=='i' && buf[2]=='n' && buf[3]=='g') { |
nwaskewicz | 8:e985d3e26b75 | 62 | microUSB.printf("pong\r\n"); |
nwaskewicz | 8:e985d3e26b75 | 63 | gLED=LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 64 | wait(0.01); |
nwaskewicz | 8:e985d3e26b75 | 65 | gLED=LED_ON; |
nwaskewicz | 8:e985d3e26b75 | 66 | wait(0.01); |
nwaskewicz | 8:e985d3e26b75 | 67 | gLED=LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 68 | } |
nwaskewicz | 8:e985d3e26b75 | 69 | // spi write command: spiw.addr.data |
nwaskewicz | 8:e985d3e26b75 | 70 | // addr and data in hex |
nwaskewicz | 8:e985d3e26b75 | 71 | else if (buf[0]=='s' && buf[1]=='p' && buf[2]=='i' && buf[3]=='w') { |
nwaskewicz | 8:e985d3e26b75 | 72 | int response = 0; |
nwaskewicz | 8:e985d3e26b75 | 73 | int payload[2]; |
nwaskewicz | 8:e985d3e26b75 | 74 | payload[0] = ascii((int)buf[5],(int)buf[6]); |
nwaskewicz | 8:e985d3e26b75 | 75 | payload[1] = ascii((int)buf[8],(int)buf[9]); |
nwaskewicz | 8:e985d3e26b75 | 76 | spicsb = 0; |
nwaskewicz | 8:e985d3e26b75 | 77 | response = spi.write(payload[0]); |
nwaskewicz | 8:e985d3e26b75 | 78 | response = spi.write(payload[1]); |
nwaskewicz | 8:e985d3e26b75 | 79 | spicsb = 1; |
nwaskewicz | 8:e985d3e26b75 | 80 | microUSB.printf("ack\r\n"); |
nwaskewicz | 8:e985d3e26b75 | 81 | gLED=LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 82 | wait(0.01); |
nwaskewicz | 8:e985d3e26b75 | 83 | gLED=LED_ON; |
nwaskewicz | 8:e985d3e26b75 | 84 | wait(0.01); |
nwaskewicz | 8:e985d3e26b75 | 85 | gLED=LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 86 | } |
nwaskewicz | 8:e985d3e26b75 | 87 | // spi read command: spir.addr |
nwaskewicz | 8:e985d3e26b75 | 88 | else if (buf[0]=='s' && buf[1]=='p' && buf[2]=='i' && buf[3]=='r') { |
nwaskewicz | 8:e985d3e26b75 | 89 | int response = 0; |
nwaskewicz | 8:e985d3e26b75 | 90 | int payload; |
nwaskewicz | 8:e985d3e26b75 | 91 | payload = ascii((int)buf[5],(int)buf[6]); |
nwaskewicz | 8:e985d3e26b75 | 92 | spicsb = 0; |
nwaskewicz | 8:e985d3e26b75 | 93 | response = spi.write(payload); |
nwaskewicz | 8:e985d3e26b75 | 94 | spicsb = 1; |
nwaskewicz | 8:e985d3e26b75 | 95 | microUSB.printf("ack.%i\r\n", response); |
nwaskewicz | 8:e985d3e26b75 | 96 | gLED=LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 97 | wait(0.01); |
nwaskewicz | 8:e985d3e26b75 | 98 | gLED=LED_ON; |
nwaskewicz | 8:e985d3e26b75 | 99 | wait(0.01); |
nwaskewicz | 8:e985d3e26b75 | 100 | gLED=LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 101 | } |
nwaskewicz | 8:e985d3e26b75 | 102 | // digital pin p5_5 |
nwaskewicz | 8:e985d3e26b75 | 103 | else if (buf[0]=='p' && buf[1]=='5' && buf[2]=='_' && buf[3]=='5') { |
nwaskewicz | 8:e985d3e26b75 | 104 | if (buf[5]=='1') p5_5 = 1; |
nwaskewicz | 8:e985d3e26b75 | 105 | else p5_5 = 0; |
nwaskewicz | 8:e985d3e26b75 | 106 | microUSB.printf("ack\r\n"); |
nwaskewicz | 8:e985d3e26b75 | 107 | gLED=LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 108 | wait(0.01); |
nwaskewicz | 8:e985d3e26b75 | 109 | gLED=LED_ON; |
nwaskewicz | 8:e985d3e26b75 | 110 | wait(0.01); |
nwaskewicz | 8:e985d3e26b75 | 111 | gLED=LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 112 | } |
nwaskewicz | 8:e985d3e26b75 | 113 | // digital pin p5_6 |
nwaskewicz | 8:e985d3e26b75 | 114 | else if (buf[0]=='p' && buf[1]=='5' && buf[2]=='_' && buf[3]=='6') { |
nwaskewicz | 8:e985d3e26b75 | 115 | if (buf[5]=='1') p5_6 = 1; |
nwaskewicz | 8:e985d3e26b75 | 116 | else p5_6 = 0; |
nwaskewicz | 8:e985d3e26b75 | 117 | microUSB.printf("ack\r\n"); |
nwaskewicz | 8:e985d3e26b75 | 118 | gLED=LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 119 | wait(0.01); |
nwaskewicz | 8:e985d3e26b75 | 120 | gLED=LED_ON; |
nwaskewicz | 8:e985d3e26b75 | 121 | wait(0.01); |
nwaskewicz | 8:e985d3e26b75 | 122 | gLED=LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 123 | } |
nwaskewicz | 8:e985d3e26b75 | 124 | // digital pin p5_3 |
nwaskewicz | 8:e985d3e26b75 | 125 | else if (buf[0]=='p' && buf[1]=='5' && buf[2]=='_' && buf[3]=='3') { |
nwaskewicz | 8:e985d3e26b75 | 126 | if (buf[5]=='1') p5_3 = 1; |
nwaskewicz | 8:e985d3e26b75 | 127 | else p5_3 = 0; |
nwaskewicz | 8:e985d3e26b75 | 128 | microUSB.printf("ack\r\n"); |
nwaskewicz | 8:e985d3e26b75 | 129 | gLED=LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 130 | wait(0.01); |
nwaskewicz | 8:e985d3e26b75 | 131 | gLED=LED_ON; |
nwaskewicz | 8:e985d3e26b75 | 132 | wait(0.01); |
nwaskewicz | 8:e985d3e26b75 | 133 | gLED=LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 134 | } |
nwaskewicz | 8:e985d3e26b75 | 135 | // digital pin p5_4 |
nwaskewicz | 8:e985d3e26b75 | 136 | else if (buf[0]=='p' && buf[1]=='5' && buf[2]=='_' && buf[3]=='4') { |
nwaskewicz | 8:e985d3e26b75 | 137 | if (buf[5]=='1') p5_4 = 1; |
nwaskewicz | 8:e985d3e26b75 | 138 | else p5_4 = 0; |
nwaskewicz | 8:e985d3e26b75 | 139 | microUSB.printf("ack\r\n"); |
nwaskewicz | 8:e985d3e26b75 | 140 | gLED=LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 141 | wait(0.01); |
nwaskewicz | 8:e985d3e26b75 | 142 | gLED=LED_ON; |
nwaskewicz | 8:e985d3e26b75 | 143 | wait(0.01); |
nwaskewicz | 8:e985d3e26b75 | 144 | gLED=LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 145 | } |
nwaskewicz | 8:e985d3e26b75 | 146 | // digital pin p3_1 |
nwaskewicz | 8:e985d3e26b75 | 147 | else if (buf[0]=='p' && buf[1]=='3' && buf[2]=='_' && buf[3]=='1') { |
nwaskewicz | 8:e985d3e26b75 | 148 | if (buf[5]=='1') p3_1 = 1; |
nwaskewicz | 8:e985d3e26b75 | 149 | else p3_1 = 0; |
nwaskewicz | 8:e985d3e26b75 | 150 | microUSB.printf("ack\r\n"); |
nwaskewicz | 8:e985d3e26b75 | 151 | gLED=LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 152 | wait(0.01); |
nwaskewicz | 8:e985d3e26b75 | 153 | gLED=LED_ON; |
nwaskewicz | 8:e985d3e26b75 | 154 | wait(0.01); |
nwaskewicz | 8:e985d3e26b75 | 155 | gLED=LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 156 | } |
nwaskewicz | 8:e985d3e26b75 | 157 | // digital pin p3_0 |
nwaskewicz | 8:e985d3e26b75 | 158 | else if (buf[0]=='p' && buf[1]=='3' && buf[2]=='_' && buf[3]=='0') { |
nwaskewicz | 8:e985d3e26b75 | 159 | if (buf[5]=='1') p3_0 = 1; |
nwaskewicz | 8:e985d3e26b75 | 160 | else p3_0 = 0; |
nwaskewicz | 8:e985d3e26b75 | 161 | microUSB.printf("ack\r\n"); |
nwaskewicz | 8:e985d3e26b75 | 162 | gLED=LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 163 | wait(0.01); |
nwaskewicz | 8:e985d3e26b75 | 164 | gLED=LED_ON; |
nwaskewicz | 8:e985d3e26b75 | 165 | wait(0.01); |
nwaskewicz | 8:e985d3e26b75 | 166 | gLED=LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 167 | } |
nwaskewicz | 8:e985d3e26b75 | 168 | // digital pin p3_3 |
nwaskewicz | 8:e985d3e26b75 | 169 | else if (buf[0]=='p' && buf[1]=='3' && buf[2]=='_' && buf[3]=='3') { |
nwaskewicz | 8:e985d3e26b75 | 170 | if (buf[5]=='1') p3_3 = 1; |
nwaskewicz | 8:e985d3e26b75 | 171 | else p3_3 = 0; |
nwaskewicz | 8:e985d3e26b75 | 172 | microUSB.printf("ack\r\n"); |
nwaskewicz | 8:e985d3e26b75 | 173 | gLED=LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 174 | wait(0.01); |
nwaskewicz | 8:e985d3e26b75 | 175 | gLED=LED_ON; |
nwaskewicz | 8:e985d3e26b75 | 176 | wait(0.01); |
nwaskewicz | 8:e985d3e26b75 | 177 | gLED=LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 178 | } |
nwaskewicz | 8:e985d3e26b75 | 179 | // digital pin p3_2 |
nwaskewicz | 8:e985d3e26b75 | 180 | else if (buf[0]=='p' && buf[1]=='3' && buf[2]=='_' && buf[3]=='2') { |
nwaskewicz | 8:e985d3e26b75 | 181 | if (buf[5]=='1') p3_2 = 1; |
nwaskewicz | 8:e985d3e26b75 | 182 | else p3_2 = 0; |
nwaskewicz | 8:e985d3e26b75 | 183 | microUSB.printf("ack\r\n"); |
nwaskewicz | 8:e985d3e26b75 | 184 | gLED=LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 185 | wait(0.01); |
nwaskewicz | 8:e985d3e26b75 | 186 | gLED=LED_ON; |
nwaskewicz | 8:e985d3e26b75 | 187 | wait(0.01); |
nwaskewicz | 8:e985d3e26b75 | 188 | gLED=LED_OFF; |
nwaskewicz | 8:e985d3e26b75 | 189 | } |
switches | 0:60a522ae2e35 | 190 | } |
nwaskewicz | 8:e985d3e26b75 | 191 | |
switches | 0:60a522ae2e35 | 192 | } |
switches | 0:60a522ae2e35 | 193 | |
nwaskewicz | 8:e985d3e26b75 | 194 | int ascii(char a, char b) |
nwaskewicz | 8:e985d3e26b75 | 195 | { |
nwaskewicz | 8:e985d3e26b75 | 196 | int val1 = 0; |
nwaskewicz | 8:e985d3e26b75 | 197 | int val2 = 0; |
nwaskewicz | 8:e985d3e26b75 | 198 | int val = 0; |
nwaskewicz | 8:e985d3e26b75 | 199 | if(a>64 && a<71) |
nwaskewicz | 8:e985d3e26b75 | 200 | { |
nwaskewicz | 8:e985d3e26b75 | 201 | val1 = (int)a-55; |
nwaskewicz | 8:e985d3e26b75 | 202 | } |
nwaskewicz | 8:e985d3e26b75 | 203 | else if(a>96 && a<103) |
nwaskewicz | 8:e985d3e26b75 | 204 | { |
nwaskewicz | 8:e985d3e26b75 | 205 | val1 = (int)a-87; |
nwaskewicz | 8:e985d3e26b75 | 206 | } |
nwaskewicz | 8:e985d3e26b75 | 207 | else val1 = (int)a-48; |
nwaskewicz | 8:e985d3e26b75 | 208 | |
nwaskewicz | 8:e985d3e26b75 | 209 | if(b>64 && b<71) |
nwaskewicz | 8:e985d3e26b75 | 210 | { |
nwaskewicz | 8:e985d3e26b75 | 211 | val2 = (int)b-55; |
nwaskewicz | 8:e985d3e26b75 | 212 | } |
nwaskewicz | 8:e985d3e26b75 | 213 | else if(b>96 && b<103) |
nwaskewicz | 8:e985d3e26b75 | 214 | { |
nwaskewicz | 8:e985d3e26b75 | 215 | val2 = (int)b-87; |
nwaskewicz | 8:e985d3e26b75 | 216 | } |
nwaskewicz | 8:e985d3e26b75 | 217 | else val2 = (int)b-48; |
nwaskewicz | 8:e985d3e26b75 | 218 | |
nwaskewicz | 8:e985d3e26b75 | 219 | val=16*val1+val2; |
nwaskewicz | 8:e985d3e26b75 | 220 | |
nwaskewicz | 8:e985d3e26b75 | 221 | return (char)val; |
nwaskewicz | 8:e985d3e26b75 | 222 | } |