diff --git a/firmware/uart.c b/firmware/uart.c new file mode 100755 index 0000000..cd02a42 --- /dev/null +++ b/firmware/uart.c @@ -0,0 +1,74 @@ +#include +#include +#include +#include "uart.h" + +// Ring buffer macros +#define RBUF(BUF_SIZE) struct { char data[BUF_SIZE]; uint8_t head; uint8_t tail; } +#define RBUF_NEXT(BUF_IDX, MOD_MASK) (((BUF_IDX) + 1) & MOD_MASK) +#define RBUF_FORWARD(BUF_IDX, MOD_MASK) BUF_IDX = RBUF_NEXT(BUF_IDX, MOD_MASK) +#define RBUF_EMPTY(BUFF) (BUFF.head == BUFF.tail) + +volatile RBUF(UART_RX_BUF_SIZE) rx_buffer; +volatile RBUF(UART_TX_BUF_SIZE) tx_buffer; + +void uart_init(void) +{ + UBRRH = (uint8_t) (__UBRR>>8); + UBRRL = (uint8_t) __UBRR; + + UCSRB = (1<