1 /** 2 ****************************************************************************** 3 * @file lib_u32k.h 4 * @author Application Team 5 * @version V1.1.0 6 * @date 2019-10-28 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 FirstBit; 27 uint32_t AutoCal; 28 uint32_t Baudrate; 29 uint32_t LineSel; 30 } U32K_InitType; 31 32 /************** Bits definition for U32Kx_CTRL0 register ******************/ 33 #define U32K_CTRL0_PMODE_EVEN (0x0U << U32K_CTRL0_PMODE_Pos) /*!< 0x00000000 */ 34 #define U32K_CTRL0_PMODE_ODD (0x1U << U32K_CTRL0_PMODE_Pos) /*!< 0x00000010 */ 35 #define U32K_CTRL0_PMODE_0 (0x2U << U32K_CTRL0_PMODE_Pos) /*!< 0x00000020 */ 36 #define U32K_CTRL0_PMODE_1 (0x3U << U32K_CTRL0_PMODE_Pos) /*!< 0x00000030 */ 37 #define U32K_CTRL0_DEBSEL_0 (0x0U << U32K_CTRL0_DEBSEL_Pos) /*!< 0x00000000 */ 38 #define U32K_CTRL0_DEBSEL_1 (0x1U << U32K_CTRL0_DEBSEL_Pos) /*!< 0x00000040 */ 39 #define U32K_CTRL0_DEBSEL_2 (0x2U << U32K_CTRL0_DEBSEL_Pos) /*!< 0x00000080 */ 40 #define U32K_CTRL0_DEBSEL_3 (0x3U << U32K_CTRL0_DEBSEL_Pos) /*!< 0x000000C0 */ 41 42 /************** Bits definition for U32Kx_CTRL1 register ******************/ 43 #define U32K_CTRL1_RXSEL_RX0 (0x0U << U32K_CTRL1_RXSEL_Pos) /*!< 0x00000000 */ 44 #define U32K_CTRL1_RXSEL_RX1 (0x1U << U32K_CTRL1_RXSEL_Pos) /*!< 0x00000010 */ 45 #define U32K_CTRL1_RXSEL_RX2 (0x2U << U32K_CTRL1_RXSEL_Pos) /*!< 0x00000020 */ 46 #define U32K_CTRL1_RXSEL_RX3 (0x3U << U32K_CTRL1_RXSEL_Pos) /*!< 0x00000030 */ 47 //Debsel 48 #define U32K_DEBSEL_0 (0x0U << U32K_CTRL0_DEBSEL_Pos) 49 #define U32K_DEBSEL_1 (0x1U << U32K_CTRL0_DEBSEL_Pos) 50 #define U32K_DEBSEL_2 (0x2U << U32K_CTRL0_DEBSEL_Pos) 51 #define U32K_DEBSEL_3 (0x3U << U32K_CTRL0_DEBSEL_Pos) 52 //Parity 53 #define U32K_PARITY_EVEN (0x1U << U32K_CTRL0_PMODE_Pos) 54 #define U32K_PARITY_ODD (0x3U << U32K_CTRL0_PMODE_Pos) 55 #define U32K_PARITY_0 (0x5U << U32K_CTRL0_PMODE_Pos) 56 #define U32K_PARITY_1 (0x7U << U32K_CTRL0_PMODE_Pos) 57 #define U32K_PARITY_NONE (0x0U << U32K_CTRL0_PMODE_Pos) 58 //FirstBit 59 #define U32K_FIRSTBIT_LSB 0 60 #define U32K_FIRSTBIT_MSB (0x1U << U32K_CTRL0_MSB_Pos) 61 //AutoCal 62 #define U32K_AUTOCAL_ON 0 63 #define U32K_AUTOCAL_OFF (0x1U << U32K_CTRL0_ACOFF_Pos) 64 //Line 65 #define U32K_LINE_RX0 (0x0U << U32K_CTRL1_RXSEL_Pos) 66 #define U32K_LINE_RX1 (0x1U << U32K_CTRL1_RXSEL_Pos) 67 #define U32K_LINE_RX2 (0x2U << U32K_CTRL1_RXSEL_Pos) 68 #define U32K_LINE_RX3 (0x3U << U32K_CTRL1_RXSEL_Pos) 69 70 //INT 71 #define U32K_INT_RXOV (0x1U << U32K_CTRL1_RXOVIE_Pos) 72 #define U32K_INT_RXPE (0x1U << U32K_CTRL1_RXPEIE_Pos) 73 #define U32K_INT_RX (0x1U << U32K_CTRL1_RXIE_Pos) 74 #define U32K_INT_Msk (U32K_INT_RXOV \ 75 |U32K_INT_RXPE \ 76 |U32K_INT_RX) 77 78 //INT Status 79 #define U32K_INTSTS_RXOV (0x1U << U32K_STS_RXOV_Pos) 80 #define U32K_INTSTS_RXPE (0x1U << U32K_STS_RXPE_Pos) 81 #define U32K_INTSTS_RX (0x1U << U32K_STS_RXIF_Pos) 82 #define U32K_INTSTS_Msk (U32K_INTSTS_RXOV \ 83 |U32K_INTSTS_RXPE \ 84 |U32K_INTSTS_RX) 85 86 //WKUMode 87 #define U32K_WKUMOD_RX 0 // Wake-up when receive data 88 #define U32K_WKUMOD_PC (0x1U << U32K_CTRL0_WKUMODE_Pos) // Wake-up when receive data and parity/stop bit correct 89 90 91 /****************************** U32K Instances ********************************/ 92 #define IS_U32K_ALL_INSTANCE(INSTANCE) (((INSTANCE) == U32K0) || \ 93 ((INSTANCE) == U32K1)) 94 95 /* Private macros ------------------------------------------------------------*/ 96 #define IS_U32K_DEBSEL(__DEBSEL__) (((__DEBSEL__) == U32K_DEBSEL_0) ||\ 97 ((__DEBSEL__) == U32K_DEBSEL_1) ||\ 98 ((__DEBSEL__) == U32K_DEBSEL_2) ||\ 99 ((__DEBSEL__) == U32K_DEBSEL_3)) 100 101 #define IS_U32K_PARITY(__PARITY__) (((__PARITY__) == U32K_PARITY_EVEN) ||\ 102 ((__PARITY__) == U32K_PARITY_ODD) ||\ 103 ((__PARITY__) == U32K_PARITY_0) ||\ 104 ((__PARITY__) == U32K_PARITY_1) ||\ 105 ((__PARITY__) == U32K_PARITY_NONE)) 106 107 #define IS_U32K_WORDLEN(__WORDLEN__) (((__WORDLEN__) == U32K_WORDLEN_8B) || ((__WORDLEN__) == U32K_WORDLEN_9B)) 108 109 #define IS_U32K_FIRSTBIT(__FIRSTBIT__) (((__FIRSTBIT__) == U32K_FIRSTBIT_LSB) || ((__FIRSTBIT__) == U32K_FIRSTBIT_MSB)) 110 111 #define IS_U32K_AUTOCAL(__AUTOCAL__) (((__AUTOCAL__) == U32K_AUTOCAL_ON) || ((__AUTOCAL__) == U32K_AUTOCAL_OFF)) 112 113 #define IS_U32K_LINE(__LINE__) (((__LINE__) == U32K_LINE_RX0) ||\ 114 ((__LINE__) == U32K_LINE_RX1) ||\ 115 ((__LINE__) == U32K_LINE_RX2) ||\ 116 ((__LINE__) == U32K_LINE_RX3)) 117 118 #define IS_U32K_BAUDRATE(__BAUDRATE__) ((300UL <= (__BAUDRATE__)) &&\ 119 ((__BAUDRATE__) <= 14400UL)) 120 121 #define IS_U32K_INT(__INT__) ((((__INT__) & U32K_INT_Msk) != 0U) &&\ 122 (((__INT__) & ~U32K_INT_Msk) == 0U)) 123 124 #define IS_U32K_INTFLAGR(__INTFLAGR__) (((__INTFLAGR__) == U32K_INTSTS_RXOV) ||\ 125 ((__INTFLAGR__) == U32K_INTSTS_RXPE) ||\ 126 ((__INTFLAGR__) == U32K_INTSTS_RX)) 127 128 #define IS_U32K_INTFLAGC(__INTFLAGC__) ((((__INTFLAGC__) & U32K_INTSTS_Msk) != 0U) &&\ 129 (((__INTFLAGC__) & ~U32K_INTSTS_Msk) == 0U)) 130 131 #define IS_U32K_WKUMODE(__WKUMODE__) (((__WKUMODE__) == U32K_WKUMOD_RX) || ((__WKUMODE__) == U32K_WKUMOD_PC)) 132 133 /* Exported Functions ------------------------------------------------------- */ 134 /* U32K Exported Functions Group1: 135 (De)Initialization -----------------------*/ 136 void U32K_DeInit(U32K_Type *U32Kx); 137 void U32K_Init(U32K_Type *U32Kx, U32K_InitType *InitStruct); 138 void U32K_StructInit(U32K_InitType *InitStruct); 139 /* U32K Exported Functions Group2: 140 Interrupt (flag) configure ---------------*/ 141 void U32K_INTConfig(U32K_Type *U32Kx, uint32_t INTMask, uint8_t NewState); 142 uint8_t U32K_GetINTStatus(U32K_Type *U32Kx, uint32_t INTMask); 143 void U32K_ClearINTStatus(U32K_Type *U32Kx, uint32_t INTMask); 144 /* U32K Exported Functions Group3: 145 Receive datas -----------------------------*/ 146 uint8_t U32K_ReceiveData(U32K_Type *U32Kx); 147 /* U32K Exported Functions Group4: 148 MISC Configuration -------- ---------------*/ 149 void U32K_BaudrateConfig(U32K_Type *U32Kx, uint32_t BaudRate); 150 void U32K_Cmd(U32K_Type *U32Kx, uint32_t NewState); 151 void U32K_LineConfig(U32K_Type *U32Kx, uint32_t Line); 152 void U32K_WKUModeConfig(U32K_Type *U32Kx, uint32_t WKUMode); 153 154 #ifdef __cplusplus 155 } 156 #endif 157 158 #endif /* __LIB_U32K_H */ 159 160 /*********************************** END OF FILE ******************************/ 161