1 ////////////////////////////////////////////////////////////////////////////////
2 /// @file     hal_uart.h
3 /// @author   AE TEAM
4 /// @brief    THIS FILE CONTAINS ALL THE FUNCTIONS PROTOTYPES FOR THE UART
5 ///           FIRMWARE LIBRARY.
6 ////////////////////////////////////////////////////////////////////////////////
7 /// @attention
8 ///
9 /// THE EXISTING FIRMWARE IS ONLY FOR REFERENCE, WHICH IS DESIGNED TO PROVIDE
10 /// CUSTOMERS WITH CODING INFORMATION ABOUT THEIR PRODUCTS SO THEY CAN SAVE
11 /// TIME. THEREFORE, MINDMOTION SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT OR
12 /// CONSEQUENTIAL DAMAGES ABOUT ANY CLAIMS ARISING OUT OF THE CONTENT OF SUCH
13 /// HARDWARE AND/OR THE USE OF THE CODING INFORMATION CONTAINED HEREIN IN
14 /// CONNECTION WITH PRODUCTS MADE BY CUSTOMERS.
15 ///
16 /// <H2><CENTER>&COPY; COPYRIGHT MINDMOTION </CENTER></H2>
17 ////////////////////////////////////////////////////////////////////////////////
18 
19 // Define to prevent recursive inclusion
20 #ifndef __HAL_UART_H
21 #define __HAL_UART_H
22 
23 // Files includes
24 #include "reg_uart.h"
25 
26 ////////////////////////////////////////////////////////////////////////////////
27 /// @addtogroup MM32_Hardware_Abstract_Layer
28 /// @{
29 
30 /////////////////////////////////////1///////////////////////////////////////////
31 /// @defgroup UART_HAL
32 /// @brief UART HAL modules
33 /// @{
34 
35 
36 ////////////////////////////////////////////////////////////////////////////////
37 /// @defgroup UART_Exported_Types
38 /// @{
39 ///
40 
41 ////////////////////////////////////////////////////////////////////////////////
42 /// @brief UART Word Length Enumerate definition
43 /// @anchor UART_Word_Length
44 ////////////////////////////////////////////////////////////////////////////////
45 typedef enum {
46     UART_WordLength_5b = 0U,
47     UART_WordLength_6b = 1U << UART_CCR_CHAR_Pos,
48     UART_WordLength_7b = 2U << UART_CCR_CHAR_Pos,
49     UART_WordLength_8b = 3U << UART_CCR_CHAR_Pos
50 } UART_WordLength_TypeDef;
51 
52 ////////////////////////////////////////////////////////////////////////////////
53 /// @brief UART Stop Bits Enumerate definition
54 /// @anchor UART_Stop_Bits
55 ////////////////////////////////////////////////////////////////////////////////
56 typedef enum {
57     UART_StopBits_1 = 0U,
58     UART_StopBits_2 = UART_CCR_SPB,
59 
60     UART_StopBits_0_5 = UART_CCR_SPB1,
61     UART_StopBits_1_5 = UART_CCR_SPB1 | UART_CCR_SPB0,
62 } UART_Stop_Bits_TypeDef;
63 
64 ////////////////////////////////////////////////////////////////////////////////
65 /// @brief UART Parity Enumerate definition
66 /// @anchor UART_Parity
67 ////////////////////////////////////////////////////////////////////////////////
68 typedef enum {
69     UART_Parity_No   = 0U,
70     UART_Parity_Even = UART_CCR_PEN | UART_CCR_PSEL,
71     UART_Parity_Odd  = UART_CCR_PEN
72 } UART_Parity_TypeDef;
73 
74 ////////////////////////////////////////////////////////////////////////////////
75 /// @brief UART Hardware Flow Control Enumerate definition
76 /// @anchor UART_Hardware_Flow_Control
77 ////////////////////////////////////////////////////////////////////////////////
78 typedef enum {
79     UART_HWFlowControl_None    = 0U,
80 
81     //    UART_HWFlowControl_RTS     = UART_GCR_AUTOFLOW,
82     //    UART_HWFlowControl_CTS     = UART_GCR_AUTOFLOW,
83 
84     UART_HWFlowControl_RTS_CTS = UART_GCR_AUTOFLOW
85 } UART_HW_FLOWCONTROL_TypeDef;
86 
87 typedef enum {
88     UART_WakeUp_IdleLine    = 0U,  //
89     UART_WakeUp_AddressMark = UART_CCR_WAKE
90 } UART_WakeUp_TypeDef;
91 
92 typedef enum {
93     UART_9bit_Polarity_Low  = 0U,  //
94     UART_9bit_Polarity_High = UART_CCR_B8POL
95 } UART_9bit_Polarity_TypeDef;
96 
97 ////////////////////////////////////////////////////////////////////////////////
98 /// @brief UART Auto BaudRate definition
99 ////////////////////////////////////////////////////////////////////////////////
100 typedef enum  {
101     Data_F8 = 0,
102     Data_FE,
103     ABRMODE_FALLING_TO_RISINGEDGE1BIT,
104     ABRMODE_FALLING_TO_RISINGEDGE2BIT,
105     ABRMODE_FALLING_TO_RISINGEDGE4BIT,
106     ABRMODE_FALLING_TO_RISINGEDGE8BIT,
107     ABRMODE_FALLING_TO_FALLINGEDGE2BIT,
108     ABRMODE_FALLING_TO_FALLINGEDGE4BIT,
109     ABRMODE_FALLING_TO_FALLINGEDGE8BIT,
110     ABRMODE_STARTBIT,
111     ABRMODE_VALUE0X55,
112     ABRMODE_VALUE0x7F,
113     ABRMODE_VALUE0X80,
114     ABRMODE_VALUE0XF7,
115     ABRMODE_VALUE0XF8 = Data_F8,
116     ABRMODE_VALUE0XFE = Data_FE,
117     ABRMODE_VALUE0XFF,
118 } UART_AutoBaud_TypeDef;
119 ////////////////////////////////////////////////////////////////////////////////
120 /// @brief UART Init Structure definition
121 ////////////////////////////////////////////////////////////////////////////////
122 typedef struct {
123     union {
124         u32                         BaudRate;                           ///< This member configures the UART communication baud rate.
125         u32                         UART_BaudRate;
126     };
127     union {
128         UART_WordLength_TypeDef     WordLength;                         ///< Specifies the number of data bits transmitted or received in a frame.
129         u16                         UART_WordLength;
130     };
131     union {
132         UART_Stop_Bits_TypeDef      StopBits;                           ///< Specifies the number of stop bits transmitted.
133         u16                         UART_StopBits;
134     };
135     union {
136         UART_Parity_TypeDef         Parity;                             ///< Specifies the parity mode.
137         u16                         UART_Parity;
138     };
139     union {
140         u16                         Mode;                               ///< Specifies wether the Receive or Transmit mode is
141         u16                         UART_Mode;
142     };
143     union {
144         UART_HW_FLOWCONTROL_TypeDef HWFlowControl;                      ///< Specifies wether the hardware flow control mode is enabled or disabled.
145         u16                         UART_HardwareFlowControl;
146     };
147 } UART_InitTypeDef;
148 
149 /// @}
150 
151 ////////////////////////////////////////////////////////////////////////////////
152 /// @defgroup UART_Exported_Constants
153 /// @{
154 
155 /// @}
156 
157 ////////////////////////////////////////////////////////////////////////////////
158 /// @defgroup UART_Exported_Variables
159 /// @{
160 #ifdef _HAL_UART_C_
161 
162 #define GLOBAL
163 #else
164 #define GLOBAL extern
165 #endif
166 
167 #undef GLOBAL
168 /// @}
169 
170 ////////////////////////////////////////////////////////////////////////////////
171 /// @defgroup UART_Exported_Functions
172 /// @{
173 void UART_DeInit(UART_TypeDef* uart);
174 void UART_Init(UART_TypeDef* uart, UART_InitTypeDef* init_struct);
175 void UART_StructInit(UART_InitTypeDef* init_struct);
176 void UART_Cmd(UART_TypeDef* uart, FunctionalState state);
177 void UART_ITConfig(UART_TypeDef* uart, u16 it, FunctionalState state);
178 void UART_DMACmd(UART_TypeDef* uart, u16 dma_request, FunctionalState state);
179 void UART_SendData(UART_TypeDef* uart, u16 Data);
180 void UART_ClearITPendingBit(UART_TypeDef* uart, u16 it);
181 
182 u16        UART_ReceiveData(UART_TypeDef* uart);
183 FlagStatus UART_GetFlagStatus(UART_TypeDef* uart, u16 flag);
184 
185 ITStatus   UART_GetITStatus(UART_TypeDef* uart, u16 it);
186 
187 void UART_WakeUpConfig(UART_TypeDef* uart, UART_WakeUp_TypeDef mode);
188 void UART_ReceiverWakeUpCmd(UART_TypeDef* uart, FunctionalState state);
189 void UART_SetRXAddress(UART_TypeDef* uart, u8 address);
190 void UART_SetRXMASK(UART_TypeDef* uart, u8 address);
191 void UART_Enable9bit(UART_TypeDef* uart, FunctionalState state);
192 void UART_Set9bitLevel(UART_TypeDef* uart, FunctionalState state);
193 void UART_Set9bitPolarity(UART_TypeDef* uart, UART_9bit_Polarity_TypeDef polarity);
194 void UART_Set9bitAutomaticToggle(UART_TypeDef* uart, FunctionalState state);
195 void UART_HalfDuplexCmd(UART_TypeDef* uart, FunctionalState state);
196 void UART_SetGuardTime(UART_TypeDef* uart, u8 guard_time);
197 void UART_SmartCardCmd(UART_TypeDef* uart, FunctionalState state);
198 void UART_SmartCardNACKCmd(UART_TypeDef* uart, FunctionalState state);
199 void UART_SendBreak(UART_TypeDef* uart);
200 void UART_AutoBaudRateCmd(UART_TypeDef* uart, FunctionalState state);
201 void UART_AutoBaudRateSet(UART_TypeDef* uart, UART_AutoBaud_TypeDef value, FunctionalState state);
202 
203 /// @}
204 
205 /// @}
206 
207 /// @}
208 
209 ////////////////////////////////////////////////////////////////////////////////
210 #endif // __HAL_UART_H
211 ////////////////////////////////////////////////////////////////////////////////
212