From a07beb97685caed5ddf203d27051c7318e2e5e56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Wed, 18 Nov 2020 18:11:15 +0100 Subject: [PATCH] Create simple UART library --- firmware/uart.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++ firmware/uart.h | 20 +++++++++++++ 2 files changed, 94 insertions(+) create mode 100755 firmware/uart.c create mode 100755 firmware/uart.h 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<