Serial Interrupt Library with mbed RTOS for multi-threading
Dependencies: buffered-serial1 mbed-rtos mbed
Fork of Serial_interrupts by
Revision 7:180678808740, committed 2012-12-10
- Comitter:
- tylerjw
- Date:
- Mon Dec 10 23:27:28 2012 +0000
- Parent:
- 6:ddab1e541812
- Child:
- 8:df59d668cab1
- Commit message:
- tx semaphore
Changed in this revision
| buffered_serial.cpp | Show annotated file Show diff for this revision Revisions of this file |
| buffered_serial.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/buffered_serial.cpp Mon Dec 10 23:07:39 2012 +0000
+++ b/buffered_serial.cpp Mon Dec 10 23:27:28 2012 +0000
@@ -43,8 +43,8 @@
if (IS_TX_FULL) {
// End Critical Section - need to let interrupt routine empty buffer by sending
NVIC_EnableIRQ(device_irqn);
- while (IS_TX_FULL) ; // buffer is full
-
+ //while (IS_TX_FULL) ; // buffer is full
+ tx_sem.wait();
// Start Critical Section - don't interrupt while changing global buffer variables
NVIC_DisableIRQ(device_irqn);
}
@@ -72,22 +72,20 @@
// Loop reading rx buffer characters until end of line character
while ((i==0) || (rx_line[i-1] != '\r')) {
// Wait if buffer empty
- if (rx_in == rx_out) { // buffer empty
+ if (IS_RX_EMPTY) { // buffer empty
// End Critical Section - need to allow rx interrupt to get new characters for buffer
NVIC_EnableIRQ(device_irqn);
//while (rx_in == rx_out) ; // buffer empty
rx_sem.wait();
// Start Critical Section - don't interrupt while changing global buffer variables
NVIC_DisableIRQ(device_irqn);
- rx_line[i] = rx_buffer[rx_out];
- i++;
- rx_out = NEXT(rx_out);
} else {
rx_sem.wait();
- rx_line[i] = rx_buffer[rx_out];
- i++;
- rx_out = NEXT(rx_out);
}
+ rx_line[i] = rx_buffer[rx_out];
+ i++;
+ rx_out = NEXT(rx_out);
+
}
rx_line[i-1] = 0;
// End Critical Section
@@ -117,5 +115,7 @@
LPC_UART1->THR = tx_buffer[tx_out]; // send the character
tx_out = NEXT(tx_out);
}
+ if(!IS_TX_FULL) // if not full
+ tx_sem.release();
led2=0;
}
\ No newline at end of file
--- a/buffered_serial.h Mon Dec 10 23:07:39 2012 +0000 +++ b/buffered_serial.h Mon Dec 10 23:27:28 2012 +0000 @@ -6,6 +6,7 @@ #define NEXT(x) ((x+1)&BUFFER_SIZE) #define IS_TX_FULL (((tx_in + 1) & BUFFER_SIZE) == tx_out) #define IS_RX_FULL (((rx_in + 1) & BUFFER_SIZE) == rx_out) +#define IS_RX_EMPTY (rx_in == rx_out) #include "mbed.h" #include "rtos.h"
