Sean Burford / i2c_pullup

Dependencies:   max32625pico maxim-dev mbed-rtos USBDevice

Fork of PICO_USB_I2C_SPI by Greg Steiert

Committer:
switches
Date:
Thu Dec 08 21:44:01 2016 +0000
Revision:
6:bff339370df6
Parent:
5:2436ae0a9eb1
Child:
7:5de026dd3a82
Separated ssel from SPI port to allow for easier multi byte SPI transactions.

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"
switches 3:aa55728c8e09 4 #include "SerialInterface.h"
switches 3:aa55728c8e09 5
switches 3:aa55728c8e09 6 #define UART_MAX_RESP_LENGTH 255
switches 3:aa55728c8e09 7 #define UART_MAX_CMD_LENGTH 255
switches 3:aa55728c8e09 8 #define USB_MAX_RESP_LENGTH 255
switches 3:aa55728c8e09 9 #define USB_MAX_CMD_LENGTH 255
switches 0:60a522ae2e35 10
switches 2:57500e991166 11 MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
switches 0:60a522ae2e35 12
switches 3:aa55728c8e09 13 // Serial Interface Adapter
switches 3:aa55728c8e09 14 SerialInterface serInt;
switches 3:aa55728c8e09 15
switches 3:aa55728c8e09 16 // Serial Interfaces
switches 3:aa55728c8e09 17 I2C i2c(P3_4, P3_5);
switches 6:bff339370df6 18 SPI spi(P5_1, P5_2, P5_0);
switches 6:bff339370df6 19 DigitalOut ssel(P5_3);
switches 3:aa55728c8e09 20
switches 3:aa55728c8e09 21 // Threads
switches 3:aa55728c8e09 22 Thread threadUSB;
switches 3:aa55728c8e09 23 Thread threadUART;
switches 3:aa55728c8e09 24
switches 2:57500e991166 25 DigitalOut rLED(LED1);
switches 2:57500e991166 26 DigitalOut gLED(LED2);
switches 2:57500e991166 27 DigitalOut bLED(LED3);
switches 0:60a522ae2e35 28
switches 3:aa55728c8e09 29 void usb_thread()
switches 3:aa55728c8e09 30 {
switches 5:2436ae0a9eb1 31 // Virtual serial port over USB
switches 5:2436ae0a9eb1 32 USBSerial microUSB;
switches 3:aa55728c8e09 33 char obuf[USB_MAX_RESP_LENGTH+1];
switches 3:aa55728c8e09 34 char ibuf[USB_MAX_CMD_LENGTH+1];
switches 3:aa55728c8e09 35 int i = 0;
switches 3:aa55728c8e09 36
switches 5:2436ae0a9eb1 37 microUSB.printf("micro USB serial port\r\n");
switches 5:2436ae0a9eb1 38
switches 3:aa55728c8e09 39 while(1) {
switches 3:aa55728c8e09 40 if (microUSB.readable()) {
switches 3:aa55728c8e09 41 ibuf[i]=microUSB.getc();
switches 3:aa55728c8e09 42 if (ibuf[i]!='\r') {
switches 3:aa55728c8e09 43 if (i < USB_MAX_CMD_LENGTH) {
switches 3:aa55728c8e09 44 i += 1;
switches 3:aa55728c8e09 45 }
switches 3:aa55728c8e09 46 } else {
switches 3:aa55728c8e09 47 rLED = LED_ON;
switches 3:aa55728c8e09 48 if (i < USB_MAX_CMD_LENGTH) {
switches 3:aa55728c8e09 49 ibuf[i]=0;
switches 3:aa55728c8e09 50 // microUSB.printf("UART CMD: %s=", ibuf);
switches 3:aa55728c8e09 51 serInt.call(ibuf, obuf);
switches 3:aa55728c8e09 52 microUSB.printf("%s\r\n", obuf);
switches 3:aa55728c8e09 53 } else {
switches 3:aa55728c8e09 54 microUSB.printf("[-1]\r\n");
switches 3:aa55728c8e09 55 }
switches 3:aa55728c8e09 56 i=0;
switches 3:aa55728c8e09 57 rLED = LED_OFF;
switches 3:aa55728c8e09 58 }
switches 3:aa55728c8e09 59 }
switches 3:aa55728c8e09 60 }
switches 3:aa55728c8e09 61 }
switches 3:aa55728c8e09 62
switches 3:aa55728c8e09 63 void uart_thread()
switches 3:aa55728c8e09 64 {
switches 5:2436ae0a9eb1 65 // Hardware serial port over DAPLink
switches 5:2436ae0a9eb1 66 Serial daplink(P2_1, P2_0);
switches 3:aa55728c8e09 67 char obuf[UART_MAX_RESP_LENGTH+1];
switches 3:aa55728c8e09 68 char ibuf[UART_MAX_CMD_LENGTH+1];
switches 3:aa55728c8e09 69 int i = 0;
switches 3:aa55728c8e09 70
switches 5:2436ae0a9eb1 71 daplink.printf("daplink serial port\r\n");
switches 5:2436ae0a9eb1 72
switches 3:aa55728c8e09 73 while(1) {
switches 3:aa55728c8e09 74 if (daplink.readable()) {
switches 3:aa55728c8e09 75 ibuf[i]=daplink.getc();
switches 3:aa55728c8e09 76 if (ibuf[i]!='\r') {
switches 3:aa55728c8e09 77 if (i < UART_MAX_CMD_LENGTH) {
switches 3:aa55728c8e09 78 i += 1;
switches 3:aa55728c8e09 79 }
switches 3:aa55728c8e09 80 } else {
switches 3:aa55728c8e09 81 bLED = LED_ON;
switches 3:aa55728c8e09 82 if (i < UART_MAX_CMD_LENGTH) {
switches 3:aa55728c8e09 83 ibuf[i]=0;
switches 3:aa55728c8e09 84 // daplink.printf("UART CMD: %s=", ibuf);
switches 3:aa55728c8e09 85 serInt.call(ibuf, obuf);
switches 3:aa55728c8e09 86 daplink.printf("%s\r\n", obuf);
switches 3:aa55728c8e09 87 } else {
switches 3:aa55728c8e09 88 daplink.printf("[-1]\r\n");
switches 3:aa55728c8e09 89 }
switches 3:aa55728c8e09 90 i=0;
switches 3:aa55728c8e09 91 bLED = LED_OFF;
switches 3:aa55728c8e09 92 }
switches 3:aa55728c8e09 93 }
switches 3:aa55728c8e09 94 }
switches 3:aa55728c8e09 95 }
switches 3:aa55728c8e09 96
switches 0:60a522ae2e35 97 // main() runs in its own thread in the OS
switches 0:60a522ae2e35 98 // (note the calls to Thread::wait below for delays)
switches 0:60a522ae2e35 99 int main()
switches 0:60a522ae2e35 100 {
switches 2:57500e991166 101 rLED = LED_ON;
switches 2:57500e991166 102 gLED = LED_ON;
switches 2:57500e991166 103 bLED = LED_OFF;
switches 3:aa55728c8e09 104
switches 3:aa55728c8e09 105 // Board Initialization
switches 2:57500e991166 106 pegasus.init();
switches 0:60a522ae2e35 107
switches 3:aa55728c8e09 108 // Serial Interface Setup
switches 6:bff339370df6 109 serInt.init(&i2c, &spi, &ssel);
switches 2:57500e991166 110
switches 2:57500e991166 111 rLED = LED_OFF;
switches 5:2436ae0a9eb1 112
switches 3:aa55728c8e09 113 // Start USB serial thread
switches 3:aa55728c8e09 114 threadUSB.start(usb_thread);
switches 5:2436ae0a9eb1 115
switches 3:aa55728c8e09 116 // Start UART serial thread
switches 3:aa55728c8e09 117 threadUART.start(uart_thread);
switches 1:6923b075c8d7 118
switches 3:aa55728c8e09 119 // Start main loop
switches 1:6923b075c8d7 120 while(1) {
switches 3:aa55728c8e09 121 Thread::wait(500);
switches 3:aa55728c8e09 122 gLED = !gLED;
switches 0:60a522ae2e35 123 }
switches 0:60a522ae2e35 124 }
switches 0:60a522ae2e35 125