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