1 /*
2  * @ : Copyright (c) 2021 Phytium Information Technology, Inc.
3  *
4  * SPDX-License-Identifier: Apache-2.0.
5  *
6  * @Date: 2021-03-31 14:59:20
7  * @LastEditTime: 2021-04-02 14:14:34
8  * @Description:  This files is for definition of uart register
9  *
10  * @Modify History: * * Ver   Who        Date         Changes
11  * ----- ------     --------    --------------------------------------
12  */
13 
14 #ifndef FT_UART_HW_H
15 #define FT_UART_HW_H
16 
17 #ifdef __cplusplus
18 extern "C"
19 {
20 #endif
21 
22 #include "ft_types.h"
23 #include "ft_assert.h"
24 #include "ft_io.h"
25 
26     /************************** Constant Definitions *****************************/
27 
28     /** @name Register Map
29  *
30  * Register offsets for the UART.
31  * @{
32  */
33 
34 #define UARTDR_OFFSET 0U  /* 数据寄存器 */
35 #define UARTRSR_OFFSET 4U /* 接收状态寄存器/错误清除寄存器 */
36 #define UARTECR_OFFSET UARTRSR_OFFSET
37 #define UARTFTR_OFFSET 0x18U    /* 标志寄存器 */
38 #define UARTILPR_OFFSET 0x020U  /* 低功耗计数寄存器 */
39 #define UARTIBRD_OFFSET 0x024U  /* 波特率整数值配置寄存器 */
40 #define UARTFBRD_OFFSET 0x028U  /* 波特率小数值配置寄存器 */
41 #define UARTLCR_H_OFFSET 0x02cU /* 线控寄存器 */
42 #define UARTCR_OFFSET 0x030U    /* 控制寄存器 */
43 #define UARTIFLS_OFFSET 0x034U  /* FIFO阈值选择寄存器 */
44 #define UARTIMSC_OFFSET 0x038U  /* 中断屏蔽选择清除寄存器 */
45 #define UARTRIS_OFFSET 0x03cU   /* 中断状态寄存器 */
46 #define UARTMIS_OFFSET 0x040U   /* 中断屏蔽状态寄存器 */
47 #define UARTICR_OFFSET 0x044U   /* 中断清除寄存器 */
48 #define UARTDMACR_OFFSET 0x048U /* DMA控制寄存器 */
49 
50     /* 数据寄存器 RW */
51 
52 #define UARTDR_OE 0x800U /* 如果接收到数据并且接收的 FIFO 已满,该位设置为 1 */
53 #define UARTDR_BE 0x400U /* 突发错误 */
54 #define UARTDR_PE 0x200U /*  奇偶校验错误。 */
55 #define UARTDR_FE 0x100U /*  帧错误。 */
56 #define UARTDR_ALLE (UARTDR_OE | UARTDR_BE | UARTDR_PE | UARTDR_FE)
57 #define UARTDR_DATA 0xffU /* R 接收数据 ,W 传输数据  */
58 
59     /* 接收状态寄存器 RW */
60 
61 #define UARTRSR_OE 0x8U /* 溢出错误。 */
62 #define UARTRSR_BE 0x4U /* 突发错误 */
63 #define UARTRSR_PE 0x2U /* 奇偶校验错误。 */
64 #define UARTRSR_FE 0x1U /* 帧错误 */
65 
66 #define UARTECR_CLE 0xffU /* 清除 */
67 
68 /* 标志寄存器  RO */
69 #define UARTFTR_RI 0x100U  /* Ring indicator */
70 #define UARTFTR_TXFE 0x80U /* Transmit FIFO empty */
71 #define UARTFTR_RXFF 0x40U /*  Receive FIFO full */
72 #define UARTFTR_TXFF 0x20U /*  Transmit FIFO full. */
73 #define UARTFTR_RXFE 0x10U /* Receive FIFO empty */
74 #define UARTFTR_BUSY 0x08U /* UART busy */
75 #define UARTFTR_DCD 0x04U  /*  Data carrier detect. */
76 #define UARTFTR_DSR 0x02U  /* Data set ready.  */
77 #define UARTFTR_CTS 0x1U   /* Clear to send */
78 
79 /* IrDA 低功耗计数寄存器 RW */
80 #define UARTILPR_ILPDVSR 0xffU /* 8-bit low-power divisor value. These bits are cleared to 0 at reset */
81 
82 /* 波特率整数值配置寄存器 RW */
83 #define UARTIBRD_BAUD_DIVFRAC 0xffffU /* The fractional baud rate divisor. */
84 
85 /* 波特率小数值配置寄存器 RW */
86 #define UARTFBRD_BAUD_DIVFRAC 0x3fU /* The fractional baud rate divisor. */
87 
88 /* 线控寄存器 RW */
89 #define UARTLCR_H_SPS 0x80U  /* Stick parity select.  */
90 #define UARTLCR_H_WLEN 0x60U /*  Word length. */
91 #define UARTLCR_H_FEN 0x10U  /*  Enable FIFOs. */
92 #define UARTLCR_H_STP2 0x08U /* Two stop bits select. */
93 #define UARTLCR_H_EPS 0x04U  /*  Even parity select. */
94 #define UARTLCR_H_PEN 0x02U  /*  Parity enable. */
95 #define UARTLCR_H_BRK 0x01U  /* send break  */
96 
97 /* 控制寄存器  RW */
98 #define UARTCR_CTSEN 0x8000U /* CTS hardware flow control enable.  */
99 #define UARTCR_RTSEN 0x4000U /* RTS hardware flow control enable.  */
100 #define UARTCR_OUT2 0x2000U  /* This bit is the complement of the UART Out2 (nUARTOut2) modem status output. */
101 #define UARTCR_Out1 0x1000U  /* This bit is the complement of the UART Out1 (nUARTOut1) modem status output. */
102 #define UARTCR_RTS 0x0800U   /*  Request to send. */
103 #define UARTCR_DTR 0x0400U   /* Data transmit ready */
104 #define UARTCR_RXE 0x0200U   /*  Receive enable. */
105 #define UARTCR_TXE 0x0100U   /* Transmit enable. */
106 #define UARTCR_LBE 0x0080U   /* Loop back enable.*/
107 #define UARTCR_SIRLP 0x4U    /* IrDA SIR low power mode. */
108 #define UARTCR_SIREN 0x2U    /*  SIR enable. */
109 #define UARTCR_UARTEN 0x1U   /* UART enable. */
110 
111 /* FIFO阈值选择寄存器 RW  */
112 #define UARTIFLS_RXIFLSEL 0x38U /* Receive interrupt FIFO level select. */
113 #define UARTIFLS_TXIFLSEL 0x7U  /* Transmit interrupt FIFO level select. */
114 
115 /* 中断屏蔽选择清除寄存器  RW */
116 #define UARTIMSC_OEIM 0x400U /* Overrun error interrupt mask.  */
117 #define UARTIMSC_BEIM 0x200U /* Break error interrupt mask  */
118 #define UARTIMSC_PEIM 0x100U /* Parity error interrupt mask.  */
119 #define UARTIMSC_FEIM 0x80U  /*  Framing error interrupt mask.  */
120 #define UARTIMSC_RTIM 0x40U  /* Receive timeout interrupt mask.   */
121 #define UARTIMSC_TXIM 0x20U  /* Transmit interrupt mask.  */
122 #define UARTIMSC_RXIM 0x10U  /*  Receive interrupt mask.  */
123 #define UARTIMSC_DSRMIM 0x8U /* nUARTDSR modem interrupt mask.  */
124 #define UARTIMSC_DCDMIM 0x4U /* nUARTDCD modem interrupt mask.   */
125 #define UARTIMSC_CTSMIM 0x2U /* nUARTCTS modem interrupt mask.  */
126 #define UARTIMSC_RIMIM 0x1U  /* nUARTRI modem interrupt mask.  */
127 #define UARTIMSC_ALLM 0x3ffU /* all interrupt mask */
128 
129     /* 中断状态寄存器   RO */
130 
131 #define UARTRIS_OEIS 0x400U /* Overrun error interrupt mask.  */
132 #define UARTRIS_BEIS 0x200U /* Break error interrupt mask  */
133 #define UARTRIS_PEIS 0x100U /* Parity error interrupt mask.  */
134 #define UARTRIS_FEIS 0x80U  /*  Framing error interrupt mask.  */
135 #define UARTRIS_RTIS 0x40U  /* Receive timeout interrupt mask.   */
136 #define UARTRIS_TXIS 0x20U  /* Transmit interrupt mask.  */
137 #define UARTRIS_RXIS 0x10U  /*  Receive interrupt mask.  */
138 #define UARTRIS_DSRMIS 0x8U /* nUARTDSR modem interrupt mask.  */
139 #define UARTRIS_DCDMIS 0x4U /* nUARTDCD modem interrupt mask.   */
140 #define UARTRIS_CTSMIS 0x2U /* nUARTCTS modem interrupt mask.  */
141 #define UARTRIS_RIMIS 0x1U  /* nUARTRI modem interrupt mask.  */
142 
143     /* 中断屏蔽状态寄存器 R0  */
144 
145 #define UARTMIS_OEMIS 0x400U /* Overrun error interrupt mask.  */
146 #define UARTMIS_BEMIS 0x200U /* Break error interrupt mask  */
147 #define UARTMIS_PEMIS 0x100U /* Parity error interrupt mask.  */
148 #define UARTMIS_FEMIS 0x80U  /*  Framing error interrupt mask.  */
149 #define UARTMIS_RTMIS 0x40U  /* Receive timeout interrupt mask.   */
150 #define UARTMIS_TXMIS 0x20U  /* Transmit interrupt mask.  */
151 #define UARTMIS_RXMIS 0x10U  /*  Receive interrupt mask.  */
152 #define UARTMIS_DSRMMIS 0x8U /* nUARTDSR modem interrupt mask.  */
153 #define UARTMIS_DCDMMIS 0x4U /* nUARTDCD modem interrupt mask.   */
154 #define UARTMIS_CTSMMIS 0x2U /* nUARTCTS modem interrupt mask.  */
155 #define UARTMIS_RIMMIS 0x1U  /* nUARTRI modem interrupt mask.  */
156 
157 /* 中断清除寄存器 WO */
158 #define UARTICR_OEIC 0x400U /* Overrun error interrupt mask.  */
159 #define UARTICR_BEIC 0x200U /* Break error interrupt mask  */
160 #define UARTICR_PEIC 0x100U /* Parity error interrupt mask.  */
161 #define UARTICR_FEIC 0x80U  /*  Framing error interrupt mask.  */
162 #define UARTICR_RTIC 0x40U  /* Receive timeout interrupt mask.   */
163 #define UARTICR_TXIC 0x20U  /* Transmit interrupt mask.  */
164 #define UARTICR_RXIC 0x10U  /*  Receive interrupt mask.  */
165 #define UARTICR_DSRMIC 0x8U /* nUARTDSR modem interrupt mask.  */
166 #define UARTICR_DCDMIC 0x4U /* nUARTDCD modem interrupt mask.   */
167 #define UARTICR_CTSMIC 0x2U /* nUARTCTS modem interrupt mask.  */
168 #define UARTICR_RIMIC 0x1U  /* nUARTRI modem interrupt mask.  */
169 
170 /* DMA控制寄存器 RW */
171 #define UARTDMACR_DMAONERR 0x4U /* DMA on error. */
172 #define UARTDMACR_TXDMAE 0x2U   /* Transmit DMA enable. */
173 #define UARTDMACR_RXDMAE 0x1U   /* Receive DMA enable. */
174 
175 /***************** Macros (Inline Functions) Definitions *********************/
176 
177 /**
178  * @name: FT_UART_ReadReg
179  * @msg:  读取串口寄存器
180  * @param {u32} BaseAddress 串口的基地址
181  * @param {u32} RegOffset   串口的寄存器的偏移
182  * @return {u32} 寄存器参数
183  */
184 #define FT_UART_ReadReg(BaseAddress, RegOffset) Ft_in32(BaseAddress + (u32)RegOffset)
185 
186 /**
187  * @name: FT_UART_WriteReg
188  * @msg:  写入串口寄存器
189  * @param {u32} BaseAddress 串口的基地址
190  * @param {u32} RegOffset   串口的寄存器的偏移
191  * @param {u32} RegisterValue 写入寄存器参数
192  * @return {void}
193  */
194 #define FT_UART_WriteReg(BaseAddress, RegOffset, RegisterValue) Ft_out32(BaseAddress + (u32)RegOffset, (u32)RegisterValue)
195 
196 /**
197  * @name: FT_UART_ISRECEIVEDATA
198  * @msg:  用于确认是否接收到数据
199  * @param {u32} BaseAddress 串口的基地址
200  * @return {bool} true 是存在数据 , false 是不存在数据
201  *
202  */
203 #define FT_UART_IsReceiveData(BaseAddress) (Ft_in32(BaseAddress + UARTFTR_OFFSET) & UARTFTR_RXFE)
204 
205 /**
206  * @name: FT_UART_ISTRANSMITFULL
207  * @msg:  用于确认是否能够发送数据
208  * @param {u32} BaseAddress 串口的基地址
209  * @return {bool} true 是数据已满 , false 可以发送数据
210  */
211 #define FT_UART_IsTransmitFull(BaseAddress) ((Ft_in32(BaseAddress + UARTFTR_OFFSET) & (u32)UARTFTR_TXFF) == UARTFTR_TXFF)
212 
213     void FUart_SendByte(u32 BaseAddress, u8 Byte);
214     u8 FUart_RecvByte(u32 BaseAddress);
215     u8 FUart_GetChar(u32 BaseAddress);
216 
217 #ifdef __cplusplus
218 }
219 #endif
220 
221 #endif
222