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/SConscript | 9 +++++++++ uart/litex_uart.h | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 uart/litex_uart.h diff --git a/uart/SConscript b/uart/SConscript index dcf6d3e..c37f4aa 100644 --- a/uart/SConscript +++ b/uart/SConscript @@ -16,6 +16,15 @@ if 'stm32_uart' in periph: 'args': [data['offset']], }) +if 'litex_uart' in periph: + headers.append('litex_uart.h') + for name, data in periph['litex_uart'].items(): + instances.append({ + 'type': 'LiteX_UART_t', + 'name': name, + 'args': [data['offset']], + }) + env.Jinja2('uart.h', '../templates/periph_instances.h.j2', headers = headers, instances = instances, aliases = aliases) Return('sources') 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