fc10ef2e10
GD32F470ZGT6 based project with full peripheral support: - SDRAM (W9825G6KH) via EXMC - LCD NT35510 (480x800) via EXMC NOR/PSRAM - Flash (W25Q64) via SPI - UART (USART0) debug console - LED indicators - CMSIS-DAP debug interface - CMake + ARM GCC toolchain build system
44 lines
868 B
C++
44 lines
868 B
C++
#ifndef __UART_DRIVER_H__
|
|
#define __UART_DRIVER_H__
|
|
|
|
#include <cstdint>
|
|
#include "bus_core.h"
|
|
|
|
enum class UartPort : uint8_t {
|
|
_0 = 0,
|
|
_1, _2, _3, _4, _5, _6,
|
|
MAX
|
|
};
|
|
|
|
struct UartConfig {
|
|
uint32_t baudrate = 115200;
|
|
uint8_t data_bits = 8;
|
|
uint8_t stop_bits = 1;
|
|
uint8_t parity = 0;
|
|
};
|
|
|
|
class UartBus {
|
|
public:
|
|
explicit UartBus(UartPort port);
|
|
~UartBus();
|
|
|
|
UartBus(const UartBus &) = delete;
|
|
UartBus &operator=(const UartBus &) = delete;
|
|
|
|
RetCode init(const UartConfig &config);
|
|
RetCode deinit();
|
|
RetCode send_byte(uint8_t data);
|
|
RetCode send_data(const uint8_t *data, uint32_t len);
|
|
RetCode receive_byte(uint8_t *data, uint32_t timeout_ms);
|
|
RetCode irq_handler();
|
|
|
|
static UartBus &default_instance();
|
|
|
|
private:
|
|
UartPort port_;
|
|
UartConfig config_;
|
|
bool initialized_ = false;
|
|
};
|
|
|
|
#endif
|