Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Revision 4:e3357adeab6c, committed 2016-09-11
- Comitter:
- fpapayannis
- Date:
- Sun Sep 11 15:06:27 2016 +0000
- Parent:
- 3:c0f6dcd350a8
- Commit message:
- UART3 funcionando con Interrupciones de Lectura
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Fri Sep 09 23:54:26 2016 +0000
+++ b/main.cpp Sun Sep 11 15:06:27 2016 +0000
@@ -1,31 +1,67 @@
#include "mbed.h"
#include "Serial.h"
-//------------------------------------
-// Hyperterminal configuration
-// 9600 bauds, 8-bit data, no parity
-//------------------------------------
#define SERIAL_TX P0_10
#define SERIAL_RX P0_11
#define LEDStick P0_22
Serial pc(SERIAL_TX, SERIAL_RX);
-
DigitalOut myled(LEDStick);
+
+void Rx_interrupt();
+
+
+// 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+1];
+char rx_buffer[buffer_size+1];
+// 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];
int main() {
- int i = 1;
- char caracter='A';
+
pc.baud(9600);
pc.format(8,Serial::None,1);
+
+ // Setup a serial interrupt function to receive data
+ pc.attach(&Rx_interrupt, Serial::RxIrq);
+
pc.printf("Hello World !\n");
- while(1) {
- wait(1);
- caracter=pc.getc();
- wait(1);
- pc.putc(caracter);
- //pc.printf("This program runs since %d seconds.\n", i++);
- myled = !myled;
- }
+ while(1)
+ {
+
+ if(rx_in)
+ {
+ pc.printf("%c",rx_buffer[rx_out]);
+ rx_out++;
+ if(rx_in==rx_out)
+ {
+ rx_in=0;
+ rx_out=0;
+ }
+ }
+}
}
-
\ No newline at end of file
+
+
+
+// Interupt Routine to read in data from serial port
+void Rx_interrupt()
+{
+ if(pc.readable())
+ {
+ rx_buffer[rx_in] = pc.getc();
+ rx_in++;
+ }
+ if(rx_in==buffer_size)
+ pc.printf("Buffer excedido");
+ return;
+}
\ No newline at end of file