Matt Clement
/
MODSERIAL_TEST
Shows problem with holding down enter/return in terminal that causes MODSERIAL to backlog characters .
main.cpp@0:0c223c27ea49, 2012-12-19 (annotated)
- 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?
User | Revision | Line number | New 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 | } |