1 /*********************************************************************************************************//** 2 * @file ht32f5xxxx_tkey.h 3 * @version $Rev:: 5483 $ 4 * @date $Date:: 2021-07-19 #$ 5 * @brief The header file of the TKEY library. 6 ************************************************************************************************************* 7 * @attention 8 * 9 * Firmware Disclaimer Information 10 * 11 * 1. The customer hereby acknowledges and agrees that the program technical documentation, including the 12 * code, which is supplied by Holtek Semiconductor Inc., (hereinafter referred to as "HOLTEK") is the 13 * proprietary and confidential intellectual property of HOLTEK, and is protected by copyright law and 14 * other intellectual property laws. 15 * 16 * 2. The customer hereby acknowledges and agrees that the program technical documentation, including the 17 * code, is confidential information belonging to HOLTEK, and must not be disclosed to any third parties 18 * other than HOLTEK and the customer. 19 * 20 * 3. The program technical documentation, including the code, is provided "as is" and for customer reference 21 * only. After delivery by HOLTEK, the customer shall use the program technical documentation, including 22 * the code, at their own risk. HOLTEK disclaims any expressed, implied or statutory warranties, including 23 * the warranties of merchantability, satisfactory quality and fitness for a particular purpose. 24 * 25 * <h2><center>Copyright (C) Holtek Semiconductor Inc. All rights reserved</center></h2> 26 ************************************************************************************************************/ 27 28 /* Define to prevent recursive inclusion -------------------------------------------------------------------*/ 29 #ifndef __HT32F5XXXX_TKEY_H 30 #define __HT32F5XXXX_TKEY_H 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 /* Includes ------------------------------------------------------------------------------------------------*/ 37 #include "ht32.h" 38 39 /** @addtogroup HT32F5xxxx_Peripheral_Driver HT32F5xxxx Peripheral Driver 40 * @{ 41 */ 42 43 /** @addtogroup TKEY 44 * @{ 45 */ 46 47 48 /* Exported types ------------------------------------------------------------------------------------------*/ 49 /** @defgroup TKEY_Exported_Types TKEY exported types 50 * @{ 51 */ 52 53 typedef enum 54 { /*!< Touch key IP clock source */ 55 TKEY_PCLK = 0 , /*!< PCLK */ 56 TKEY_LSI /*!< LSI */ 57 } TKEY_IP_CLK_Enum; 58 59 typedef enum 60 { /*!< Periodic auto scan mode time-out selection */ 61 TKEY_RefOSC_DelayTime_0 = (0 << 13), /*!< 4 RefOSC clock */ 62 TKEY_RefOSC_DelayTime_1 = (1 << 13), /*!< 2 RefOSC clock */ 63 TKEY_RefOSC_DelayTime_2 = (2 << 13), /*!< 4 RefOSC clock */ 64 TKEY_RefOSC_DelayTime_3 = (3 << 13), /*!< 8 RefOSC clock */ 65 TKEY_RefOSC_DelayTime_4 = (4 << 13), /*!< 16 RefOSC clock */ 66 TKEY_RefOSC_DelayTime_5 = (5 << 13), /*!< 32 RefOSC clock */ 67 TKEY_RefOSC_DelayTime_6 = (6 << 13), /*!< 64 RefOSC clock */ 68 TKEY_RefOSC_DelayTime_7 = (7 << 13), /*!< 4 RefOSC clock */ 69 } TKEY_RefOSC_DelayTime_Enum; 70 71 72 typedef enum 73 { /*!< Periodic auto scan mode time-out selection */ 74 TKEY_PASM_TIMEOUT_0 = (0 << 10), /*!< 2^13/FLIRC */ 75 TKEY_PASM_TIMEOUT_1 = (1 << 10), /*!< 2^14/FLIRC */ 76 TKEY_PASM_TIMEOUT_2 = (2 << 10), /*!< 2^15/FLIRC */ 77 TKEY_PASM_TIMEOUT_3 = (3 << 10), /*!< 2^16/FLIRC */ 78 TKEY_PASM_TIMEOUT_4 = (4 << 10), /*!< 2^17/FLIRC */ 79 TKEY_PASM_TIMEOUT_5 = (5 << 10), /*!< 2^18/FLIRC */ 80 } TKEY_PASM_TIMEOUT_Enum; 81 82 typedef enum 83 { /*!< Periodic auto scan mode period selection */ 84 TKEY_PASM_PERIOD_0 = (0 << 8), /*!< 2^14/FLIRC */ 85 TKEY_PASM_PERIOD_1 = (1 << 8), /*!< 2^13/FLIRC */ 86 TKEY_PASM_PERIOD_2 = (2 << 8), /*!< 2^12/FLIRC */ 87 TKEY_PASM_PERIOD_3 = (3 << 8), /*!< 2^11/FLIRC */ 88 } TKEY_PASM_PERIOD_Enum; 89 90 typedef enum 91 { /*!< 16-bit counter clock source selection */ 92 TKEY_TK16S_CLK_0 = (0 << 5), /*!< TKCLK/16 */ 93 TKEY_TK16S_CLK_1 = (1 << 5), /*!< TKCLK/32 */ 94 TKEY_TK16S_CLK_2 = (2 << 5), /*!< TKCLK/64 */ 95 TKEY_TK16S_CLK_3 = (3 << 5), /*!< TKCLK/128 */ 96 } TKEY_TK16S_CLK_Enum; 97 98 typedef enum 99 { /*!< OSC frequency selection */ 100 TKEY_TKFS_FREQ_0 = (0 << 3), /*!< 1MHz */ 101 TKEY_TKFS_FREQ_1 = (1 << 3), /*!< 3MHz */ 102 TKEY_TKFS_FREQ_2 = (2 << 3), /*!< 7MHz */ 103 TKEY_TKFS_FREQ_3 = (3 << 3), /*!< 11MHz */ 104 } TKEY_TKFS_FREQ_Enum; 105 106 typedef enum 107 { /*!< Mode selection */ 108 TKEY_MODE_AUTOSCAN = (0 << 1), /*!< Auto scan mode */ 109 TKEY_MODE_MANUAL = (1 << 1), /*!< Manual mode */ 110 TKEY_MODE_PASM = (2 << 1), /*!< Periodic auto scan mode */ 111 } TKEY_MODE_Enum; 112 113 typedef enum 114 { /*!< TKEY module selection */ 115 TKM_0 = 0, /*!< TKEY module 0 */ 116 TKM_1, /*!< TKEY module 1 */ 117 TKM_2, /*!< TKEY module 2 */ 118 TKM_3, /*!< TKEY module 3 */ 119 TKM_4, /*!< TKEY module 4 */ 120 TKM_5, /*!< TKEY module 5 */ 121 } TKM_Enum; 122 123 typedef enum 124 { /*!< 8-bit time slot counter clock source */ 125 TKM_TSS_CLK_0 = (0 << 8), /*!< Ref. OSC */ 126 TKM_TSS_CLK_1 = (1 << 8), /*!< TKCLK/32 */ 127 TKM_TSS_CLK_2 = (2 << 8), /*!< TKCLK/64 */ 128 TKM_TSS_CLK_3 = (3 << 8), /*!< TKCLK/128 */ 129 } TKM_TSS_CLK_Enum; 130 131 typedef enum 132 { /*!< C/F OSC frequency hopping selection */ 133 TKM_SOF_CTRL_SW = (0 << 3), /*!< S/W controlled frequency hopping */ 134 TKM_SOF_CTRL_HW = (1 << 3), /*!< H/W controlled frequency hopping */ 135 } TKM_SOF_CTRL_Enum; 136 137 typedef enum 138 { /*!< Key OSC and Ref OSC frequency selection */ 139 TKM_SOF_FREQ_0 = (0 << 0), /*!< 1.020MHz. */ 140 TKM_SOF_FREQ_1 = (1 << 0), /*!< 1.040MHz. */ 141 TKM_SOF_FREQ_2 = (2 << 0), /*!< 1.059MHz. */ 142 TKM_SOF_FREQ_3 = (3 << 0), /*!< 1.074MHz. */ 143 TKM_SOF_FREQ_4 = (4 << 0), /*!< 1.085MHz. */ 144 TKM_SOF_FREQ_5 = (5 << 0), /*!< 1.099MHz. */ 145 TKM_SOF_FREQ_6 = (6 << 0), /*!< 1.111MHz. */ 146 TKM_SOF_FREQ_7 = (7 << 0) /*!< 1.125MHz. */ 147 } TKM_SOF_FREQ_Enum; 148 149 typedef enum 150 { /*!< Key selection */ 151 TKM_KEY_0 = 0, /*!< Key 0 */ 152 TKM_KEY_1, /*!< Key 1 */ 153 TKM_KEY_2, /*!< Key 2 */ 154 TKM_KEY_3, /*!< Key 3 */ 155 } TKM_KEY_Enum; 156 157 typedef enum 158 { /*!< Time slot selection */ 159 TKM_TIME_SLOT_0 = 0, /*!< Time slot 0 */ 160 TKM_TIME_SLOT_1, /*!< Time slot 1 */ 161 TKM_TIME_SLOT_2, /*!< Time slot 2 */ 162 TKM_TIME_SLOT_3, /*!< Time slot 3 */ 163 } TKM_TIME_SLOT_Enum; 164 165 typedef enum 166 { /*!< Key threshold selection */ 167 TKM_KEY_THR_LOWER = 0, /*!< Lower threshold */ 168 TKM_KEY_THR_UPPER, /*!< Upper threshold */ 169 } TKM_KEY_THR_Enum; 170 /** 171 * @} 172 */ 173 174 /* Exported constants --------------------------------------------------------------------------------------*/ 175 /** @defgroup TKEY_Exported_Constants TKEY exported constants 176 * @{ 177 */ 178 #define IS_TKEY_IP_CLK(x) (((x) == TKEY_PCLK) || ((x) == TKEY_LSI) ) 179 180 #define IS_TKEY_RefOSC_DelayTime(x) (((x) == TKEY_RefOSC_DelayTime_0) || ((x) == TKEY_RefOSC_DelayTime_1) || \ 181 ((x) == TKEY_RefOSC_DelayTime_2) || ((x) == TKEY_RefOSC_DelayTime_3) || \ 182 ((x) == TKEY_RefOSC_DelayTime_4) || ((x) == TKEY_RefOSC_DelayTime_5)|| \ 183 ((x) == TKEY_RefOSC_DelayTime_6) || ((x) == TKEY_RefOSC_DelayTime_7)) 184 185 #define IS_TKEY_PASM_TIMEOUT(x) (((x) == TKEY_PASM_TIMEOUT_0) || ((x) == TKEY_PASM_TIMEOUT_1) || \ 186 ((x) == TKEY_PASM_TIMEOUT_2) || ((x) == TKEY_PASM_TIMEOUT_3) || \ 187 ((x) == TKEY_PASM_TIMEOUT_4) || ((x) == TKEY_PASM_TIMEOUT_5)) 188 189 #define IS_TKEY_PASM_PERIOD(x) (((x) == TKEY_PASM_PERIOD_0) || ((x) == TKEY_PASM_PERIOD_1) || \ 190 ((x) == TKEY_PASM_PERIOD_2) || ((x) == TKEY_PASM_PERIOD_3)) 191 192 #define IS_TKEY_TK16S_CLK(x) (((x) == TKEY_TK16S_CLK_0) || ((x) == TKEY_TK16S_CLK_1) || \ 193 ((x) == TKEY_TK16S_CLK_2) || ((x) == TKEY_TK16S_CLK_3)) 194 195 196 #define IS_TKEY_TKFS_FREQ(x) (((x) == TKEY_TKFS_FREQ_0) || ((x) == TKEY_TKFS_FREQ_1) || \ 197 ((x) == TKEY_TKFS_FREQ_2) || ((x) == TKEY_TKFS_FREQ_3)) 198 199 #define IS_TKEY_MODE(x) (((x) == TKEY_MODE_AUTOSCAN) || ((x) == TKEY_MODE_MANUAL) || \ 200 ((x) == TKEY_MODE_PASM)) 201 202 #define TKEY_INT_TKTHE ((u32)0x00000001) 203 #define TKEY_INT_TKRCOVE ((u32)0x00000002) 204 #define TKEY_INT_TKTHWUEN ((u32)0x00000004) 205 #define TKEY_INT_TKRCOVWUEN ((u32)0x00000008) 206 207 #define IS_TKEY_INT(TKEY_INT) (((TKEY_INT & 0xFFFFFFFC) == 0) && (TKEY_INT != 0)) 208 209 #define TKEY_FLAG_TKTHF ((u32)0x00000001) 210 #define TKEY_FLAG_TKRCOVF ((u32)0x00000002) 211 #define TKEY_FLAG_TK16OV ((u32)0x00000004) 212 #define TKEY_FLAG_TKCFOV ((u32)0x00000008) 213 #define TKEY_FLAG_TKBUSY ((u32)0x00000010) 214 215 #define IS_TKEY_FLAG(FLAG) ((FLAG == TKEY_FLAG_TKTHF) || \ 216 (FLAG == TKEY_FLAG_TKRCOVF) || \ 217 (FLAG == TKEY_FLAG_TK16OV) || \ 218 (FLAG == TKEY_FLAG_TKCFOV) || \ 219 (FLAG == TKEY_FLAG_TKBUSY)) 220 221 222 #define IS_TKEY_FLAG_CLEAR(CLEAR) ((CLEAR == TKEY_FLAG_TKTHF) || \ 223 (CLEAR == TKEY_FLAG_TKRCOVF) || \ 224 (CLEAR == TKEY_FLAG_TK16OV) || \ 225 (CLEAR == TKEY_FLAG_TKCFOV)) 226 227 #define IS_TKM(x) (((x) == TKM_0) || ((x) == TKM_1) || \ 228 ((x) == TKM_2) || ((x) == TKM_3) || \ 229 ((x) == TKM_4) || ((x) == TKM_5)) 230 231 #define IS_TKM_TSS_CLK(x) (((x) == TKM_TSS_CLK_0) || ((x) == TKM_TSS_CLK_1) || \ 232 ((x) == TKM_TSS_CLK_2) || ((x) == TKM_TSS_CLK_3)) 233 234 235 #define IS_TKM_SOFC_CTRL(x) (((x) == TKM_SOFC_SW) || ((x) == TKM_SOFC_HW)) 236 237 #define IS_TKM_SOF_FREQ(x) (((x) == TKM_SOF_FREQ_0) || ((x) == TKM_SOF_FREQ_1) || \ 238 ((x) == TKM_SOF_FREQ_2) || ((x) == TKM_SOF_FREQ_3) || \ 239 ((x) == TKM_SOF_FREQ_4) || ((x) == TKM_SOF_FREQ_5) || \ 240 ((x) == TKM_SOF_FREQ_6) || ((x) == TKM_SOF_FREQ_7)) 241 242 #define IS_TKM_KEY(x) (((x) == TKM_KEY_3) || ((x) == TKM_KEY_2) || \ 243 ((x) == TKM_KEY_1) || ((x) == TKM_KEY_0)) 244 245 #define IS_TKM_SOF_CTRL(x) (((x) == TKM_SOF_CTRL_SW) || ((x) == TKM_SOF_CTRL_HW)) 246 247 #define IS_TKM_TIME_SLOT(x) (((x) == TKM_TIME_SLOT_0) || ((x) == TKM_TIME_SLOT_1) || \ 248 ((x) == TKM_TIME_SLOT_2) || ((x) == TKM_TIME_SLOT_3)) 249 250 #define IS_TKM_KEY_THR(x) (((x) == TKM_KEY_THR_LOWER) || ((x) == TKM_KEY_THR_UPPER)) 251 /** 252 * @} 253 */ 254 255 /* Exported functions --------------------------------------------------------------------------------------*/ 256 /** @defgroup TKEY_Exported_Functions TKEY exported functions 257 * @{ 258 */ 259 void TKEY_DeInit(void); 260 void TKEY_IPClockConfig(TKEY_IP_CLK_Enum Sel); 261 void TKEY_RefOSCDelayTimeConfig(TKEY_RefOSC_DelayTime_Enum Sel); 262 void TKEY_PASMTimeoutConfig(TKEY_PASM_TIMEOUT_Enum Sel); 263 void TKEY_PASMPeriodConfig(TKEY_PASM_PERIOD_Enum Sel); 264 void TKEY_16BitCounterClockConfig(TKEY_TK16S_CLK_Enum Sel); 265 void TKEY_OSCFreqConfig(TKEY_TKFS_FREQ_Enum Sel); 266 void TKEY_ModeConfig(TKEY_MODE_Enum Sel); 267 void TKEY_StartCmd(ControlStatus NewState); 268 void TKEY_IntConfig(u32 TKEY_Int, ControlStatus NewState); 269 FlagStatus TKEY_GetFlagStatus(u32 TKEY_Flag); 270 void TKEY_ClearFlag(u32 TKEY_Flag); 271 u32 TKEY_Get16BitCounterValue(void); 272 void TKEY_Set8BitCounterReload(u32 Reload); 273 u32 TKEY_Get8BitCounterReload(void); 274 275 void TKM_TimeSlotCounterClockConfig(TKM_Enum TKMn, TKM_TSS_CLK_Enum Sel); 276 void TKM_RefOSCCmd(TKM_Enum TKMn, ControlStatus NewState); 277 void TKM_KeyOSCCmd(TKM_Enum TKMn, ControlStatus NewState); 278 void TKM_MultiFreqCmd(TKM_Enum TKMn, ControlStatus NewState); 279 void TKM_SOFCtrlConfig(TKM_Enum TKMn, TKM_SOF_CTRL_Enum Sel); 280 void TKM_SOFFreqConfig(TKM_Enum TKMn, TKM_SOF_FREQ_Enum Sel); 281 void TKM_KeyCmd(TKM_Enum TKMn, TKM_KEY_Enum Key, ControlStatus NewState); 282 void TKM_TimeSlotKeyConfig(TKM_Enum TKMn, TKM_TIME_SLOT_Enum Slot, TKM_KEY_Enum Key); 283 void TKM_KeyThresholdConfig(TKM_Enum TKMn, TKM_KEY_Enum Key, TKM_KEY_THR_Enum Sel); 284 FlagStatus TKM_GetMatchFlagStatus(TKM_Enum TKMn, TKM_KEY_Enum Key); 285 void TKM_ClearMatchFlag(TKM_Enum TKMn, TKM_KEY_Enum Key); 286 void TKM_SetRefOSCCapacitor(TKM_Enum TKMn, u32 Value); 287 u32 TKM_GetRefOSCCapacitor(TKM_Enum TKMn); 288 void TKM_SetKeyCapacitor(TKM_Enum TKMn, TKM_KEY_Enum Key, u32 Value); 289 u32 TKM_GetKeyCapacitor(TKM_Enum TKMn, TKM_KEY_Enum Key); 290 u32 TKM_Get16BitCFCounterValue(TKM_Enum TKMn); 291 u32 TKM_GetKeyCounterValue(TKM_Enum TKMn, TKM_KEY_Enum Key); 292 void TKM_SetKeyThreshold(TKM_Enum TKMn, TKM_KEY_Enum Key, u32 Value); 293 u32 TKM_GetKeyThreshold(TKM_Enum TKMn, TKM_KEY_Enum Key); 294 /** 295 * @} 296 */ 297 298 299 /** 300 * @} 301 */ 302 303 /** 304 * @} 305 */ 306 307 #ifdef __cplusplus 308 } 309 #endif 310 311 #endif 312