chat program over RS485 using serial interrupts and circular buffer
Dependencies: mbed circularBuff
main.cpp
- Committer:
- ivaariasga
- Date:
- 2019-05-17
- Revision:
- 0:10acfb197498
File content as of revision 0:10acfb197498:
#include "mbed.h" #include "circularBuff.h" Serial pc(USBTX,USBRX), rs485(p9,p10); DigitalOut en(p19); DigitalOut led1(LED1); circ_buf_t buf1, buf2; volatile bool buf1ready, buf2ready; void rs485Rx_isr(){ uint8_t a = rs485.getc(); if(a != NULL) circ_buf_put(&buf1,a); else{ circ_buf_put(&buf1,a); buf1ready=true; } } void rs485Tx_isr(){ en=0; } void pcRx_isr(){ uint8_t a = pc.getc(); if(a != NULL) circ_buf_put(&buf2,a); else{ circ_buf_put(&buf2,a); buf2ready=true; } } int main() { buf1.size=255; buf2.size=255; buf1.buffer=(uint8_t*)malloc(255); buf2.buffer=(uint8_t*)malloc(255); pc.printf("Hola"); en=1; rs485.printf("Hola"); pc.attach(&pcRx_isr,Serial::RxIrq); rs485.attach(&rs485Rx_isr,Serial::RxIrq); rs485.attach(&rs485Tx_isr,Serial::TxIrq); while(1) { if(buf2ready){ en=1; uint8_t a=0; do{ circ_buf_get(&buf2,&a); rs485.putc(a); }while(a!=NULL); buf2ready=false; } if(buf1ready){ uint8_t a=0; do{ circ_buf_get(&buf1,&a); pc.putc(a); }while(a!=NULL); buf1ready=false; } led1 = 1; wait(0.2); led1 = 0; wait(0.2); } }