,

Dependencies:   mbed circularBuff

Committer:
anyela
Date:
Sun Jan 23 04:59:03 2022 +0000
Revision:
0:df063cda6b8a
..

Who changed what in which revision?

UserRevisionLine numberNew contents of line
anyela 0:df063cda6b8a 1 #include "mbed.h"
anyela 0:df063cda6b8a 2 #include "circularBuff.h"
anyela 0:df063cda6b8a 3
anyela 0:df063cda6b8a 4
anyela 0:df063cda6b8a 5 // RECEPCIÓN Y TRANSMISIÓN DE DATSO A TRAVES DE DOS DISPOSITIVOS
anyela 0:df063cda6b8a 6
anyela 0:df063cda6b8a 7
anyela 0:df063cda6b8a 8
anyela 0:df063cda6b8a 9 # define BUFFER_SIZE 300 // DECLARAMOS EL TAMAÑO DEL BUFFER
anyela 0:df063cda6b8a 10
anyela 0:df063cda6b8a 11 Serial pc (USBTX,USBRX); // TX RX
anyela 0:df063cda6b8a 12 Serial Placa2(p13 , p14); // conexion serial puertos UART PLACA DOS
anyela 0:df063cda6b8a 13
anyela 0:df063cda6b8a 14 circ_buf_t BUFFER1; // Estrucura buffer 1
anyela 0:df063cda6b8a 15 circ_buf_t BUFFER2; // Estructura buffer 2
anyela 0:df063cda6b8a 16
anyela 0:df063cda6b8a 17
anyela 0:df063cda6b8a 18 // Declaración de variables volátiles
anyela 0:df063cda6b8a 19 volatile bool BUFFER1CHECK = false;
anyela 0:df063cda6b8a 20 volatile bool BUFFER2CHECK = false; //volátil: el campo puede ser modificado por varios subprocesos que se ejecutan al mismo tiempo
anyela 0:df063cda6b8a 21
anyela 0:df063cda6b8a 22 // Función de interrupción recepción de datos por serial pc
anyela 0:df063cda6b8a 23 void pcRXInterrup(){
anyela 0:df063cda6b8a 24 uint8_t data = pc.getc();
anyela 0:df063cda6b8a 25 if(data != NULL){
anyela 0:df063cda6b8a 26 circ_buf_put(&BUFFER1, data);
anyela 0:df063cda6b8a 27
anyela 0:df063cda6b8a 28 }
anyela 0:df063cda6b8a 29 else
anyela 0:df063cda6b8a 30 {
anyela 0:df063cda6b8a 31 circ_buf_put(&BUFFER1, data);
anyela 0:df063cda6b8a 32 BUFFER1CHECK = true;
anyela 0:df063cda6b8a 33 }
anyela 0:df063cda6b8a 34 }
anyela 0:df063cda6b8a 35
anyela 0:df063cda6b8a 36
anyela 0:df063cda6b8a 37 // subRUT transmisión puerto serial pc
anyela 0:df063cda6b8a 38 void pcTXInterrup(){
anyela 0:df063cda6b8a 39 uint8_t dato = 0;
anyela 0:df063cda6b8a 40 circ_buf_get(&BUFFER1, &dato);
anyela 0:df063cda6b8a 41 pc.putc(dato);
anyela 0:df063cda6b8a 42 }
anyela 0:df063cda6b8a 43
anyela 0:df063cda6b8a 44
anyela 0:df063cda6b8a 45 // subRUT recepcion 2Mbed serial placa 2
anyela 0:df063cda6b8a 46
anyela 0:df063cda6b8a 47 void Placa2RXInterrup(){
anyela 0:df063cda6b8a 48 uint8_t data = Placa2.getc();
anyela 0:df063cda6b8a 49 if(data != NULL)
anyela 0:df063cda6b8a 50 circ_buf_put(&BUFFER2, data); // Se guarda en el buffer el dato que llegan de la otra mbed
anyela 0:df063cda6b8a 51 else
anyela 0:df063cda6b8a 52 {
anyela 0:df063cda6b8a 53 circ_buf_put(&BUFFER2, data);
anyela 0:df063cda6b8a 54 BUFFER2CHECK = true;
anyela 0:df063cda6b8a 55 }
anyela 0:df063cda6b8a 56
anyela 0:df063cda6b8a 57 uint8_t dato2 = 0; // Visualizar en la pantalla el dato recibido de la otra mbed
anyela 0:df063cda6b8a 58 circ_buf_get(&BUFFER2, &dato2);
anyela 0:df063cda6b8a 59 pc.putc(dato2);
anyela 0:df063cda6b8a 60
anyela 0:df063cda6b8a 61
anyela 0:df063cda6b8a 62 }
anyela 0:df063cda6b8a 63
anyela 0:df063cda6b8a 64
anyela 0:df063cda6b8a 65
anyela 0:df063cda6b8a 66 // subRUT trasnmision 2MBed serial placa 2
anyela 0:df063cda6b8a 67
anyela 0:df063cda6b8a 68 void Placa2TXInterrup(){
anyela 0:df063cda6b8a 69 uint8_t dato = Placa2.putc(pc.getc());
anyela 0:df063cda6b8a 70 circ_buf_put(&BUFFER2, dato);
anyela 0:df063cda6b8a 71 }
anyela 0:df063cda6b8a 72
anyela 0:df063cda6b8a 73
anyela 0:df063cda6b8a 74
anyela 0:df063cda6b8a 75
anyela 0:df063cda6b8a 76 int main() {
anyela 0:df063cda6b8a 77
anyela 0:df063cda6b8a 78
anyela 0:df063cda6b8a 79 pc.baud(115200); // velocidad baudios
anyela 0:df063cda6b8a 80
anyela 0:df063cda6b8a 81 BUFFER1.buffer = (uint8_t*)malloc(BUFFER_SIZE); // espacio de memoria para el buffer1
anyela 0:df063cda6b8a 82 BUFFER2.buffer = (uint8_t*)malloc(BUFFER_SIZE); // espacio de memoria para el buffer2
anyela 0:df063cda6b8a 83
anyela 0:df063cda6b8a 84 BUFFER1.size=BUFFER_SIZE; // inicializado buffer 1
anyela 0:df063cda6b8a 85 BUFFER2.size=BUFFER_SIZE; // inicializado buffer 2
anyela 0:df063cda6b8a 86
anyela 0:df063cda6b8a 87
anyela 0:df063cda6b8a 88 // interrupciones pc
anyela 0:df063cda6b8a 89 pc.attach(&pcRXInterrup,Serial::RxIrq);
anyela 0:df063cda6b8a 90 pc.attach(&pcTXInterrup,Serial::TxIrq);
anyela 0:df063cda6b8a 91
anyela 0:df063cda6b8a 92 // interrupciones segunda placa
anyela 0:df063cda6b8a 93 Placa2.attach(Placa2RXInterrup,Serial::RxIrq);
anyela 0:df063cda6b8a 94 Placa2.attach(Placa2TXInterrup,Serial::TxIrq);
anyela 0:df063cda6b8a 95
anyela 0:df063cda6b8a 96
anyela 0:df063cda6b8a 97
anyela 0:df063cda6b8a 98
anyela 0:df063cda6b8a 99 while(1) {
anyela 0:df063cda6b8a 100
anyela 0:df063cda6b8a 101 if(BUFFER1CHECK == true) // revision buffer preparado
anyela 0:df063cda6b8a 102 {
anyela 0:df063cda6b8a 103 uint8_t Z = NULL;
anyela 0:df063cda6b8a 104 do{ // do while, primero ejecuta y luego revisa la condicion del while
anyela 0:df063cda6b8a 105 circ_buf_get(&BUFFER1, &Z); // Para visualizar en el CoolTerm
anyela 0:df063cda6b8a 106 pc.putc(Z);
anyela 0:df063cda6b8a 107 }while(Z!=NULL);
anyela 0:df063cda6b8a 108 BUFFER1CHECK = false;
anyela 0:df063cda6b8a 109
anyela 0:df063cda6b8a 110 }
anyela 0:df063cda6b8a 111
anyela 0:df063cda6b8a 112 }
anyela 0:df063cda6b8a 113 }