Firmware development for use with LF21

Dependencies:   USBDevice max32630fthr

Fork of FTHR_USB_serial by Maxim Integrated

main.cpp

Committer:
nwaskewicz
Date:
2017-09-07
Revision:
8:e985d3e26b75
Parent:
6:684c51f32c1d
Child:
9:3c7f27df0b01

File content as of revision 8:e985d3e26b75:

#include "mbed.h"
#include "max32630fthr.h"
#include "USBSerial.h"
//#include "string.h"

// Hardware serial port over DAPLink
Serial daplink(P2_1, P2_0);

// Virtual serial port over USB
USBSerial microUSB;

SPI spi(P5_1, P5_2, P5_0); // mosi, miso, sclk
DigitalOut spicsb(P4_0); // spi csb line

DigitalOut p3_0(P3_0);
DigitalOut p3_1(P3_1);
DigitalOut p3_2(P3_2);
DigitalOut p3_3(P3_3);
DigitalOut p5_3(P5_3);
DigitalOut p5_4(P5_4);
DigitalOut p5_5(P5_5);
DigitalOut p5_6(P5_6);

DigitalOut rLED(LED1);
DigitalOut gLED(LED2);
DigitalOut bLED(LED3);
MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);

int ascii(char a, char b);

// main() runs in its own thread in the OS
// (note the calls to Thread::wait below for delays)
int main()
{
    char buf[10];
    
    gLED = LED_OFF;
    bLED = LED_ON;
    rLED = LED_OFF;
    spicsb = 1;
    pegasus.max14690.ldo3SetVoltage(3600);
    wait(1.0);
    
    p3_0 = 0;
    p3_1 = 1;
    
    p3_2 = 1;
    p3_3 = 0;
    
    p5_3 = 1;
    p5_4 = 0;
    
    p5_5 = 1;
    p5_6 = 1;
    
    while(1) {
        
        microUSB.scanf("%s", buf);
        
        // ping command, responds with pong
        if(buf[0]=='p' && buf[1]=='i' && buf[2]=='n' && buf[3]=='g') {
            microUSB.printf("pong\r\n");
            gLED=LED_OFF;
            wait(0.01);
            gLED=LED_ON;
            wait(0.01);
            gLED=LED_OFF;
        }
        // spi write command: spiw.addr.data
        // addr and data in hex
        else if (buf[0]=='s' && buf[1]=='p' && buf[2]=='i' && buf[3]=='w') {
            int response = 0;
            int payload[2];
            payload[0] = ascii((int)buf[5],(int)buf[6]);
            payload[1] = ascii((int)buf[8],(int)buf[9]);
            spicsb = 0;
            response = spi.write(payload[0]);
            response = spi.write(payload[1]);
            spicsb = 1;
            microUSB.printf("ack\r\n");
            gLED=LED_OFF;
            wait(0.01);
            gLED=LED_ON;
            wait(0.01);
            gLED=LED_OFF;
        }
        // spi read command: spir.addr
        else if (buf[0]=='s' && buf[1]=='p' && buf[2]=='i' && buf[3]=='r') {
            int response = 0;
            int payload;
            payload = ascii((int)buf[5],(int)buf[6]);
            spicsb = 0;
            response = spi.write(payload);
            spicsb = 1;
            microUSB.printf("ack.%i\r\n", response);
            gLED=LED_OFF;
            wait(0.01);
            gLED=LED_ON;
            wait(0.01);
            gLED=LED_OFF;
        }
        // digital pin p5_5
        else if (buf[0]=='p' && buf[1]=='5' && buf[2]=='_' && buf[3]=='5') {
            if (buf[5]=='1') p5_5 = 1;
            else p5_5 = 0;
            microUSB.printf("ack\r\n");
            gLED=LED_OFF;
            wait(0.01);
            gLED=LED_ON;
            wait(0.01);
            gLED=LED_OFF;
        }
        // digital pin p5_6
        else if (buf[0]=='p' && buf[1]=='5' && buf[2]=='_' && buf[3]=='6') {
            if (buf[5]=='1') p5_6 = 1;
            else p5_6 = 0;
            microUSB.printf("ack\r\n");
            gLED=LED_OFF;
            wait(0.01);
            gLED=LED_ON;
            wait(0.01);
            gLED=LED_OFF;
        }
        // digital pin p5_3
        else if (buf[0]=='p' && buf[1]=='5' && buf[2]=='_' && buf[3]=='3') {
            if (buf[5]=='1') p5_3 = 1;
            else p5_3 = 0;
            microUSB.printf("ack\r\n");
            gLED=LED_OFF;
            wait(0.01);
            gLED=LED_ON;
            wait(0.01);
            gLED=LED_OFF;
        }
        // digital pin p5_4
        else if (buf[0]=='p' && buf[1]=='5' && buf[2]=='_' && buf[3]=='4') {
            if (buf[5]=='1') p5_4 = 1;
            else p5_4 = 0;
            microUSB.printf("ack\r\n");
            gLED=LED_OFF;
            wait(0.01);
            gLED=LED_ON;
            wait(0.01);
            gLED=LED_OFF;
        }
        // digital pin p3_1
        else if (buf[0]=='p' && buf[1]=='3' && buf[2]=='_' && buf[3]=='1') {
            if (buf[5]=='1') p3_1 = 1;
            else p3_1 = 0;
            microUSB.printf("ack\r\n");
            gLED=LED_OFF;
            wait(0.01);
            gLED=LED_ON;
            wait(0.01);
            gLED=LED_OFF;
        }
        // digital pin p3_0
        else if (buf[0]=='p' && buf[1]=='3' && buf[2]=='_' && buf[3]=='0') {
            if (buf[5]=='1') p3_0 = 1;
            else p3_0 = 0;
            microUSB.printf("ack\r\n");
            gLED=LED_OFF;
            wait(0.01);
            gLED=LED_ON;
            wait(0.01);
            gLED=LED_OFF;
        }
        // digital pin p3_3
        else if (buf[0]=='p' && buf[1]=='3' && buf[2]=='_' && buf[3]=='3') {
            if (buf[5]=='1') p3_3 = 1;
            else p3_3 = 0;
            microUSB.printf("ack\r\n");
            gLED=LED_OFF;
            wait(0.01);
            gLED=LED_ON;
            wait(0.01);
            gLED=LED_OFF;
        }
        // digital pin p3_2
        else if (buf[0]=='p' && buf[1]=='3' && buf[2]=='_' && buf[3]=='2') {
            if (buf[5]=='1') p3_2 = 1;
            else p3_2 = 0;
            microUSB.printf("ack\r\n");
            gLED=LED_OFF;
            wait(0.01);
            gLED=LED_ON;
            wait(0.01);
            gLED=LED_OFF;
        }
    }
    
}

int ascii(char a, char b)
{
    int val1 = 0;
    int val2 = 0;
    int val = 0;
    if(a>64 && a<71)
    {
        val1 = (int)a-55;
    }
    else if(a>96 && a<103)
    {
        val1 = (int)a-87;
    }
    else val1 = (int)a-48;
    
    if(b>64 && b<71)
    {
        val2 = (int)b-55;
    }
    else if(b>96 && b<103)
    {
        val2 = (int)b-87;
    }
    else val2 = (int)b-48;
    
    val=16*val1+val2;
    
    return (char)val;
}