,
Dependencies: mbed circularBuff
main.cpp
- Committer:
- anyela
- Date:
- 2022-01-23
- Revision:
- 0:df063cda6b8a
File content as of revision 0:df063cda6b8a:
#include "mbed.h" #include "circularBuff.h" // RECEPCIÓN Y TRANSMISIÓN DE DATSO A TRAVES DE DOS DISPOSITIVOS # define BUFFER_SIZE 300 // DECLARAMOS EL TAMAÑO DEL BUFFER Serial pc (USBTX,USBRX); // TX RX Serial Placa2(p13 , p14); // conexion serial puertos UART PLACA DOS circ_buf_t BUFFER1; // Estrucura buffer 1 circ_buf_t BUFFER2; // Estructura buffer 2 // Declaración de variables volátiles volatile bool BUFFER1CHECK = false; volatile bool BUFFER2CHECK = false; //volátil: el campo puede ser modificado por varios subprocesos que se ejecutan al mismo tiempo // Función de interrupción recepción de datos por serial pc void pcRXInterrup(){ uint8_t data = pc.getc(); if(data != NULL){ circ_buf_put(&BUFFER1, data); } else { circ_buf_put(&BUFFER1, data); BUFFER1CHECK = true; } } // subRUT transmisión puerto serial pc void pcTXInterrup(){ uint8_t dato = 0; circ_buf_get(&BUFFER1, &dato); pc.putc(dato); } // subRUT recepcion 2Mbed serial placa 2 void Placa2RXInterrup(){ uint8_t data = Placa2.getc(); if(data != NULL) circ_buf_put(&BUFFER2, data); // Se guarda en el buffer el dato que llegan de la otra mbed else { circ_buf_put(&BUFFER2, data); BUFFER2CHECK = true; } uint8_t dato2 = 0; // Visualizar en la pantalla el dato recibido de la otra mbed circ_buf_get(&BUFFER2, &dato2); pc.putc(dato2); } // subRUT trasnmision 2MBed serial placa 2 void Placa2TXInterrup(){ uint8_t dato = Placa2.putc(pc.getc()); circ_buf_put(&BUFFER2, dato); } int main() { pc.baud(115200); // velocidad baudios BUFFER1.buffer = (uint8_t*)malloc(BUFFER_SIZE); // espacio de memoria para el buffer1 BUFFER2.buffer = (uint8_t*)malloc(BUFFER_SIZE); // espacio de memoria para el buffer2 BUFFER1.size=BUFFER_SIZE; // inicializado buffer 1 BUFFER2.size=BUFFER_SIZE; // inicializado buffer 2 // interrupciones pc pc.attach(&pcRXInterrup,Serial::RxIrq); pc.attach(&pcTXInterrup,Serial::TxIrq); // interrupciones segunda placa Placa2.attach(Placa2RXInterrup,Serial::RxIrq); Placa2.attach(Placa2TXInterrup,Serial::TxIrq); while(1) { if(BUFFER1CHECK == true) // revision buffer preparado { uint8_t Z = NULL; do{ // do while, primero ejecuta y luego revisa la condicion del while circ_buf_get(&BUFFER1, &Z); // Para visualizar en el CoolTerm pc.putc(Z); }while(Z!=NULL); BUFFER1CHECK = false; } } }