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.

Committer:
Ritzerk
Date:
Thu Mar 07 16:29:56 2019 +0000
Revision:
1:5438da9e6654
Parent:
0:f28b116a2be0
Child:
2:65ff74ea1476
RTOS interrupt as thread

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ritzerk 0:f28b116a2be0 1 #include "mbed.h"
Ritzerk 0:f28b116a2be0 2
Ritzerk 0:f28b116a2be0 3 Thread ISRthread(osPriorityAboveNormal);
Ritzerk 0:f28b116a2be0 4 osThreadId ISRthreadId;
Ritzerk 0:f28b116a2be0 5
Ritzerk 1:5438da9e6654 6 RawSerial pc(USBTX, USBRX);
Ritzerk 1:5438da9e6654 7 Mutex serial_mutex;
Ritzerk 1:5438da9e6654 8
Ritzerk 0:f28b116a2be0 9 DigitalOut myled(LED1);
Ritzerk 1:5438da9e6654 10 DigitalOut myled4(LED4);
Ritzerk 0:f28b116a2be0 11
Ritzerk 0:f28b116a2be0 12 void newInput();
Ritzerk 0:f28b116a2be0 13 void ISR_thread();
Ritzerk 0:f28b116a2be0 14
Ritzerk 0:f28b116a2be0 15 int main() {
Ritzerk 0:f28b116a2be0 16
Ritzerk 0:f28b116a2be0 17 ISRthread.start(callback(ISR_thread));
Ritzerk 1:5438da9e6654 18 pc.attach(&newInput); //interrupt to catch input
Ritzerk 0:f28b116a2be0 19
Ritzerk 0:f28b116a2be0 20 while(1) {
Ritzerk 1:5438da9e6654 21 myled4 = 1;
Ritzerk 0:f28b116a2be0 22 }
Ritzerk 0:f28b116a2be0 23 }
Ritzerk 0:f28b116a2be0 24
Ritzerk 0:f28b116a2be0 25
Ritzerk 0:f28b116a2be0 26 void newInput() {
Ritzerk 1:5438da9e6654 27 pc.attach(NULL); //deatch the ISR to prevent recursive calls
Ritzerk 0:f28b116a2be0 28 osSignalSet(ISRthreadId,0x01);
Ritzerk 0:f28b116a2be0 29 }
Ritzerk 0:f28b116a2be0 30
Ritzerk 0:f28b116a2be0 31
Ritzerk 0:f28b116a2be0 32 void ISR_thread() {
Ritzerk 0:f28b116a2be0 33 ISRthreadId = osThreadGetId();
Ritzerk 0:f28b116a2be0 34 for(;;) {
Ritzerk 0:f28b116a2be0 35 osSignalWait(0x01, osWaitForever);
Ritzerk 1:5438da9e6654 36
Ritzerk 1:5438da9e6654 37 while (pc.readable()) {
Ritzerk 1:5438da9e6654 38 pc.putc(pc.getc());
Ritzerk 1:5438da9e6654 39 }
Ritzerk 1:5438da9e6654 40 myled = 1;
Ritzerk 1:5438da9e6654 41 osDelay(50);
Ritzerk 1:5438da9e6654 42 myled = 0;
Ritzerk 1:5438da9e6654 43 pc.attach(&newInput); //re-attach the ISR
Ritzerk 0:f28b116a2be0 44 }
Ritzerk 0:f28b116a2be0 45 }