Shows problem with holding down enter/return in terminal that causes MODSERIAL to backlog characters .

Committer:
crazynanoman
Date:
Wed Dec 19 17:49:32 2012 +0000
Revision:
0:0c223c27ea49
MODSERIAL example that shows bug when flooding the serial with return characters.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
crazynanoman 0:0c223c27ea49 1 #define True 1
crazynanoman 0:0c223c27ea49 2 #define False 0
crazynanoman 0:0c223c27ea49 3 #include "mbed.h"
crazynanoman 0:0c223c27ea49 4 #include "MODSERIAL.h"
crazynanoman 0:0c223c27ea49 5
crazynanoman 0:0c223c27ea49 6
crazynanoman 0:0c223c27ea49 7
crazynanoman 0:0c223c27ea49 8 MODSERIAL pc(USBTX,USBRX,512);
crazynanoman 0:0c223c27ea49 9 Ticker tmer;
crazynanoman 0:0c223c27ea49 10 DigitalOut rUSB(p14);
crazynanoman 0:0c223c27ea49 11
crazynanoman 0:0c223c27ea49 12
crazynanoman 0:0c223c27ea49 13 float FirmVer=1.6;
crazynanoman 0:0c223c27ea49 14 char buf[513];
crazynanoman 0:0c223c27ea49 15 volatile int sFlag=0;
crazynanoman 0:0c223c27ea49 16 int Diagnostic=0;
crazynanoman 0:0c223c27ea49 17
crazynanoman 0:0c223c27ea49 18
crazynanoman 0:0c223c27ea49 19
crazynanoman 0:0c223c27ea49 20 struct tm t;
crazynanoman 0:0c223c27ea49 21 time_t seconds;
crazynanoman 0:0c223c27ea49 22
crazynanoman 0:0c223c27ea49 23 int HoldOFF;
crazynanoman 0:0c223c27ea49 24
crazynanoman 0:0c223c27ea49 25
crazynanoman 0:0c223c27ea49 26 void update_cfg();
crazynanoman 0:0c223c27ea49 27 void save_cfg();
crazynanoman 0:0c223c27ea49 28 void restore_cfg();
crazynanoman 0:0c223c27ea49 29 void ADCInit();
crazynanoman 0:0c223c27ea49 30 void DACInit();
crazynanoman 0:0c223c27ea49 31 void SerialInit();
crazynanoman 0:0c223c27ea49 32 void EEInit();
crazynanoman 0:0c223c27ea49 33 void RTCInit();
crazynanoman 0:0c223c27ea49 34 void ADCint();
crazynanoman 0:0c223c27ea49 35 void DACwr(int Ch, int Val);
crazynanoman 0:0c223c27ea49 36 void parse();
crazynanoman 0:0c223c27ea49 37
crazynanoman 0:0c223c27ea49 38 void PIDcalc(int eCh, int sCh, int Cntl);
crazynanoman 0:0c223c27ea49 39 void SysInit();
crazynanoman 0:0c223c27ea49 40
crazynanoman 0:0c223c27ea49 41 void rxCallback(MODSERIAL_IRQ_INFO *info);
crazynanoman 0:0c223c27ea49 42 void flushSerialBuffer(void);
crazynanoman 0:0c223c27ea49 43 extern "C" void HardFault_Handler()
crazynanoman 0:0c223c27ea49 44 {
crazynanoman 0:0c223c27ea49 45 pc.printf("Error Hard Fault!\n");
crazynanoman 0:0c223c27ea49 46 //NVIC_SystemReset();
crazynanoman 0:0c223c27ea49 47 }
crazynanoman 0:0c223c27ea49 48 extern "C" void NMI_Handler()
crazynanoman 0:0c223c27ea49 49 {
crazynanoman 0:0c223c27ea49 50 pc.printf("Error NMI Fault!\n");
crazynanoman 0:0c223c27ea49 51 //NVIC_SystemReset();
crazynanoman 0:0c223c27ea49 52 }
crazynanoman 0:0c223c27ea49 53 extern "C" void MemManage_Handler()
crazynanoman 0:0c223c27ea49 54 {
crazynanoman 0:0c223c27ea49 55 pc.printf("Error MemManage Fault!\n");
crazynanoman 0:0c223c27ea49 56 //NVIC_SystemReset();
crazynanoman 0:0c223c27ea49 57 }
crazynanoman 0:0c223c27ea49 58 extern "C" void BusFault_Handler()
crazynanoman 0:0c223c27ea49 59 {
crazynanoman 0:0c223c27ea49 60 pc.printf("Error BusFault Fault!\n");
crazynanoman 0:0c223c27ea49 61 //NVIC_SystemReset();
crazynanoman 0:0c223c27ea49 62 }
crazynanoman 0:0c223c27ea49 63 extern "C" void UsageFault_Handler()
crazynanoman 0:0c223c27ea49 64 {
crazynanoman 0:0c223c27ea49 65 pc.printf("Error UsageFault Fault!\n");
crazynanoman 0:0c223c27ea49 66 //NVIC_SystemReset();
crazynanoman 0:0c223c27ea49 67 }
crazynanoman 0:0c223c27ea49 68
crazynanoman 0:0c223c27ea49 69 int main()
crazynanoman 0:0c223c27ea49 70 {
crazynanoman 0:0c223c27ea49 71 rUSB=1;
crazynanoman 0:0c223c27ea49 72
crazynanoman 0:0c223c27ea49 73 FirmVer=1.6; //Firmware Version
crazynanoman 0:0c223c27ea49 74 SerialInit();
crazynanoman 0:0c223c27ea49 75 SysInit();
crazynanoman 0:0c223c27ea49 76 RTCInit();
crazynanoman 0:0c223c27ea49 77 HoldOFF=0;
crazynanoman 0:0c223c27ea49 78 flushSerialBuffer();
crazynanoman 0:0c223c27ea49 79
crazynanoman 0:0c223c27ea49 80 while (1) {
crazynanoman 0:0c223c27ea49 81 wait(.1);
crazynanoman 0:0c223c27ea49 82 if (sFlag==1) {
crazynanoman 0:0c223c27ea49 83 // NVIC_DisableIRQ(UART0_IRQn); //added to fix lockup 9-27-11
crazynanoman 0:0c223c27ea49 84 int nNum = pc.move(buf,512);
crazynanoman 0:0c223c27ea49 85 buf[nNum] = '\0';
crazynanoman 0:0c223c27ea49 86 pc.printf("\n\r%s\n\r",buf);
crazynanoman 0:0c223c27ea49 87 parse();
crazynanoman 0:0c223c27ea49 88 sFlag=0;
crazynanoman 0:0c223c27ea49 89 // NVIC_EnableIRQ(UART0_IRQn); //added to fix lockup 9-27-11
crazynanoman 0:0c223c27ea49 90 }
crazynanoman 0:0c223c27ea49 91 seconds = time(NULL);
crazynanoman 0:0c223c27ea49 92
crazynanoman 0:0c223c27ea49 93
crazynanoman 0:0c223c27ea49 94 }
crazynanoman 0:0c223c27ea49 95 }
crazynanoman 0:0c223c27ea49 96
crazynanoman 0:0c223c27ea49 97 void flushSerialBuffer(void)
crazynanoman 0:0c223c27ea49 98 {
crazynanoman 0:0c223c27ea49 99 char char1 = 0;
crazynanoman 0:0c223c27ea49 100 while (pc.readable()) {
crazynanoman 0:0c223c27ea49 101 char1 = pc.getc();
crazynanoman 0:0c223c27ea49 102 }
crazynanoman 0:0c223c27ea49 103 return;
crazynanoman 0:0c223c27ea49 104 }
crazynanoman 0:0c223c27ea49 105
crazynanoman 0:0c223c27ea49 106 void SysInit()
crazynanoman 0:0c223c27ea49 107 {
crazynanoman 0:0c223c27ea49 108
crazynanoman 0:0c223c27ea49 109 }
crazynanoman 0:0c223c27ea49 110
crazynanoman 0:0c223c27ea49 111 void RTCInit()
crazynanoman 0:0c223c27ea49 112 {
crazynanoman 0:0c223c27ea49 113
crazynanoman 0:0c223c27ea49 114 t.tm_sec = 00; // 0-59
crazynanoman 0:0c223c27ea49 115 t.tm_min = 00; // 0-59
crazynanoman 0:0c223c27ea49 116 t.tm_hour = 12; // 0-23
crazynanoman 0:0c223c27ea49 117 t.tm_mday = 12; // 1-31
crazynanoman 0:0c223c27ea49 118 t.tm_mon = 5; // 0-11
crazynanoman 0:0c223c27ea49 119 t.tm_year = 109; // year since 1900
crazynanoman 0:0c223c27ea49 120 seconds = mktime(&t);
crazynanoman 0:0c223c27ea49 121 set_time(seconds);
crazynanoman 0:0c223c27ea49 122
crazynanoman 0:0c223c27ea49 123 }
crazynanoman 0:0c223c27ea49 124
crazynanoman 0:0c223c27ea49 125
crazynanoman 0:0c223c27ea49 126
crazynanoman 0:0c223c27ea49 127
crazynanoman 0:0c223c27ea49 128
crazynanoman 0:0c223c27ea49 129 void ADCint()
crazynanoman 0:0c223c27ea49 130 {
crazynanoman 0:0c223c27ea49 131
crazynanoman 0:0c223c27ea49 132 if (Diagnostic==0) {
crazynanoman 0:0c223c27ea49 133 PIDcalc(0, 1, 0);
crazynanoman 0:0c223c27ea49 134 PIDcalc(2, 3, 1);
crazynanoman 0:0c223c27ea49 135 }
crazynanoman 0:0c223c27ea49 136
crazynanoman 0:0c223c27ea49 137 }
crazynanoman 0:0c223c27ea49 138
crazynanoman 0:0c223c27ea49 139 void PIDcalc(int eCh, int sCh, int Cntl)
crazynanoman 0:0c223c27ea49 140 {
crazynanoman 0:0c223c27ea49 141
crazynanoman 0:0c223c27ea49 142 }
crazynanoman 0:0c223c27ea49 143
crazynanoman 0:0c223c27ea49 144
crazynanoman 0:0c223c27ea49 145
crazynanoman 0:0c223c27ea49 146 void SerialInit()
crazynanoman 0:0c223c27ea49 147 {
crazynanoman 0:0c223c27ea49 148 pc.baud(115200);
crazynanoman 0:0c223c27ea49 149 pc.autoDetectChar('\r');
crazynanoman 0:0c223c27ea49 150 pc.attach(&rxCallback, MODSERIAL::RxAutoDetect);
crazynanoman 0:0c223c27ea49 151
crazynanoman 0:0c223c27ea49 152 }
crazynanoman 0:0c223c27ea49 153
crazynanoman 0:0c223c27ea49 154 void rxCallback(MODSERIAL_IRQ_INFO *info)
crazynanoman 0:0c223c27ea49 155 {
crazynanoman 0:0c223c27ea49 156 sFlag=1;
crazynanoman 0:0c223c27ea49 157 }
crazynanoman 0:0c223c27ea49 158
crazynanoman 0:0c223c27ea49 159 void parse()
crazynanoman 0:0c223c27ea49 160 {
crazynanoman 0:0c223c27ea49 161
crazynanoman 0:0c223c27ea49 162 char *pos;
crazynanoman 0:0c223c27ea49 163 char key[]="Tt";
crazynanoman 0:0c223c27ea49 164 pos=strpbrk(buf,key);
crazynanoman 0:0c223c27ea49 165 if (pos) {
crazynanoman 0:0c223c27ea49 166 //__NVIC_DisableIRQ(UART0_IRQn);
crazynanoman 0:0c223c27ea49 167 // pc.printf("%c",0x0c);
crazynanoman 0:0c223c27ea49 168 pc.printf("hello you pressed T\n\r");
crazynanoman 0:0c223c27ea49 169 //__NVIC_EnableIRQ(UART0_IRQn);
crazynanoman 0:0c223c27ea49 170 } else {
crazynanoman 0:0c223c27ea49 171 char key[]="Rr";
crazynanoman 0:0c223c27ea49 172 pos=strpbrk(buf,key);
crazynanoman 0:0c223c27ea49 173 if (pos) {
crazynanoman 0:0c223c27ea49 174 //__NVIC_DisableIRQ(UART0_IRQn);
crazynanoman 0:0c223c27ea49 175 // pc.printf("%c",0x0c);
crazynanoman 0:0c223c27ea49 176 pc.printf("hello you pressed R\n\r");
crazynanoman 0:0c223c27ea49 177 //__NVIC_EnableIRQ(UART0_IRQn);
crazynanoman 0:0c223c27ea49 178 } else {
crazynanoman 0:0c223c27ea49 179 char key[]="sS";
crazynanoman 0:0c223c27ea49 180 pos=strpbrk(buf,key);
crazynanoman 0:0c223c27ea49 181 if (pos) {
crazynanoman 0:0c223c27ea49 182 pc.printf("hello you pressed S\n\r");
crazynanoman 0:0c223c27ea49 183 } else {
crazynanoman 0:0c223c27ea49 184 char key[]="pP";
crazynanoman 0:0c223c27ea49 185 pos=strpbrk(buf,key);
crazynanoman 0:0c223c27ea49 186 if (pos) {
crazynanoman 0:0c223c27ea49 187 pc.printf("hello you pressed P\n\r");
crazynanoman 0:0c223c27ea49 188 } else {
crazynanoman 0:0c223c27ea49 189 char key[]="dD";
crazynanoman 0:0c223c27ea49 190 pos=strpbrk(buf,key);
crazynanoman 0:0c223c27ea49 191 if (pos) {
crazynanoman 0:0c223c27ea49 192 pc.printf("hello you pressed D\n\r");
crazynanoman 0:0c223c27ea49 193 } else {
crazynanoman 0:0c223c27ea49 194 char key[]="iI";
crazynanoman 0:0c223c27ea49 195 pos=strpbrk(buf,key);
crazynanoman 0:0c223c27ea49 196 if (pos) {
crazynanoman 0:0c223c27ea49 197 pc.printf("hello you pressed I\n\r");
crazynanoman 0:0c223c27ea49 198 } else {
crazynanoman 0:0c223c27ea49 199 char key[]="qQ";
crazynanoman 0:0c223c27ea49 200 pos=strpbrk(buf,key);
crazynanoman 0:0c223c27ea49 201 if (pos) {
crazynanoman 0:0c223c27ea49 202 pc.printf("hello you pressed q\n\r");
crazynanoman 0:0c223c27ea49 203 } else {
crazynanoman 0:0c223c27ea49 204 //__NVIC_DisableIRQ(UART0_IRQn);
crazynanoman 0:0c223c27ea49 205 pc.printf("\n\rErr. %s\n\r",buf);
crazynanoman 0:0c223c27ea49 206 //__NVIC_EnableIRQ(UART0_IRQn);
crazynanoman 0:0c223c27ea49 207 }
crazynanoman 0:0c223c27ea49 208 }
crazynanoman 0:0c223c27ea49 209 }
crazynanoman 0:0c223c27ea49 210 }
crazynanoman 0:0c223c27ea49 211 }
crazynanoman 0:0c223c27ea49 212 }
crazynanoman 0:0c223c27ea49 213 }
crazynanoman 0:0c223c27ea49 214 }