#ifndef __HARDWARE_UART_H__ #define __HARDWARE_UART_H__ #include "reg.h" #include "uart_reg.h" #define UART_INT_RI (1 << 0U) #define UART_INT_CTS (1 << 1U) #define UART_INT_DCD (1 << 2U) #define UART_INT_DSR (1 << 3U) #define UART_INT_RX (1 << 4U) #define UART_INT_TX (1 << 5U) #define UART_INT_RTO (1 << 6U) #define UART_INT_FE (1 << 7U) #define UART_INT_PE (1 << 8U) #define UART_INT_BE (1 << 9U) #define UART_INT_OE (1 << 10U) #define UART_INT_ALL ((1 << 11U) - 1) #define UART_MODE_NONE (0) #define UART_MODE_TX_ONLY (1) #define UART_MODE_RX_ONLY (2) #define UART_MODE_TX_RX (3) #define UART_DATABITS_5 (0 << UART_UARTLCR_H_WLEN_POS) #define UART_DATABITS_6 (1 << UART_UARTLCR_H_WLEN_POS) #define UART_DATABITS_7 (2 << UART_UARTLCR_H_WLEN_POS) #define UART_DATABITS_8 (3 << UART_UARTLCR_H_WLEN_POS) #define UART_PARITY_NONE (0) #define UART_PARITY_ODD (UART_UARTLCR_H_PEN) #define UART_PARITY_EVEN (UART_UARTLCR_H_PEN | UART_UARTLCR_H_EPS) #define UART_PARITY_MARK0 (UART_UARTLCR_H_PEN | UART_UARTLCR_H_SPS | UART_UARTLCR_H_EPS) #define UART_PARITY_MARK1 (UART_UARTLCR_H_PEN | UART_UARTLCR_H_SPS) #define UART_STOPBITS_1 (0) #define UART_STOPBITS_2 (UART_UARTLCR_H_STP2) #define UART_FIFO_LEVEL_1_8 (0) #define UART_FIFO_LEVEL_1_4 (1) #define UART_FIFO_LEVEL_1_2 (2) #define UART_FIFO_LEVEL_3_4 (3) #define UART_FIFO_LEVEL_7_8 (4) #define UART_FLAG_CTS (1 << 0U) #define UART_FLAG_DSR (1 << 1U) #define UART_FLAG_DCD (1 << 2U) #define UART_FLAG_BUSY (1 << 3U) #define UART_FLAG_RXFE (1 << 4U) #define UART_FLAG_TXFF (1 << 5U) #define UART_FLAG_RXFF (1 << 6U) #define UART_FLAG_TXFE (1 << 7U) #define UART_FLAG_RI (1 << 8U) struct uart_cfg_s { uint32_t baudrate; uint8_t mode; uint8_t data_bits; uint8_t parity; uint8_t stop_bits; uint8_t fifo_enable; uint8_t tx_fifo_level; uint8_t rx_fifo_level; }; #ifdef __cplusplus extern "C" { #endif void uart_init(uart_hw_t *uart, uint32_t baudrate, uint32_t cfg); uint32_t uart_get_flags(uart_hw_t *uart); void uart_write_block(uart_hw_t *uart, uint8_t *data, uint32_t length); int uart_put_char(uart_hw_t *uart, uint8_t c); int uart_get_char(uart_hw_t *uart); uint32_t uart_write(uart_hw_t *uart, uint8_t *data, uint32_t length); uint32_t uart_read(uart_hw_t *uart, uint8_t *data, uint32_t length); uint32_t uart_int_get_raw_status(uart_hw_t *uart); uint32_t uart_int_get_status(uart_hw_t *uart); void uart_int_clear(uart_hw_t *uart, uint32_t int_type); void uart_int_enable(uart_hw_t *uart, uint32_t int_type); void uart_int_disable(uart_hw_t *uart, uint32_t int_type); uint32_t uart_int_get_mask_status(uart_hw_t *uart); #ifdef __cplusplus } #endif #endif /* __HARDWARE_UART_H__ */