Treehouse Mbed Team / Mbed 2 deprecated APS_DCM1SL

Dependencies:   mbed

Committer:
mfwic
Date:
Sat Nov 24 18:22:31 2018 +0000
Revision:
0:44a3005d4f20
Child:
1:9f8583ba2431
1st commit after starting minor edits from base code. Major sections will be deleted in this version.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mfwic 0:44a3005d4f20 1 #include "mbed.h"
mfwic 0:44a3005d4f20 2 #include "serial.h"
mfwic 0:44a3005d4f20 3 #include "stdio.h"
mfwic 0:44a3005d4f20 4 #include "string.h"
mfwic 0:44a3005d4f20 5 #include "globals.h"
mfwic 0:44a3005d4f20 6 #include "dio.h"
mfwic 0:44a3005d4f20 7
mfwic 0:44a3005d4f20 8 /************* GLOBAL VARIABLES *****************************/
mfwic 0:44a3005d4f20 9 struct serialStatusBits serialStatus;
mfwic 0:44a3005d4f20 10 char strbuf[100] = {0};
mfwic 0:44a3005d4f20 11 char rxbuf[MAXRXBUF+1] = {0};
mfwic 0:44a3005d4f20 12 volatile unsigned int bufloc = 0;
mfwic 0:44a3005d4f20 13
mfwic 0:44a3005d4f20 14 /************* FORWARD DECLARATIONS *************************/
mfwic 0:44a3005d4f20 15 void Rx_IRQHandler(void);
mfwic 0:44a3005d4f20 16
mfwic 0:44a3005d4f20 17
mfwic 0:44a3005d4f20 18 // set up serial port for 115200 baud
mfwic 0:44a3005d4f20 19 Serial pc(USBTX, USBRX, 115200);
mfwic 0:44a3005d4f20 20
mfwic 0:44a3005d4f20 21
mfwic 0:44a3005d4f20 22 // initialize the serial port variables
mfwic 0:44a3005d4f20 23 void initSerial(void)
mfwic 0:44a3005d4f20 24 {
mfwic 0:44a3005d4f20 25 // create the RxIRQ callback
mfwic 0:44a3005d4f20 26 pc.attach(&Rx_IRQHandler, Serial::RxIrq);
mfwic 0:44a3005d4f20 27
mfwic 0:44a3005d4f20 28 }
mfwic 0:44a3005d4f20 29
mfwic 0:44a3005d4f20 30
mfwic 0:44a3005d4f20 31 // this is the interrupt request handler (IRQ) for ALL Recoev interrupts
mfwic 0:44a3005d4f20 32 void Rx_IRQHandler(void)
mfwic 0:44a3005d4f20 33 {
mfwic 0:44a3005d4f20 34 // reinit the repeat flag
mfwic 0:44a3005d4f20 35 serialStatus.repeat = FALSE;
mfwic 0:44a3005d4f20 36
mfwic 0:44a3005d4f20 37 // check if the USART1 receive interrupt flag was set
mfwic 0:44a3005d4f20 38 while (pc.readable())
mfwic 0:44a3005d4f20 39 {
mfwic 0:44a3005d4f20 40 led_usb = 0;
mfwic 0:44a3005d4f20 41 rxbuf[bufloc] = pc.getc();
mfwic 0:44a3005d4f20 42
mfwic 0:44a3005d4f20 43 if (rxbuf[bufloc] == CR) // check for end of command
mfwic 0:44a3005d4f20 44 {
mfwic 0:44a3005d4f20 45 serialStatus.command = TRUE;
mfwic 0:44a3005d4f20 46 rxbuf[bufloc] = 0;
mfwic 0:44a3005d4f20 47 bufloc = 0;
mfwic 0:44a3005d4f20 48 return;
mfwic 0:44a3005d4f20 49 }
mfwic 0:44a3005d4f20 50 else if (rxbuf[bufloc] == '$') // check for computer command
mfwic 0:44a3005d4f20 51 {
mfwic 0:44a3005d4f20 52 serialStatus.computer = TRUE;
mfwic 0:44a3005d4f20 53 bufloc = 0; // reset the buffer if computer command
mfwic 0:44a3005d4f20 54 }
mfwic 0:44a3005d4f20 55 else if (rxbuf[bufloc] == ')') // check for repeat command
mfwic 0:44a3005d4f20 56 {
mfwic 0:44a3005d4f20 57 serialStatus.repeat = TRUE;
mfwic 0:44a3005d4f20 58 rxbuf[bufloc] = 0;
mfwic 0:44a3005d4f20 59 }
mfwic 0:44a3005d4f20 60
mfwic 0:44a3005d4f20 61 // Echo character back out the serial port
mfwic 0:44a3005d4f20 62 if (!serialStatus.computer)
mfwic 0:44a3005d4f20 63 {
mfwic 0:44a3005d4f20 64 pc.putc((unsigned char)rxbuf[bufloc]);
mfwic 0:44a3005d4f20 65 }
mfwic 0:44a3005d4f20 66
mfwic 0:44a3005d4f20 67 // handle backspace
mfwic 0:44a3005d4f20 68 if (rxbuf[bufloc] != 0x08)
mfwic 0:44a3005d4f20 69 {
mfwic 0:44a3005d4f20 70 bufloc++; // increment the location
mfwic 0:44a3005d4f20 71 }
mfwic 0:44a3005d4f20 72 else
mfwic 0:44a3005d4f20 73 {
mfwic 0:44a3005d4f20 74 if (bufloc > 0)
mfwic 0:44a3005d4f20 75 {
mfwic 0:44a3005d4f20 76 rxbuf[--bufloc] = 0; // set to null
mfwic 0:44a3005d4f20 77 }
mfwic 0:44a3005d4f20 78 else
mfwic 0:44a3005d4f20 79 {
mfwic 0:44a3005d4f20 80 rxbuf[bufloc] = 0; // set to null
mfwic 0:44a3005d4f20 81 }
mfwic 0:44a3005d4f20 82 }
mfwic 0:44a3005d4f20 83
mfwic 0:44a3005d4f20 84 // check for overflow
mfwic 0:44a3005d4f20 85 if (bufloc >= MAXRXBUF)
mfwic 0:44a3005d4f20 86 {
mfwic 0:44a3005d4f20 87 bufloc = 0;
mfwic 0:44a3005d4f20 88 rxbuf[0] = 0;
mfwic 0:44a3005d4f20 89 }
mfwic 0:44a3005d4f20 90
mfwic 0:44a3005d4f20 91 led_usb = 1;
mfwic 0:44a3005d4f20 92 }
mfwic 0:44a3005d4f20 93 }
mfwic 0:44a3005d4f20 94
mfwic 0:44a3005d4f20 95
mfwic 0:44a3005d4f20 96 // sends carriage return and linefeed and prompt character
mfwic 0:44a3005d4f20 97 void sendCRLF(void)
mfwic 0:44a3005d4f20 98 {
mfwic 0:44a3005d4f20 99 char strMenu[30] ={0};
mfwic 0:44a3005d4f20 100 /*
mfwic 0:44a3005d4f20 101 switch(menuType)
mfwic 0:44a3005d4f20 102 {
mfwic 0:44a3005d4f20 103 case MENU_DIFFERENTIAL: strcpy(strMenu,"DIFF"); break;
mfwic 0:44a3005d4f20 104 case MENU_SINGLE: strcpy(strMenu,"SINGLE"); break;
mfwic 0:44a3005d4f20 105 case MENU_DUAL: strcpy(strMenu,"DUAL"); break;
mfwic 0:44a3005d4f20 106 case MENU_INVERT: strcpy(strMenu,"INVERT"); break;
mfwic 0:44a3005d4f20 107 case MENU_SETTINGS: strcpy(strMenu,"SET"); break;
mfwic 0:44a3005d4f20 108 case MENU_SETTINGS_CHAN1: strcpy(strMenu,"SET CHAN1"); break;
mfwic 0:44a3005d4f20 109 case MENU_SETTINGS_CHAN2: strcpy(strMenu,"SET CHAN2"); break;
mfwic 0:44a3005d4f20 110 case MENU_SETTINGS_CLOCK: strcpy(strMenu,"SET CLOCK"); break;
mfwic 0:44a3005d4f20 111 case MENU_CALIBRATE: strcpy(strMenu,"CAL"); break;
mfwic 0:44a3005d4f20 112 case MENU_TEST: strcpy(strMenu,"TEST"); break;
mfwic 0:44a3005d4f20 113 case MENU_MAIN: strcpy(strMenu,"MAIN"); break;
mfwic 0:44a3005d4f20 114 default: strcpy(strMenu,"UNDF"); break;
mfwic 0:44a3005d4f20 115 }
mfwic 0:44a3005d4f20 116 */
mfwic 0:44a3005d4f20 117 // append the CR,LF and the ready character
mfwic 0:44a3005d4f20 118 if(serialStatus.computer)
mfwic 0:44a3005d4f20 119 {
mfwic 0:44a3005d4f20 120 sendSerial("\r");
mfwic 0:44a3005d4f20 121 }
mfwic 0:44a3005d4f20 122 else
mfwic 0:44a3005d4f20 123 {
mfwic 0:44a3005d4f20 124 sprintf(strbuf,"\n\r%s>",strMenu);
mfwic 0:44a3005d4f20 125 sendSerial(strbuf);
mfwic 0:44a3005d4f20 126 // adds a carrot so you know you are talking in terminal
mfwic 0:44a3005d4f20 127 // sendSerial("\n\r>");
mfwic 0:44a3005d4f20 128 }
mfwic 0:44a3005d4f20 129 }
mfwic 0:44a3005d4f20 130
mfwic 0:44a3005d4f20 131 // send buffter to the serial port
mfwic 0:44a3005d4f20 132 void sendSerial(char *buf)
mfwic 0:44a3005d4f20 133 {
mfwic 0:44a3005d4f20 134 led_usb = 0;
mfwic 0:44a3005d4f20 135 pc.printf(buf);
mfwic 0:44a3005d4f20 136 led_usb = 1;
mfwic 0:44a3005d4f20 137 }
mfwic 0:44a3005d4f20 138
mfwic 0:44a3005d4f20 139