I2C/SPI/GPIO example for MAX32625PICO board

Dependencies:   SerialInterface USBDevice max32625pico

Fork of PICO_USB_I2C_SPI by Greg Steiert

main.cpp

Committer:
switches
Date:
2016-12-14
Revision:
8:9b85634550c7
Parent:
7:5de026dd3a82
Child:
9:e59eb5f5ce32

File content as of revision 8:9b85634550c7:

#include "mbed.h"
#include "max32630fthr.h"
#include "USBSerial.h"
#include "SerialInterface.h"

#define UART_MAX_RESP_LENGTH  255
#define UART_MAX_CMD_LENGTH  255
#define USB_MAX_RESP_LENGTH  255
#define USB_MAX_CMD_LENGTH  255

MAX32630FTHR pegasus;

// Virtual serial port over USB
USBSerial microUSB;

// Serial Interface Adapter
SerialInterface serInt;

// Serial Interfaces
I2C i2c(P3_4, P3_5);
SPI spi(P5_1, P5_2, P5_0);
DigitalInOut gpio[] = {P5_3, P5_4, P5_5, P5_6, P3_0, P3_1, P3_2, P3_3};

// Threads
Thread threadUSB;
Thread threadUART;

DigitalOut rLED(LED1);
DigitalOut gLED(LED2);
DigitalOut bLED(LED3);

void usb_thread()
{
    char obuf[USB_MAX_RESP_LENGTH+1];
    char ibuf[USB_MAX_CMD_LENGTH+1];
    int i = 0;

    microUSB.printf("micro USB serial port\r\n");

    while(1) {
        if (microUSB.readable()) {
            ibuf[i]=microUSB.getc();
            if (ibuf[i]!='\r') {
                if (i < USB_MAX_CMD_LENGTH) {
                    i += 1;
                }
            } else {
                rLED = LED_ON;
                if (i < USB_MAX_CMD_LENGTH) {
                    ibuf[i]=0;
//                    microUSB.printf("UART CMD:  %s=", ibuf);
                    serInt.call(ibuf, obuf);
                    microUSB.printf("%s\r\n", obuf);
                } else {
                    microUSB.printf("[-1]\r\n");
                }
                i=0;
                rLED = LED_OFF;
            }
        }
    }
}

void uart_thread()
{
// Hardware serial port over DAPLink
    Serial daplink(P2_1, P2_0);
    char obuf[UART_MAX_RESP_LENGTH+1];
    char ibuf[UART_MAX_CMD_LENGTH+1];
    int i = 0;

    daplink.printf("daplink serial port\r\n");

    while(1) {
        if (daplink.readable()) {
            ibuf[i]=daplink.getc();
            if (ibuf[i]!='\r') {
                if (i < UART_MAX_CMD_LENGTH) {
                    i += 1;
                }
            } else {
                bLED = LED_ON;
                if (i < UART_MAX_CMD_LENGTH) {
                    ibuf[i]=0;
//                    daplink.printf("UART CMD:  %s=", ibuf);
                    serInt.call(ibuf, obuf);
                    daplink.printf("%s\r\n", obuf);
                } else {
                    daplink.printf("[-1]\r\n");
                }
                i=0;
                bLED = LED_OFF;
            }
        }
    }
}

// main() runs in its own thread in the OS
// (note the calls to Thread::wait below for delays)
int main()
{
    rLED = LED_ON;
    gLED = LED_ON;
    bLED = LED_OFF;

//  Board Initialization
    pegasus.init(MAX32630FTHR::VIO_3V3);

//  Serial Interface Setup
    serInt.init(&i2c, &spi, gpio);
    gpio[0].write(1);
    gpio[0].output();

    rLED = LED_OFF;

// Start USB serial thread
    threadUSB.start(usb_thread);

// Start UART serial thread
    threadUART.start(uart_thread);

// Start main loop
    while(1) {
        Thread::wait(500);
        gLED = !gLED;
    }
}