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