From 37a375c6b7dd83d2ac23069481c566bd9f9a7fd3 Mon Sep 17 00:00:00 2001 From: Vegard Storheil Eriksen Date: Sat, 10 Sep 2022 20:23:18 +0200 Subject: litex: Add UART. --- uart/litex_uart.h | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 uart/litex_uart.h (limited to 'uart/litex_uart.h') diff --git a/uart/litex_uart.h b/uart/litex_uart.h new file mode 100644 index 0000000..a1494e6 --- /dev/null +++ b/uart/litex_uart.h @@ -0,0 +1,45 @@ +#pragma once + +#include + +struct LiteX_UART_reg_t { + volatile uint32_t RXTX; + volatile uint32_t TXFULL; + volatile uint32_t RXEMPTY; + volatile uint32_t EV_STATUS; + volatile uint32_t EV_PENDING; + volatile uint32_t EV_ENABLE; + volatile uint32_t TXEMPTY; + volatile uint32_t RXFULL; +}; + +class LiteX_UART_t : public mmio_ptr { + public: + using mmio_ptr::ptr; + + bool txe() const { + return !ptr()->TXFULL; + } + + bool rxne() const { + return !ptr()->RXEMPTY; + } + + uint8_t read() const { + return ptr()->RXTX; + } + + void write(uint8_t data) const { + ptr()->RXTX = data; + } + + uint8_t read_blocking() const { + while(!rxne()); + return read(); + } + + void write_blocking(uint8_t data) const { + while(!txe()); + write(data); + } +}; -- cgit v1.2.3