/** * @file uart.h * @author chipsea * @brief * @version 0.1 * @date 2020-11-30 * @copyright Copyright (c) 2020, CHIPSEA Co., Ltd. * @note */ /******************************************************************************* * @file uart.h * @brief Contains all functions support for uart driver * @version 0.0 * @date 19. Oct. 2017 * @author qing.han * * *******************************************************************************/ #ifndef __UART_H__ #define __UART_H__ #ifdef __cplusplus extern "C" { #endif #include "types.h" #include "gpio.h" #define UART_TX_FIFO_SIZE 16 #define UART_RX_FIFO_SIZE 16 #define TX_FIFO_MODE 1 #define RX_FIFO_MODE 2 #define TX_RX_FIFO_MODE 3 #define FIFO_MODE 0//TX_RX_FIFO_MODE //0 #define FCR_RX_TRIGGER_00 0x00 #define FCR_RX_TRIGGER_01 0x40 #define FCR_RX_TRIGGER_10 0x80 #define FCR_RX_TRIGGER_11 0xc0 #define FCR_TX_TRIGGER_00 0x00 #define FCR_TX_TRIGGER_01 0x10 #define FCR_TX_TRIGGER_10 0x20 #define FCR_TX_TRIGGER_11 0x30 #define FCR_TX_FIFO_RESET 0x04 #define FCR_RX_FIFO_RESET 0x02 #define FCR_FIFO_ENABLE 0x01 #define IER_PTIME 0x80 #define IER_EDSSI 0x08 #define IER_ELSI 0x04 #define IER_ETBEI 0x02 #define IER_ERBFI 0x01 /*LSR 0x14*/ #define LSR_RFE 0x80 #define LSR_TEMT 0x40 #define LSR_THRE 0x20 #define LSR_BI 0x10 #define LSR_FE 0x08 #define LSR_PE 0x04 #define LSR_OE 0x02 #define LSR_DR 0x01 /*USR 0x7c*/ #define USR_RFF 0x10 #define USR_RFNE 0x08 #define USR_TFE 0x04 #define USR_TFNF 0x02 #define USR_BUSY 0x01 #define UART_FIFO_RX_TRIGGER FCR_RX_TRIGGER_10//FCR_RX_TRIGGER_10//FCR_RX_TRIGGER_11 #define UART_FIFO_TX_TRIGGER FCR_TX_TRIGGER_00//FCR_TX_TRIGGER_00//FCR_TX_TRIGGER_01 typedef enum{ UART0=0, //use uart 0 UART1=1, //use uart 1 }UART_INDEX_e; enum UARTIRQID{ NONE_IRQ = 0, NO_IRQ_PENDING_IRQ = 1, THR_EMPTY = 2, RDA_IRQ = 4, RLS_IRQ = 6, BUSY_IRQ = 7, TIMEOUT_IRQ = 12, }; enum{ TX_STATE_UNINIT = 0, TX_STATE_IDLE, TX_STATE_TX, TX_STATE_ERR }; typedef struct _uart_Evt_t{ uint8_t type; uint8_t* data; uint8_t len; }uart_Evt_t; typedef enum{ UART_EVT_TYPE_RX_DATA = 1, UART_EVT_TYPE_RX_DATA_TO, //case rx data of uart RX timeout UART_EVT_TYPE_TX_COMPLETED, } uart_Evt_Type_t; typedef void (*uart_Hdl_t)(uart_Evt_t* pev); typedef struct _uart_Cfg_t{ GpioPin_t tx_pin; GpioPin_t rx_pin; uint32_t baudrate; bool use_fifo; bool hw_fwctrl; bool use_tx_buf; bool parity; uart_Hdl_t evt_handler; }uart_Cfg_t; typedef struct _uart_spi_t{ UART_INDEX_e uart_index; }uart_t; typedef struct _uart_Tx_Buf_t{ uint8_t tx_state; uint16_t tx_data_offset; uint16_t tx_data_size; uint16_t tx_buf_size; uint8_t* tx_buf; }uart_Tx_Buf_t; ErrCode_t HalUartInit(UART_INDEX_e uart_index, uart_Cfg_t cfg); ErrCode_t HalUartDeInit(UART_INDEX_e uart_index); ErrCode_t HalUartRegister(UART_INDEX_e uart_index, uart_Hdl_t cb); ErrCode_t HalUartUnRegister(UART_INDEX_e uart_index); ErrCode_t HalUartGetTxReady(UART_INDEX_e uart_index); ErrCode_t HalUartSetTxBuf(UART_INDEX_e uart_index, uint8_t* buf, uint16_t size); ErrCode_t HalUartSendByte(UART_INDEX_e uart_index, unsigned char data); ErrCode_t HalUartSendBuf(UART_INDEX_e uart_index, uint8_t *buff, uint16_t len); void HalUartBaudSet(UART_INDEX_e uart_index, uint32 baud); ErrCode_t HalUartGetBusy(UART_INDEX_e uart_index); void __ATTR_SECTION_SRAM__ HalUart0IRQHandler(void); void __ATTR_SECTION_SRAM__ HalUart1IRQHandler(void); #ifdef __cplusplus } #endif #endif