,
Dependencies: mbed circularBuff
main.cpp@0:df063cda6b8a, 2022-01-23 (annotated)
- Committer:
- anyela
- Date:
- Sun Jan 23 04:59:03 2022 +0000
- Revision:
- 0:df063cda6b8a
..
Who changed what in which revision?
User | Revision | Line number | New 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 | } |