Serial Interrupt Library with mbed RTOS for multi-threading
Dependencies: buffered-serial1 mbed-rtos mbed
Fork of Serial_interrupts by
main.cpp
- Committer:
- tylerjw
- Date:
- 2012-12-10
- Revision:
- 1:2f1e54d137c7
- Parent:
- 0:023c5cda6102
- Child:
- 2:3d959c9fc9d7
File content as of revision 1:2f1e54d137c7:
#include "mbed.h" #include "buffered_serial.h" // Serial TX & RX interrupt loopback test using formatted IO - sprintf and sscanf // Connect TX to RX (p9 to p10) // or can also use USB and type back in the number printed out in a terminal window // Sends out ASCII numbers in a loop and reads them back // If not the same number LED4 goes on // LED1 and LED2 indicate RX and TX interrupt routine activity // LED3 changing indicate main loop running BufferedSerial device(p13,p14); // tx, rx //IRQn device_irqn = UART1_IRQn; // Can also use USB and type back in the number printed out in a terminal window // Serial monitor_device(USBTX, USBRX); DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); DigitalOut led4(LED4); /* void Tx_interrupt(); void Rx_interrupt(); void send_line(); void read_line(); // Circular buffers for serial TX and RX data - used by interrupt routines const int buffer_size = 255; // might need to increase buffer size for high baud rates char tx_buffer[buffer_size]; char rx_buffer[buffer_size]; // Circular buffer pointers // volatile makes read-modify-write atomic volatile int tx_in=0; volatile int tx_out=0; volatile int rx_in=0; volatile int rx_out=0; */ // Line buffers for sprintf and sscanf char tx_line[80]; char rx_line[80]; // main test program int main() { int i=0; int rx_i=0; device.baud(9600); /* // Setup a serial interrupt function to receive data device.attach(&Rx_interrupt, Serial::RxIrq); // Setup a serial interrupt function to transmit data device.attach(&Tx_interrupt, Serial::TxIrq); */ // Formatted IO test using send and receive serial interrupts // with sprintf and sscanf while (1) { // Loop to generate different test values - send value in hex, decimal, and octal and then read back for (i=0; i<0xFFFF; i++) { led3=1; // Print ASCII number to tx line buffer in hex sprintf(tx_line,"%x\r\n",i); // Copy tx line buffer to large tx buffer for tx interrupt routine device.send_line(tx_line); // Print ASCII number to tx line buffer in decimal sprintf(tx_line,"%d\r\n",i); // Copy tx line buffer to large tx buffer for tx interrupt routine device.send_line(tx_line); // Print ASCII number to tx line buffer in octal sprintf(tx_line,"%o\r\n",i); // Copy tx line buffer to large tx buffer for tx interrupt routine device.send_line(tx_line); led3=0; // Read a line from the large rx buffer from rx interrupt routine device.read_line(rx_line); // Read ASCII number from rx line buffer sscanf(rx_line,"%x",&rx_i); // Check that numbers are the same if (i != rx_i) led4=1; // Read a line from the large rx buffer from rx interrupt routine device.read_line(rx_line); // Read ASCII number from rx line buffer sscanf(rx_line,"%d",&rx_i); // Check that numbers are the same if (i != rx_i) led4=1; // Read a line from the large rx buffer from rx interrupt routine device.read_line(rx_line); // Read ASCII number from rx line buffer sscanf(rx_line,"%o",&rx_i); // Check that numbers are the same if (i != rx_i) led4=1; } } }