Matt Clement
/
MODSERIAL_TEST
Shows problem with holding down enter/return in terminal that causes MODSERIAL to backlog characters .
main.cpp
- Committer:
- crazynanoman
- Date:
- 2012-12-19
- Revision:
- 0:0c223c27ea49
File content as of revision 0:0c223c27ea49:
#define True 1 #define False 0 #include "mbed.h" #include "MODSERIAL.h" MODSERIAL pc(USBTX,USBRX,512); Ticker tmer; DigitalOut rUSB(p14); float FirmVer=1.6; char buf[513]; volatile int sFlag=0; int Diagnostic=0; struct tm t; time_t seconds; int HoldOFF; void update_cfg(); void save_cfg(); void restore_cfg(); void ADCInit(); void DACInit(); void SerialInit(); void EEInit(); void RTCInit(); void ADCint(); void DACwr(int Ch, int Val); void parse(); void PIDcalc(int eCh, int sCh, int Cntl); void SysInit(); void rxCallback(MODSERIAL_IRQ_INFO *info); void flushSerialBuffer(void); extern "C" void HardFault_Handler() { pc.printf("Error Hard Fault!\n"); //NVIC_SystemReset(); } extern "C" void NMI_Handler() { pc.printf("Error NMI Fault!\n"); //NVIC_SystemReset(); } extern "C" void MemManage_Handler() { pc.printf("Error MemManage Fault!\n"); //NVIC_SystemReset(); } extern "C" void BusFault_Handler() { pc.printf("Error BusFault Fault!\n"); //NVIC_SystemReset(); } extern "C" void UsageFault_Handler() { pc.printf("Error UsageFault Fault!\n"); //NVIC_SystemReset(); } int main() { rUSB=1; FirmVer=1.6; //Firmware Version SerialInit(); SysInit(); RTCInit(); HoldOFF=0; flushSerialBuffer(); while (1) { wait(.1); if (sFlag==1) { // NVIC_DisableIRQ(UART0_IRQn); //added to fix lockup 9-27-11 int nNum = pc.move(buf,512); buf[nNum] = '\0'; pc.printf("\n\r%s\n\r",buf); parse(); sFlag=0; // NVIC_EnableIRQ(UART0_IRQn); //added to fix lockup 9-27-11 } seconds = time(NULL); } } void flushSerialBuffer(void) { char char1 = 0; while (pc.readable()) { char1 = pc.getc(); } return; } void SysInit() { } void RTCInit() { t.tm_sec = 00; // 0-59 t.tm_min = 00; // 0-59 t.tm_hour = 12; // 0-23 t.tm_mday = 12; // 1-31 t.tm_mon = 5; // 0-11 t.tm_year = 109; // year since 1900 seconds = mktime(&t); set_time(seconds); } void ADCint() { if (Diagnostic==0) { PIDcalc(0, 1, 0); PIDcalc(2, 3, 1); } } void PIDcalc(int eCh, int sCh, int Cntl) { } void SerialInit() { pc.baud(115200); pc.autoDetectChar('\r'); pc.attach(&rxCallback, MODSERIAL::RxAutoDetect); } void rxCallback(MODSERIAL_IRQ_INFO *info) { sFlag=1; } void parse() { char *pos; char key[]="Tt"; pos=strpbrk(buf,key); if (pos) { //__NVIC_DisableIRQ(UART0_IRQn); // pc.printf("%c",0x0c); pc.printf("hello you pressed T\n\r"); //__NVIC_EnableIRQ(UART0_IRQn); } else { char key[]="Rr"; pos=strpbrk(buf,key); if (pos) { //__NVIC_DisableIRQ(UART0_IRQn); // pc.printf("%c",0x0c); pc.printf("hello you pressed R\n\r"); //__NVIC_EnableIRQ(UART0_IRQn); } else { char key[]="sS"; pos=strpbrk(buf,key); if (pos) { pc.printf("hello you pressed S\n\r"); } else { char key[]="pP"; pos=strpbrk(buf,key); if (pos) { pc.printf("hello you pressed P\n\r"); } else { char key[]="dD"; pos=strpbrk(buf,key); if (pos) { pc.printf("hello you pressed D\n\r"); } else { char key[]="iI"; pos=strpbrk(buf,key); if (pos) { pc.printf("hello you pressed I\n\r"); } else { char key[]="qQ"; pos=strpbrk(buf,key); if (pos) { pc.printf("hello you pressed q\n\r"); } else { //__NVIC_DisableIRQ(UART0_IRQn); pc.printf("\n\rErr. %s\n\r",buf); //__NVIC_EnableIRQ(UART0_IRQn); } } } } } } } }