chat program over RS485 using serial interrupts and circular buffer

Dependencies:   mbed circularBuff

Committer:
ivaariasga
Date:
Fri May 17 13:09:38 2019 +0000
Revision:
0:10acfb197498
chat program over RS485 using serial interrupts and circular buffer.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ivaariasga 0:10acfb197498 1 #include "mbed.h"
ivaariasga 0:10acfb197498 2 #include "circularBuff.h"
ivaariasga 0:10acfb197498 3
ivaariasga 0:10acfb197498 4 Serial pc(USBTX,USBRX), rs485(p9,p10);
ivaariasga 0:10acfb197498 5 DigitalOut en(p19);
ivaariasga 0:10acfb197498 6
ivaariasga 0:10acfb197498 7 DigitalOut led1(LED1);
ivaariasga 0:10acfb197498 8 circ_buf_t buf1, buf2;
ivaariasga 0:10acfb197498 9 volatile bool buf1ready, buf2ready;
ivaariasga 0:10acfb197498 10
ivaariasga 0:10acfb197498 11 void rs485Rx_isr(){
ivaariasga 0:10acfb197498 12 uint8_t a = rs485.getc();
ivaariasga 0:10acfb197498 13 if(a != NULL)
ivaariasga 0:10acfb197498 14 circ_buf_put(&buf1,a);
ivaariasga 0:10acfb197498 15 else{
ivaariasga 0:10acfb197498 16 circ_buf_put(&buf1,a);
ivaariasga 0:10acfb197498 17 buf1ready=true;
ivaariasga 0:10acfb197498 18 }
ivaariasga 0:10acfb197498 19 }
ivaariasga 0:10acfb197498 20
ivaariasga 0:10acfb197498 21 void rs485Tx_isr(){
ivaariasga 0:10acfb197498 22 en=0;
ivaariasga 0:10acfb197498 23 }
ivaariasga 0:10acfb197498 24
ivaariasga 0:10acfb197498 25 void pcRx_isr(){
ivaariasga 0:10acfb197498 26 uint8_t a = pc.getc();
ivaariasga 0:10acfb197498 27 if(a != NULL)
ivaariasga 0:10acfb197498 28 circ_buf_put(&buf2,a);
ivaariasga 0:10acfb197498 29 else{
ivaariasga 0:10acfb197498 30 circ_buf_put(&buf2,a);
ivaariasga 0:10acfb197498 31 buf2ready=true;
ivaariasga 0:10acfb197498 32 }
ivaariasga 0:10acfb197498 33 }
ivaariasga 0:10acfb197498 34
ivaariasga 0:10acfb197498 35 int main() {
ivaariasga 0:10acfb197498 36 buf1.size=255;
ivaariasga 0:10acfb197498 37 buf2.size=255;
ivaariasga 0:10acfb197498 38 buf1.buffer=(uint8_t*)malloc(255);
ivaariasga 0:10acfb197498 39 buf2.buffer=(uint8_t*)malloc(255);
ivaariasga 0:10acfb197498 40 pc.printf("Hola");
ivaariasga 0:10acfb197498 41 en=1;
ivaariasga 0:10acfb197498 42 rs485.printf("Hola");
ivaariasga 0:10acfb197498 43 pc.attach(&pcRx_isr,Serial::RxIrq);
ivaariasga 0:10acfb197498 44 rs485.attach(&rs485Rx_isr,Serial::RxIrq);
ivaariasga 0:10acfb197498 45 rs485.attach(&rs485Tx_isr,Serial::TxIrq);
ivaariasga 0:10acfb197498 46 while(1) {
ivaariasga 0:10acfb197498 47 if(buf2ready){
ivaariasga 0:10acfb197498 48 en=1;
ivaariasga 0:10acfb197498 49 uint8_t a=0;
ivaariasga 0:10acfb197498 50 do{
ivaariasga 0:10acfb197498 51 circ_buf_get(&buf2,&a);
ivaariasga 0:10acfb197498 52 rs485.putc(a);
ivaariasga 0:10acfb197498 53 }while(a!=NULL);
ivaariasga 0:10acfb197498 54 buf2ready=false;
ivaariasga 0:10acfb197498 55 }
ivaariasga 0:10acfb197498 56 if(buf1ready){
ivaariasga 0:10acfb197498 57 uint8_t a=0;
ivaariasga 0:10acfb197498 58 do{
ivaariasga 0:10acfb197498 59 circ_buf_get(&buf1,&a);
ivaariasga 0:10acfb197498 60 pc.putc(a);
ivaariasga 0:10acfb197498 61 }while(a!=NULL);
ivaariasga 0:10acfb197498 62 buf1ready=false;
ivaariasga 0:10acfb197498 63 }
ivaariasga 0:10acfb197498 64 led1 = 1;
ivaariasga 0:10acfb197498 65 wait(0.2);
ivaariasga 0:10acfb197498 66 led1 = 0;
ivaariasga 0:10acfb197498 67 wait(0.2);
ivaariasga 0:10acfb197498 68 }
ivaariasga 0:10acfb197498 69 }