UART 3 funcionando con interrupciones de Rx

Dependencies:   mbed

Committer:
fpapayannis
Date:
Sun Sep 11 15:06:27 2016 +0000
Revision:
4:e3357adeab6c
Parent:
3:c0f6dcd350a8
UART3 funcionando con Interrupciones de Lectura

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bcostm 0:028fac66239d 1 #include "mbed.h"
fpapayannis 2:ba95dcca2d90 2 #include "Serial.h"
bcostm 1:e9d1c42a73ae 3
fpapayannis 2:ba95dcca2d90 4 #define SERIAL_TX P0_10
fpapayannis 2:ba95dcca2d90 5 #define SERIAL_RX P0_11
fpapayannis 2:ba95dcca2d90 6 #define LEDStick P0_22
fpapayannis 2:ba95dcca2d90 7
bcostm 0:028fac66239d 8 Serial pc(SERIAL_TX, SERIAL_RX);
fpapayannis 2:ba95dcca2d90 9 DigitalOut myled(LEDStick);
fpapayannis 4:e3357adeab6c 10
fpapayannis 4:e3357adeab6c 11 void Rx_interrupt();
fpapayannis 4:e3357adeab6c 12
fpapayannis 4:e3357adeab6c 13
fpapayannis 4:e3357adeab6c 14 // Circular buffers for serial TX and RX data - used by interrupt routines
fpapayannis 4:e3357adeab6c 15 const int buffer_size = 255;
fpapayannis 4:e3357adeab6c 16 // might need to increase buffer size for high baud rates
fpapayannis 4:e3357adeab6c 17 //char tx_buffer[buffer_size+1];
fpapayannis 4:e3357adeab6c 18 char rx_buffer[buffer_size+1];
fpapayannis 4:e3357adeab6c 19 // Circular buffer pointers
fpapayannis 4:e3357adeab6c 20 // volatile makes read-modify-write atomic
fpapayannis 4:e3357adeab6c 21 //volatile int tx_in=0;
fpapayannis 4:e3357adeab6c 22 //volatile int tx_out=0;
fpapayannis 4:e3357adeab6c 23 volatile int rx_in=0;
fpapayannis 4:e3357adeab6c 24 volatile int rx_out=0;
fpapayannis 4:e3357adeab6c 25 // Line buffers for sprintf and sscanf
fpapayannis 4:e3357adeab6c 26 //char tx_line[80];
fpapayannis 4:e3357adeab6c 27 //char rx_line[80];
bcostm 0:028fac66239d 28
bcostm 0:028fac66239d 29 int main() {
fpapayannis 4:e3357adeab6c 30
fpapayannis 2:ba95dcca2d90 31 pc.baud(9600);
fpapayannis 2:ba95dcca2d90 32 pc.format(8,Serial::None,1);
fpapayannis 4:e3357adeab6c 33
fpapayannis 4:e3357adeab6c 34 // Setup a serial interrupt function to receive data
fpapayannis 4:e3357adeab6c 35 pc.attach(&Rx_interrupt, Serial::RxIrq);
fpapayannis 4:e3357adeab6c 36
bcostm 0:028fac66239d 37 pc.printf("Hello World !\n");
fpapayannis 4:e3357adeab6c 38 while(1)
fpapayannis 4:e3357adeab6c 39 {
fpapayannis 4:e3357adeab6c 40
fpapayannis 4:e3357adeab6c 41 if(rx_in)
fpapayannis 4:e3357adeab6c 42 {
fpapayannis 4:e3357adeab6c 43 pc.printf("%c",rx_buffer[rx_out]);
fpapayannis 4:e3357adeab6c 44 rx_out++;
fpapayannis 4:e3357adeab6c 45 if(rx_in==rx_out)
fpapayannis 4:e3357adeab6c 46 {
fpapayannis 4:e3357adeab6c 47 rx_in=0;
fpapayannis 4:e3357adeab6c 48 rx_out=0;
fpapayannis 4:e3357adeab6c 49 }
fpapayannis 4:e3357adeab6c 50 }
fpapayannis 4:e3357adeab6c 51 }
bcostm 0:028fac66239d 52 }
fpapayannis 4:e3357adeab6c 53
fpapayannis 4:e3357adeab6c 54
fpapayannis 4:e3357adeab6c 55
fpapayannis 4:e3357adeab6c 56 // Interupt Routine to read in data from serial port
fpapayannis 4:e3357adeab6c 57 void Rx_interrupt()
fpapayannis 4:e3357adeab6c 58 {
fpapayannis 4:e3357adeab6c 59 if(pc.readable())
fpapayannis 4:e3357adeab6c 60 {
fpapayannis 4:e3357adeab6c 61 rx_buffer[rx_in] = pc.getc();
fpapayannis 4:e3357adeab6c 62 rx_in++;
fpapayannis 4:e3357adeab6c 63 }
fpapayannis 4:e3357adeab6c 64 if(rx_in==buffer_size)
fpapayannis 4:e3357adeab6c 65 pc.printf("Buffer excedido");
fpapayannis 4:e3357adeab6c 66 return;
fpapayannis 4:e3357adeab6c 67 }