Firmware development for use with LF21

Dependencies:   USBDevice max32630fthr

Fork of FTHR_USB_serial by Maxim Integrated

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?

UserRevisionLine numberNew 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 }