| #ifndef _INCLUDED_UART_H_ |
| #define _INCLUDED_UART_H_ |
| |
| #include <eagle_soc.h> |
| |
| #define UART0 (0) |
| #define UART1 (1) |
| |
| typedef enum { |
| UART_FIVE_BITS = 0x0, |
| UART_SIX_BITS = 0x1, |
| UART_SEVEN_BITS = 0x2, |
| UART_EIGHT_BITS = 0x3 |
| } UartBitsNum4Char; |
| |
| typedef enum { |
| UART_ONE_STOP_BIT = 0, |
| UART_ONE_HALF_STOP_BIT = BIT2, |
| UART_TWO_STOP_BIT = BIT2 |
| } UartStopBitsNum; |
| |
| typedef enum { |
| UART_NONE_BITS = 0, |
| UART_ODD_BITS = BIT0, |
| UART_EVEN_BITS = 0 |
| } UartParityMode; |
| |
| typedef enum { |
| UART_STICK_PARITY_DIS = 0, |
| UART_STICK_PARITY_EN = BIT1 |
| } UartExistParity; |
| |
| typedef enum { |
| UART_BIT_RATE_9600 = 9600, |
| UART_BIT_RATE_19200 = 19200, |
| UART_BIT_RATE_38400 = 38400, |
| UART_BIT_RATE_57600 = 57600, |
| UART_BIT_RATE_74880 = 74880, |
| UART_BIT_RATE_115200 = 115200, |
| UART_BIT_RATE_230400 = 230400, |
| UART_BIT_RATE_256000 = 256000, |
| UART_BIT_RATE_460800 = 460800, |
| UART_BIT_RATE_921600 = 921600 |
| } UartBautRate; |
| |
| typedef enum { |
| UART_NONE_CTRL, |
| UART_HARDWARE_CTRL, |
| UART_XON_XOFF_CTRL |
| } UartFlowCtrl; |
| |
| typedef enum { |
| UART_EMPTY, |
| UART_UNDER_WRITE, |
| UART_WRITE_OVER |
| } RcvMsgBuffState; |
| |
| typedef struct { |
| uint32 RcvBuffSize; |
| uint8 *pRcvMsgBuff; |
| uint8 *pWritePos; |
| uint8 *pReadPos; |
| uint8 TrigLvl; //JLU: may need to pad |
| RcvMsgBuffState BuffState; |
| } RcvMsgBuff; |
| |
| typedef struct { |
| uint32 TrxBuffSize; |
| uint8 *pTrxBuff; |
| } TrxMsgBuff; |
| |
| typedef enum { |
| UART_BAUD_RATE_DET, |
| UART_WAIT_SYNC_FRM, |
| UART_SRCH_MSG_HEAD, |
| UART_RCV_MSG_BODY, |
| UART_RCV_ESC_CHAR, |
| } RcvMsgState; |
| |
| typedef struct { |
| UartBautRate baut_rate; |
| UartBitsNum4Char data_bits; |
| UartExistParity exist_parity; |
| UartParityMode parity; // chip size in byte |
| UartStopBitsNum stop_bits; |
| UartFlowCtrl flow_ctrl; |
| RcvMsgBuff rcv_buff; |
| TrxMsgBuff trx_buff; |
| RcvMsgState rcv_state; |
| int received; |
| int buff_uart_no; //indicate which uart use tx/rx buffer |
| } UartDevice; |
| |
| void uart_init(UartBautRate uart0_br, UartBautRate uart1_br); |
| int uart0_rx(void); |
| bool uart_rx_wait(uint32_t timeout_us); |
| int uart_rx_char(void); |
| void uart_tx_one_char(uint8 uart, uint8 TxChar); |
| void uart_flush(uint8 uart); |
| void uart_os_config(int uart); |
| void uart_setup(uint8 uart); |
| |
| #endif // _INCLUDED_UART_H_ |