rp2040/driver/inc/uart.h

88 lines
2.5 KiB
C
Raw Normal View History

2025-03-29 16:32:49 +08:00
#ifndef __HARDWARE_UART_H__
#define __HARDWARE_UART_H__
2025-03-19 15:59:12 +08:00
#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)
2025-06-02 17:27:26 +08:00
#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)
2025-03-19 15:59:12 +08:00
#define UART_PARITY_NONE (0)
2025-06-02 17:27:26 +08:00
#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)
2025-03-19 15:59:12 +08:00
#define UART_STOPBITS_1 (0)
2025-06-02 17:27:26 +08:00
#define UART_STOPBITS_2 (UART_UARTLCR_H_STP2)
2025-03-19 15:59:12 +08:00
#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 {
2025-03-19 22:15:07 +08:00
uint32_t baudrate;
2025-03-19 15:59:12 +08:00
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
2025-06-02 17:27:26 +08:00
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);
2025-03-19 15:59:12 +08:00
2025-06-02 17:27:26 +08:00
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);
2025-03-19 15:59:12 +08:00
#ifdef __cplusplus
}
#endif
2025-03-29 16:32:49 +08:00
#endif /* __HARDWARE_UART_H__ */