Treehouse Mbed Team / Mbed 2 deprecated APS_DCM1SL

Dependencies:   mbed

Committer:
mfwic
Date:
Wed Dec 12 00:10:03 2018 +0000
Revision:
16:5791665200cb
Parent:
12:fd1fd1857628
Child:
30:d8721a46ee03
Added banner and fixed status display to clear old status properly.

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 1:9f8583ba2431 6 #include "all_io.h"
mfwic 0:44a3005d4f20 7
mfwic 0:44a3005d4f20 8 /************* GLOBAL VARIABLES *****************************/
mfwic 0:44a3005d4f20 9 struct serialStatusBits serialStatus;
mfwic 16:5791665200cb 10 char strbuf[150] = {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 7:860b3a8275cb 19 //Serial dcm1(USBTX, USBRX, 115200);
mfwic 7:860b3a8275cb 20 Serial dcm1(USBTX, USBRX, 921600);
mfwic 0:44a3005d4f20 21
mfwic 0:44a3005d4f20 22
mfwic 0:44a3005d4f20 23 // initialize the serial port variables
mfwic 0:44a3005d4f20 24 void initSerial(void)
mfwic 0:44a3005d4f20 25 {
mfwic 0:44a3005d4f20 26 // create the RxIRQ callback
mfwic 2:46faae84b8b0 27 dcm1.attach(&Rx_IRQHandler, Serial::RxIrq);
mfwic 0:44a3005d4f20 28
mfwic 0:44a3005d4f20 29 }
mfwic 0:44a3005d4f20 30
mfwic 0:44a3005d4f20 31
mfwic 0:44a3005d4f20 32 // this is the interrupt request handler (IRQ) for ALL Recoev interrupts
mfwic 0:44a3005d4f20 33 void Rx_IRQHandler(void)
mfwic 0:44a3005d4f20 34 {
mfwic 0:44a3005d4f20 35 // reinit the repeat flag
mfwic 0:44a3005d4f20 36 serialStatus.repeat = FALSE;
mfwic 0:44a3005d4f20 37
mfwic 0:44a3005d4f20 38 // check if the USART1 receive interrupt flag was set
mfwic 2:46faae84b8b0 39 while (dcm1.readable())
mfwic 0:44a3005d4f20 40 {
mfwic 1:9f8583ba2431 41 //led_usb = 0;
mfwic 2:46faae84b8b0 42 rxbuf[bufloc] = dcm1.getc();
mfwic 0:44a3005d4f20 43
mfwic 0:44a3005d4f20 44 if (rxbuf[bufloc] == CR) // check for end of command
mfwic 0:44a3005d4f20 45 {
mfwic 0:44a3005d4f20 46 serialStatus.command = TRUE;
mfwic 0:44a3005d4f20 47 rxbuf[bufloc] = 0;
mfwic 0:44a3005d4f20 48 bufloc = 0;
mfwic 0:44a3005d4f20 49 return;
mfwic 0:44a3005d4f20 50 }
mfwic 0:44a3005d4f20 51 else if (rxbuf[bufloc] == '$') // check for computer command
mfwic 0:44a3005d4f20 52 {
mfwic 0:44a3005d4f20 53 serialStatus.computer = TRUE;
mfwic 0:44a3005d4f20 54 bufloc = 0; // reset the buffer if computer command
mfwic 0:44a3005d4f20 55 }
mfwic 0:44a3005d4f20 56 else if (rxbuf[bufloc] == ')') // check for repeat command
mfwic 0:44a3005d4f20 57 {
mfwic 0:44a3005d4f20 58 serialStatus.repeat = TRUE;
mfwic 0:44a3005d4f20 59 rxbuf[bufloc] = 0;
mfwic 0:44a3005d4f20 60 }
mfwic 0:44a3005d4f20 61
mfwic 0:44a3005d4f20 62 // Echo character back out the serial port
mfwic 0:44a3005d4f20 63 if (!serialStatus.computer)
mfwic 0:44a3005d4f20 64 {
mfwic 2:46faae84b8b0 65 dcm1.putc((unsigned char)rxbuf[bufloc]);
mfwic 0:44a3005d4f20 66 }
mfwic 0:44a3005d4f20 67
mfwic 0:44a3005d4f20 68 // handle backspace
mfwic 0:44a3005d4f20 69 if (rxbuf[bufloc] != 0x08)
mfwic 0:44a3005d4f20 70 {
mfwic 0:44a3005d4f20 71 bufloc++; // increment the location
mfwic 0:44a3005d4f20 72 }
mfwic 0:44a3005d4f20 73 else
mfwic 0:44a3005d4f20 74 {
mfwic 0:44a3005d4f20 75 if (bufloc > 0)
mfwic 0:44a3005d4f20 76 {
mfwic 0:44a3005d4f20 77 rxbuf[--bufloc] = 0; // set to null
mfwic 0:44a3005d4f20 78 }
mfwic 0:44a3005d4f20 79 else
mfwic 0:44a3005d4f20 80 {
mfwic 0:44a3005d4f20 81 rxbuf[bufloc] = 0; // set to null
mfwic 0:44a3005d4f20 82 }
mfwic 0:44a3005d4f20 83 }
mfwic 0:44a3005d4f20 84
mfwic 0:44a3005d4f20 85 // check for overflow
mfwic 0:44a3005d4f20 86 if (bufloc >= MAXRXBUF)
mfwic 0:44a3005d4f20 87 {
mfwic 0:44a3005d4f20 88 bufloc = 0;
mfwic 0:44a3005d4f20 89 rxbuf[0] = 0;
mfwic 0:44a3005d4f20 90 }
mfwic 0:44a3005d4f20 91
mfwic 1:9f8583ba2431 92 //led_usb = 1;
mfwic 0:44a3005d4f20 93 }
mfwic 0:44a3005d4f20 94 }
mfwic 0:44a3005d4f20 95
mfwic 0:44a3005d4f20 96
mfwic 0:44a3005d4f20 97 // sends carriage return and linefeed and prompt character
mfwic 3:d8948c5b2951 98 /*
mfwic 0:44a3005d4f20 99 void sendCRLF(void)
mfwic 0:44a3005d4f20 100 {
mfwic 0:44a3005d4f20 101 char strMenu[30] ={0};
mfwic 3:d8948c5b2951 102
mfwic 3:d8948c5b2951 103 menu_type = MENU_DCM1;
mfwic 3:d8948c5b2951 104
mfwic 0:44a3005d4f20 105 switch(menuType)
mfwic 0:44a3005d4f20 106 {
mfwic 3:d8948c5b2951 107 case MENU_DCM1: strcpy(strMenu,"DCM1"); break;
mfwic 0:44a3005d4f20 108 case MENU_DIFFERENTIAL: strcpy(strMenu,"DIFF"); break;
mfwic 0:44a3005d4f20 109 case MENU_SINGLE: strcpy(strMenu,"SINGLE"); break;
mfwic 0:44a3005d4f20 110 case MENU_DUAL: strcpy(strMenu,"DUAL"); break;
mfwic 0:44a3005d4f20 111 case MENU_INVERT: strcpy(strMenu,"INVERT"); break;
mfwic 0:44a3005d4f20 112 case MENU_SETTINGS: strcpy(strMenu,"SET"); break;
mfwic 0:44a3005d4f20 113 case MENU_SETTINGS_CHAN1: strcpy(strMenu,"SET CHAN1"); break;
mfwic 0:44a3005d4f20 114 case MENU_SETTINGS_CHAN2: strcpy(strMenu,"SET CHAN2"); break;
mfwic 0:44a3005d4f20 115 case MENU_SETTINGS_CLOCK: strcpy(strMenu,"SET CLOCK"); break;
mfwic 0:44a3005d4f20 116 case MENU_CALIBRATE: strcpy(strMenu,"CAL"); break;
mfwic 0:44a3005d4f20 117 case MENU_TEST: strcpy(strMenu,"TEST"); break;
mfwic 0:44a3005d4f20 118 case MENU_MAIN: strcpy(strMenu,"MAIN"); break;
mfwic 0:44a3005d4f20 119 default: strcpy(strMenu,"UNDF"); break;
mfwic 0:44a3005d4f20 120 }
mfwic 3:d8948c5b2951 121
mfwic 0:44a3005d4f20 122 // append the CR,LF and the ready character
mfwic 0:44a3005d4f20 123 if(serialStatus.computer)
mfwic 0:44a3005d4f20 124 {
mfwic 0:44a3005d4f20 125 sendSerial("\r");
mfwic 0:44a3005d4f20 126 }
mfwic 0:44a3005d4f20 127 else
mfwic 0:44a3005d4f20 128 {
mfwic 3:d8948c5b2951 129 // adds a carrot so you know you are talking in terminal
mfwic 0:44a3005d4f20 130 sprintf(strbuf,"\n\r%s>",strMenu);
mfwic 0:44a3005d4f20 131 sendSerial(strbuf);
mfwic 0:44a3005d4f20 132 // sendSerial("\n\r>");
mfwic 0:44a3005d4f20 133 }
mfwic 3:d8948c5b2951 134 }*/
mfwic 0:44a3005d4f20 135
mfwic 1:9f8583ba2431 136 // send buffer to the serial port
mfwic 0:44a3005d4f20 137 void sendSerial(char *buf)
mfwic 0:44a3005d4f20 138 {
mfwic 1:9f8583ba2431 139 //led_usb = 0;
mfwic 2:46faae84b8b0 140 dcm1.printf(buf);
mfwic 1:9f8583ba2431 141 //led_usb = 1;
mfwic 0:44a3005d4f20 142 }
mfwic 0:44a3005d4f20 143
mfwic 1:9f8583ba2431 144 /************************************************************
mfwic 1:9f8583ba2431 145 * Routine: showRangeError
mfwic 1:9f8583ba2431 146 * Input: error -- 0 = in range, 1 = out of range
mfwic 1:9f8583ba2431 147 * Output: none
mfwic 1:9f8583ba2431 148 * Description:
mfwic 1:9f8583ba2431 149 * Sends a floating point number (value) over the serial port
mfwic 1:9f8583ba2431 150 * if it is being retrieved (GET)
mfwic 1:9f8583ba2431 151 *
mfwic 1:9f8583ba2431 152 **************************************************************/
mfwic 1:9f8583ba2431 153 void showRangeError(int intValue, int iBadValue, float fBadValue)
mfwic 1:9f8583ba2431 154 {
mfwic 12:fd1fd1857628 155 if (intValue){
mfwic 12:fd1fd1857628 156 sprintf(strbuf, " Out of Range: %d", iBadValue);
mfwic 12:fd1fd1857628 157 }else{
mfwic 12:fd1fd1857628 158 sprintf(strbuf, " Out of Range: %0.3f", fBadValue);
mfwic 12:fd1fd1857628 159 }
mfwic 1:9f8583ba2431 160
mfwic 1:9f8583ba2431 161 sendSerial(strbuf);
mfwic 1:9f8583ba2431 162 }
mfwic 0:44a3005d4f20 163