I2C/SPI/GPIO example for MAX32625PICO board

Dependencies:   SerialInterface USBDevice max32625pico

Fork of PICO_USB_I2C_SPI by Greg Steiert

Committer:
switches
Date:
Thu Jan 25 18:46:58 2018 +0000
Revision:
14:dd5a96c353ed
Parent:
13:fed6ff32bf5d
Child:
15:e8b28cadf100
Added max32625pico library and example of using mixed voltages.; Changed USB VID/PID

Who changed what in which revision?

UserRevisionLine numberNew contents of line
switches 0:60a522ae2e35 1 #include "mbed.h"
switches 13:fed6ff32bf5d 2 #include "rtos.h"
switches 1:6923b075c8d7 3 #include "USBSerial.h"
switches 14:dd5a96c353ed 4 #include "max32625pico.h"
switches 3:aa55728c8e09 5 #include "SerialInterface.h"
switches 3:aa55728c8e09 6
switches 3:aa55728c8e09 7 #define UART_MAX_RESP_LENGTH 255
switches 3:aa55728c8e09 8 #define UART_MAX_CMD_LENGTH 255
switches 3:aa55728c8e09 9 #define USB_MAX_RESP_LENGTH 255
switches 3:aa55728c8e09 10 #define USB_MAX_CMD_LENGTH 255
switches 0:60a522ae2e35 11
switches 14:dd5a96c353ed 12 // configure VDDIOH to local 3.3V supply, set dipVio and swdVio to 1.8V supply
switches 14:dd5a96c353ed 13 MAX32625PICO pico(MAX32625PICO::IOH_3V3, MAX32625PICO::VIO_1V8, MAX32625PICO::VIO_1V8);
switches 0:60a522ae2e35 14
switches 14:dd5a96c353ed 15 // Virtual serial port over USB
switches 14:dd5a96c353ed 16 USBSerial microUSB(0x0B6A, 0x4360);
switches 3:aa55728c8e09 17
switches 3:aa55728c8e09 18 // Serial Interfaces
switches 13:fed6ff32bf5d 19 I2C i2c(P1_6, P1_7);
switches 14:dd5a96c353ed 20 SPI spi(P0_5, P0_6, P0_4);
switches 13:fed6ff32bf5d 21 DigitalInOut gpio[] = {P0_0, P0_1, P0_2, P0_3, P4_4, P4_5, P4_6, P4_7};
switches 9:e59eb5f5ce32 22 AnalogIn ain[] = {AIN_0, AIN_1, AIN_2, AIN_3, AIN_4, AIN_5, AIN_6, AIN_7};
switches 9:e59eb5f5ce32 23
switches 9:e59eb5f5ce32 24 // Serial Interface Adapter
switches 10:a3f06fa13bda 25 SerialInterface serInt(i2c, spi, gpio, ain);
switches 3:aa55728c8e09 26
switches 3:aa55728c8e09 27 // Threads
switches 3:aa55728c8e09 28 Thread threadUSB;
switches 3:aa55728c8e09 29
switches 2:57500e991166 30 DigitalOut rLED(LED1);
switches 2:57500e991166 31 DigitalOut gLED(LED2);
switches 2:57500e991166 32 DigitalOut bLED(LED3);
switches 0:60a522ae2e35 33
switches 3:aa55728c8e09 34 void usb_thread()
switches 3:aa55728c8e09 35 {
switches 3:aa55728c8e09 36 char obuf[USB_MAX_RESP_LENGTH+1];
switches 3:aa55728c8e09 37 char ibuf[USB_MAX_CMD_LENGTH+1];
switches 3:aa55728c8e09 38 int i = 0;
switches 3:aa55728c8e09 39
switches 5:2436ae0a9eb1 40 microUSB.printf("micro USB serial port\r\n");
switches 5:2436ae0a9eb1 41
switches 3:aa55728c8e09 42 while(1) {
switches 3:aa55728c8e09 43 if (microUSB.readable()) {
switches 3:aa55728c8e09 44 ibuf[i]=microUSB.getc();
switches 3:aa55728c8e09 45 if (ibuf[i]!='\r') {
switches 3:aa55728c8e09 46 if (i < USB_MAX_CMD_LENGTH) {
switches 3:aa55728c8e09 47 i += 1;
switches 3:aa55728c8e09 48 }
switches 3:aa55728c8e09 49 } else {
switches 3:aa55728c8e09 50 rLED = LED_ON;
switches 3:aa55728c8e09 51 if (i < USB_MAX_CMD_LENGTH) {
switches 3:aa55728c8e09 52 ibuf[i]=0;
switches 3:aa55728c8e09 53 // microUSB.printf("UART CMD: %s=", ibuf);
switches 3:aa55728c8e09 54 serInt.call(ibuf, obuf);
switches 3:aa55728c8e09 55 microUSB.printf("%s\r\n", obuf);
switches 3:aa55728c8e09 56 } else {
switches 3:aa55728c8e09 57 microUSB.printf("[-1]\r\n");
switches 3:aa55728c8e09 58 }
switches 3:aa55728c8e09 59 i=0;
switches 3:aa55728c8e09 60 rLED = LED_OFF;
switches 3:aa55728c8e09 61 }
switches 3:aa55728c8e09 62 }
switches 3:aa55728c8e09 63 }
switches 3:aa55728c8e09 64 }
switches 3:aa55728c8e09 65
switches 3:aa55728c8e09 66
switches 0:60a522ae2e35 67 // main() runs in its own thread in the OS
switches 0:60a522ae2e35 68 // (note the calls to Thread::wait below for delays)
switches 0:60a522ae2e35 69 int main()
switches 0:60a522ae2e35 70 {
switches 2:57500e991166 71 rLED = LED_ON;
switches 2:57500e991166 72 gLED = LED_ON;
switches 2:57500e991166 73 bLED = LED_OFF;
switches 3:aa55728c8e09 74
switches 14:dd5a96c353ed 75 // Configure P4_4 through P4_7 for 3.3V I/O
switches 14:dd5a96c353ed 76 pico.vddioh(P4_4, MAX32625PICO::VIO_IOH);
switches 14:dd5a96c353ed 77 pico.vddioh(P4_5, MAX32625PICO::VIO_IOH);
switches 14:dd5a96c353ed 78 pico.vddioh(P4_6, MAX32625PICO::VIO_IOH);
switches 14:dd5a96c353ed 79 pico.vddioh(P4_7, MAX32625PICO::VIO_IOH);
switches 2:57500e991166 80
switches 2:57500e991166 81 rLED = LED_OFF;
switches 5:2436ae0a9eb1 82
switches 3:aa55728c8e09 83 // Start USB serial thread
switches 3:aa55728c8e09 84 threadUSB.start(usb_thread);
switches 5:2436ae0a9eb1 85
switches 3:aa55728c8e09 86 // Start main loop
switches 1:6923b075c8d7 87 while(1) {
switches 3:aa55728c8e09 88 Thread::wait(500);
switches 3:aa55728c8e09 89 gLED = !gLED;
switches 0:60a522ae2e35 90 }
switches 0:60a522ae2e35 91 }
switches 0:60a522ae2e35 92