X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=inline;f=firmware%2Frs485.c;h=7c9032452930f221ab4c2f0fe0d9468dcd02f459;hb=HEAD;hp=6d16a2af05840de11d0808bfe1d63c0ded2e5100;hpb=4fe29561e6b7b4c0726dceb1a46569ed43afa376;p=openparking.git diff --git a/firmware/rs485.c b/firmware/rs485.c old mode 100755 new mode 100644 index 6d16a2a..7c90324 --- a/firmware/rs485.c +++ b/firmware/rs485.c @@ -34,7 +34,6 @@ static volatile char rxbuf[BUFSIZE], txbuf[BUFSIZE]; #define UART_BAUD 9600 #define UBRR_VAL ((F_CPU + 8UL * UART_BAUD) / (16UL*UART_BAUD) - 1) -#define wait_one_byte() _delay_us(10*1000000/UART_BAUD) void rs485_init() { @@ -99,13 +98,19 @@ ISR(USART_RX_vect) sei(); } +ISR(USART_TX_vect) +{ + UCSR0B &= ~_BV(TXCIE0); // disable further IRQs + ctl_pin_off(); +} + ISR(USART_UDRE_vect) { cli(); if (tx_head == tx_tail) { + UCSR0A |= _BV(TXC0); // clear the pending TXC flag + UCSR0B |= _BV(TXCIE0); // enable xmit complete irq UCSR0B &= ~_BV(UDRIE0); - wait_one_byte(); - ctl_pin_off(); } else { UDR0 = txbuf[tx_tail]; tx_tail = bufptr_inc(tx_tail);