1 /*
2  * @ : Copyright (c) 2021 Phytium Information Technology, Inc.
3  *
4  * SPDX-License-Identifier: Apache-2.0.
5  *
6  * @Date: 2021-04-07 09:53:07
7  * @LastEditTime: 2021-05-24 10:13:51
8  * @Description:  This files is for uart functions
9  *
10  * @Modify History:
11  *  Ver   Who        Date         Changes
12  * ----- ------     --------    --------------------------------------
13  */
14 
15 #ifndef FT_UART_H
16 #define FT_UART_H
17 
18 #include "ft_types.h"
19 #include "ft_assert.h"
20 #include "ft_status.h"
21 #include "ft_uart_hw.h"
22 
23 #define FUART_BAUDRATE 115200U
24 
25 /* Config options */
26 #define FUART_OPTION_UARTEN 0x1U
27 #define FUART_OPTION_RXEN 0x2U
28 #define FUART_OPTION_TXEN 0x4U
29 #define FUART_OPTION_FIFOEN 0x8U
30 
31 /* Data format values  */
32 #define FUART_FORMAT_WORDLENGTH_8BIT 0x3
33 #define FUART_FORMAT_WORDLENGTH_7BIT 0x2
34 #define FUART_FORMAT_WORDLENGTH_6BIT 0x1
35 #define FUART_FORMAT_WORDLENGTH_5BIT 0x0
36 
37 #define FUART_FORMAT_NO_PARITY 0U
38 #define FUART_FORMAT_MARK_PARITY 1U
39 #define FUART_FORMAT_SPACE_PARITY 2U
40 #define FUART_FORMAT_ODD_PARTY 3U
41 #define FUART_FORMAT_EVEN_PARITY 4U
42 
43 #define FUART_FORMAT_2_STOP_BIT 0U
44 #define FUART_FORMAT_1_STOP_BIT 1U
45 
46 /* Callback events  */
47 
48 #define FUART_EVENT_RECV_DATA 1U       /**< Data receiving done */
49 #define FUART_EVENT_RECV_TOUT 2U       /**< A receive timeout occurred */
50 #define FUART_EVENT_SENT_DATA 3U       /**< Data transmission done */
51 #define FUART_EVENT_RECV_ERROR 4U      /**< A receive error detected */
52 #define FUART_EVENT_MODEM 5U           /**< Modem status changed */
53 #define FUART_EVENT_PARE_FRAME_BRKE 6U /**< A receive parity, frame, break \
54                                         *   error detected */
55 #define FUART_EVENT_RECV_ORERR 7U      /**< A receive overrun error detected */
56 
57 /**************************** Type Definitions ******************************/
58 typedef struct
59 {
60     u32 InstanceId; /* Id of device*/
61     u32 BaseAddress;
62     u32 RefClockHz;
63     u32 IsrNum;
64 } FUart_Config_t;
65 
66 typedef struct
67 {
68     u8 *BytePtr;
69     u32 RequestedBytes;
70     u32 RemainingBytes;
71 } FUart_Buffer_t;
72 
73 typedef struct
74 {
75     u32 BaudRate; /**< In bps, ie 1200 */
76     u32 DataBits; /**< Number of data bits */
77     u32 Parity;   /**< Parity */
78     u8 StopBits;  /**< Number of stop bits */
79 } FUart_Format_t;
80 
81 typedef void (*FUart_Handler_t)(void *Args, u32 Event, u32 EventData);
82 
83 typedef struct
84 {
85     FUart_Config_t Config; /* Configuration data structure  */
86     u32 InputClockHz;
87     u32 IsReady; /* Device is ininitialized and ready*/
88     u32 BaudRate;
89 
90     FUart_Buffer_t SendBuffer;
91     FUart_Buffer_t ReceiveBuffer;
92 
93     FUart_Handler_t Handler;
94     void *Args;
95     uint8_t rxbs_error; /* 接收过程中出现错误 ,0 无错误,1 存在错误*/
96 
97 } Ft_Uart;
98 
99 /* define SD MMC error code */
100 typedef enum
101 {
102     ERR_SUB_MODE_UART_GENERAL = 0
103 } FT_UART_ERR_SUB_MODE;
104 
105 #define ERR_INPUT_BAUD_NO_SUPPORT FT_CODE_ERR(ERR_MODE_UART, ERR_SUB_MODE_UART_GENERAL, 0x1)
106 
107 void FUart_PutChar(Ft_Uart *UartPtr, s8 Data);
108 u32 FUart_Send(Ft_Uart *UartPtr, u8 *Buffer, u32 Length);
109 u32 FUart_Receive(Ft_Uart *UartPtr, u8 *BytePtr, u32 Length);
110 s32 FUart_CfgInitialize(Ft_Uart *UartPtr, FUart_Config_t *Config);
111 FUart_Config_t *FUart_LookupConfig(u32 InstanceId);
112 void FUart_SetOptions(Ft_Uart *UartPtr, u32 Options);
113 void FUart_SetSpecificOptions(Ft_Uart *UartPtr, u32 Options);
114 void FUart_ClearSpecificOptions(Ft_Uart *UartPtr, u32 Options);
115 void FUart_InterruptHandler(Ft_Uart *UartPtr);
116 void FUart_SetHandler(Ft_Uart *UartPtr, FUart_Handler_t FuncPtr,
117                       void *Args);
118 void FUart_SetInterruptMask(Ft_Uart *UartPtr, u32 Mask);
119 u32 FUart_SetBaudRate(Ft_Uart *UartPtr, u32 BaudRate);
120 #endif // !
121