chat program over RS485 using serial interrupts and circular buffer
Dependencies: mbed circularBuff
main.cpp@0:10acfb197498, 2019-05-17 (annotated)
- 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?
User | Revision | Line number | New 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 | } |