Instead of using an interrupt to read a serial message, a thread is created within the interrupt that reads serial data coming in. Original project for LPC1768.

Revision:
1:5438da9e6654
Parent:
0:f28b116a2be0
Child:
2:65ff74ea1476
--- a/main.cpp	Tue Mar 05 12:16:33 2019 +0000
+++ b/main.cpp	Thu Mar 07 16:29:56 2019 +0000
@@ -1,12 +1,13 @@
 #include "mbed.h"
 
-InterruptIn button(p14);
-
 Thread ISRthread(osPriorityAboveNormal);
 osThreadId ISRthreadId;
 
+RawSerial pc(USBTX, USBRX);
+Mutex serial_mutex;
+
 DigitalOut myled(LED1);
-DigitalOut myled3(LED3);
+DigitalOut myled4(LED4);
 
 void newInput();
 void ISR_thread();
@@ -14,18 +15,16 @@
 int main() {
     
    ISRthread.start(callback(ISR_thread));
-   button.rise(&newInput);          //interrupt to catch input
+   pc.attach(&newInput);                                      //interrupt to catch input
    
     while(1) {
-        myled = 1;
-        osDelay(1000);
-        myled = 0;
-        osDelay(1000);
+        myled4 = 1;
     }
 }
 
 
 void newInput() {
+    pc.attach(NULL);                                           //deatch the ISR to prevent recursive calls
     osSignalSet(ISRthreadId,0x01);
 }
 
@@ -34,8 +33,13 @@
     ISRthreadId = osThreadGetId();
     for(;;) {
         osSignalWait(0x01, osWaitForever);
-        myled3 = 1;
-        osDelay(500);
-        myled3 = 0;
+        
+        while (pc.readable()) {
+            pc.putc(pc.getc());
+        }
+        myled = 1;
+        osDelay(50);
+        myled = 0;
+        pc.attach(&newInput);                                     //re-attach the ISR
     }
 }
\ No newline at end of file