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