1 /**
2   ******************************************************************************
3   * @file    lib_u32k.h
4   * @author  Application Team
5   * @version V4.5.0
6   * @date    2019-05-14
7   * @brief   UART 32K library.
8   ******************************************************************************
9   * @attention
10   *
11   ******************************************************************************
12   */
13 #ifndef __LIB_U32K_H
14 #define __LIB_U32K_H
15 
16 #ifdef __cplusplus
17  extern "C" {
18 #endif
19 
20 #include "target.h"
21 
22 typedef struct
23 {
24   uint32_t Debsel;
25   uint32_t Parity;
26   uint32_t WordLen;
27   uint32_t FirstBit;
28   uint32_t AutoCal;
29   uint32_t Baudrate;
30   uint32_t LineSel;
31 } U32K_InitType;
32 //Debsel
33 #define U32K_DEBSEL_0   U32K_CTRL0_DEBSEL_0
34 #define U32K_DEBSEL_1   U32K_CTRL0_DEBSEL_1
35 #define U32K_DEBSEL_2   U32K_CTRL0_DEBSEL_2
36 #define U32K_DEBSEL_3   U32K_CTRL0_DEBSEL_3
37 //Parity
38 #define U32K_PARITY_EVEN    U32K_CTRL0_PMODE_EVEN
39 #define U32K_PARITY_ODD     U32K_CTRL0_PMODE_ODD
40 #define U32K_PARITY_0       U32K_CTRL0_PMODE_0
41 #define U32K_PARITY_1       U32K_CTRL0_PMODE_1
42 #define U32K_PARITY_NONE    0
43 //WordLen
44 #define U32K_WORDLEN_8B     0
45 #define U32K_WORDLEN_9B     U32K_CTRL0_MODE
46 //FirstBit
47 #define U32K_FIRSTBIT_LSB   0
48 #define U32K_FIRSTBIT_MSB   U32K_CTRL0_MSB
49 //AutoCal
50 #define U32K_AUTOCAL_ON     0
51 #define U32K_AUTOCAL_OFF    U32K_CTRL0_ACOFF
52 //Line
53 #define U32K_LINE_RX0       U32K_CTRL1_RXSEL_RX0
54 #define U32K_LINE_RX1       U32K_CTRL1_RXSEL_RX1
55 #define U32K_LINE_RX2       U32K_CTRL1_RXSEL_RX2
56 #define U32K_LINE_RX3       U32K_CTRL1_RXSEL_RX3
57 
58 //INT
59 #define U32K_INT_RXOV       U32K_CTRL1_RXOVIE
60 #define U32K_INT_RXPE       U32K_CTRL1_RXPEIE
61 #define U32K_INT_RX         U32K_CTRL1_RXIE
62 #define U32K_INT_Msk       (U32K_INT_RXOV \
63                            |U32K_INT_RXPE \
64                            |U32K_INT_RX)
65 
66 //INT Status
67 #define U32K_INTSTS_RXOV       U32K_STS_RXOV
68 #define U32K_INTSTS_RXPE       U32K_STS_RXPE
69 #define U32K_INTSTS_RX         U32K_STS_RXIF
70 #define U32K_INTSTS_Msk       (U32K_INTSTS_RXOV \
71                               |U32K_INTSTS_RXPE \
72                               |U32K_INTSTS_RX)
73 
74 //WKUMode
75 #define U32K_WKUMOD_RX  0                  // Wake-up when receive data
76 #define U32K_WKUMOD_PC  U32K_CTRL0_WKUMODE // Wake-up when receive data and parity/stop bit correct
77 
78 /* Private macros ------------------------------------------------------------*/
79 #define IS_U32K_DEBSEL(__DEBSEL__)  (((__DEBSEL__) == U32K_DEBSEL_0) ||\
80                                      ((__DEBSEL__) == U32K_DEBSEL_1) ||\
81                                      ((__DEBSEL__) == U32K_DEBSEL_2) ||\
82                                      ((__DEBSEL__) == U32K_DEBSEL_3))
83 
84 #define IS_U32K_PARITY(__PARITY__)  (((__PARITY__) == U32K_PARITY_EVEN) ||\
85                                      ((__PARITY__) == U32K_PARITY_ODD)  ||\
86                                      ((__PARITY__) == U32K_PARITY_0)    ||\
87                                      ((__PARITY__) == U32K_PARITY_1)    ||\
88                                      ((__PARITY__) == U32K_PARITY_NONE))
89 
90 #define IS_U32K_WORDLEN(__WORDLEN__)  (((__WORDLEN__) == U32K_WORDLEN_8B) || ((__WORDLEN__) == U32K_WORDLEN_9B))
91 
92 #define IS_U32K_FIRSTBIT(__FIRSTBIT__)  (((__FIRSTBIT__) == U32K_FIRSTBIT_LSB) || ((__FIRSTBIT__) == U32K_FIRSTBIT_MSB))
93 
94 #define IS_U32K_AUTOCAL(__AUTOCAL__)  (((__AUTOCAL__) == U32K_AUTOCAL_ON) || ((__AUTOCAL__) == U32K_AUTOCAL_OFF))
95 
96 #define IS_U32K_LINE(__LINE__)  (((__LINE__) == U32K_LINE_RX0) ||\
97                                  ((__LINE__) == U32K_LINE_RX1) ||\
98                                  ((__LINE__) == U32K_LINE_RX2) ||\
99                                  ((__LINE__) == U32K_LINE_RX3))
100 
101 #define IS_U32K_BAUDRATE(__BAUDRATE__)  ((__BAUDRATE__) < 9601UL)
102 
103 #define IS_U32K_INT(__INT__)  ((((__INT__) & U32K_INT_Msk) != 0U) &&\
104                                (((__INT__) & ~U32K_INT_Msk) == 0U))
105 
106 #define IS_U32K_INTFLAGR(__INTFLAGR__)  (((__INTFLAGR__) == U32K_INTSTS_RXOV) ||\
107                                          ((__INTFLAGR__) == U32K_INTSTS_RXPE) ||\
108                                          ((__INTFLAGR__) == U32K_INTSTS_RX))
109 
110 #define IS_U32K_INTFLAGC(__INTFLAGC__)  ((((__INTFLAGC__) & U32K_INTSTS_Msk) != 0U) &&\
111                                          (((__INTFLAGC__) & ~U32K_INTSTS_Msk) == 0U))
112 
113 #define IS_U32K_WKUMODE(__WKUMODE__)  (((__WKUMODE__) == U32K_WKUMOD_RX) || ((__WKUMODE__) == U32K_WKUMOD_PC))
114 
115 /* Exported Functions ------------------------------------------------------- */
116 /* U32K Exported Functions Group1:
117                                    (De)Initialization  -----------------------*/
118 void U32K_DeInit(U32K_TypeDef *U32Kx);
119 void U32K_Init(U32K_TypeDef *U32Kx, U32K_InitType *InitStruct);
120 void U32K_StructInit(U32K_InitType *InitStruct);
121 /* U32K Exported Functions Group2:
122                                    Interrupt (flag) configure  ---------------*/
123 void U32K_INTConfig(U32K_TypeDef *U32Kx, uint32_t INTMask, uint8_t NewState);
124 uint8_t U32K_GetINTStatus(U32K_TypeDef *U32Kx, uint32_t INTMask);
125 void U32K_ClearINTStatus(U32K_TypeDef *U32Kx, uint32_t INTMask);
126 /* U32K Exported Functions Group3:
127                                    Receive datas -----------------------------*/
128 uint8_t U32K_ReceiveData(U32K_TypeDef *U32Kx);
129 /* U32K Exported Functions Group4:
130                                    MISC Configuration -------- ---------------*/
131 void U32K_BaudrateConfig(U32K_TypeDef *U32Kx, uint32_t BaudRate);
132 void U32K_Cmd(U32K_TypeDef *U32Kx, uint32_t NewState);
133 void U32K_LineConfig(U32K_TypeDef *U32Kx, uint32_t Line);
134 void U32K_WKUModeConfig(U32K_TypeDef *U32Kx, uint32_t WKUMode);
135 
136 #ifdef __cplusplus
137 }
138 #endif
139 
140 #endif  /* __LIB_U32K_H */
141 
142 /*********************************** END OF FILE ******************************/
143