1 /**************************************************************************//**
2  * @file     tk.h
3  * @version  V1.00
4  * @brief    TK Driver Header File
5  *
6  * SPDX-License-Identifier: Apache-2.0
7  * @copyright (C) 2020 Nuvoton Technology Corp. All rights reserved.
8  ******************************************************************************/
9 #ifndef __TK_H__
10 #define __TK_H__
11 
12 #include "NuMicro.h"
13 
14 #ifdef __cplusplus
15 extern "C"
16 {
17 #endif
18 
19 
20 /** @addtogroup Standard_Driver Standard Driver
21   @{
22 */
23 
24 /** @addtogroup TK_Driver TK Driver
25   @{
26 */
27 
28 /** @addtogroup TK_EXPORTED_CONSTANTS TK Exported Constants
29   @{
30 */
31 
32 #define TK_SCAN_MODE_SINGLE                 (0UL)                                             /*!< Touch key single scan mode   */
33 #define TK_SCAN_MODE_PERIODIC               (TK_SCANC_TRG_EN_Msk)                             /*!< Touch key periodic scan mode */
34 #define TK_SCAN_MODE_ALL_KEY                (TK_REFC_SCAN_ALL_Msk)                            /*!< Touch key all keys scan mode */
35 #define TK_SCAN_MODE_PERIODIC_ALL_KEY       (TK_SCANC_TRG_EN_Msk | TK_REFC_SCAN_ALL_Msk)       /*!< Touch key periodic with all keys scan mode */
36 
37 #define TK_SCAN_TRIGGER_SOURCE_TMR0         (1 << TK_SCANC_TMRTRG_EN_Pos)
38 #define TK_SCAN_TRIGGER_SOURCE_TMR1         (2 << TK_SCANC_TMRTRG_EN_Pos)
39 #define TK_SCAN_TRIGGER_SOURCE_TMR2         (3 << TK_SCANC_TMRTRG_EN_Pos)
40 #define TK_SCAN_TRIGGER_SOURCE_TMR3         (4 << TK_SCANC_TMRTRG_EN_Pos)
41 #define TK_SCAN_TRIGGER_SOURCE_LPTMR0       (8 << TK_SCANC_TMRTRG_EN_Pos)
42 #define TK_SCAN_TRIGGER_SOURCE_LPTMR1       (9 << TK_SCANC_TMRTRG_EN_Pos)
43 #define TK_SCAN_TRIGGER_SOURCE_TICKTMR0     (10 << TK_SCANC_TMRTRG_EN_Pos)
44 #define TK_SCAN_TRIGGER_SOURCE_TICKTMR1     (11 << TK_SCANC_TMRTRG_EN_Pos)
45 
46 #define TK_SENSE_PULSE_1                    (0UL << TK_REFC_PULSET_Pos)                       /*!< Touch key sensing pulse width is 1us   */
47 #define TK_SENSE_PULSE_2                    (1UL << TK_REFC_PULSET_Pos)                       /*!< Touch key sensing pulse width is 2us   */
48 #define TK_SENSE_PULSE_4                    (2UL << TK_REFC_PULSET_Pos)                       /*!< Touch key sensing pulse width is 4us   */
49 #define TK_SENSE_PULSE_8                    (3UL << TK_REFC_PULSET_Pos)                       /*!< Touch key sensing pulse width is 8us   */
50 #define TK_SENSE_PULSE_250NS                (6UL << TK_REFC_PULSET_Pos)                       /*!< Touch key sensing pulse width is 250ns */
51 #define TK_SENSE_PULSE_500NS                (7UL << TK_REFC_PULSET_Pos)                       /*!< Touch key sensing pulse width is 500ns */
52 
53 #define TK_SENSE_CNT_128                    (0UL << TK_REFC_SENSET_Pos)                       /*!< Touch key sensing count is 128  */
54 #define TK_SENSE_CNT_255                    (1UL << TK_REFC_SENSET_Pos)                       /*!< Touch key sensing count is 255  */
55 #define TK_SENSE_CNT_511                    (2UL << TK_REFC_SENSET_Pos)                       /*!< Touch key sensing count is 511  */
56 #define TK_SENSE_CNT_1023                   (3UL << TK_REFC_SENSET_Pos)                       /*!< Touch key sensing count is 1023 */
57 #define TK_SENSE_CNT_8                      (4UL << TK_REFC_SENSET_Pos)                       /*!< Touch key sensing count is 8    */
58 #define TK_SENSE_CNT_16                     (5UL << TK_REFC_SENSET_Pos)                       /*!< Touch key sensing count is 16   */
59 #define TK_SENSE_CNT_32                     (6UL << TK_REFC_SENSET_Pos)                       /*!< Touch key sensing count is 32   */
60 #define TK_SENSE_CNT_64                     (7UL << TK_REFC_SENSET_Pos)                       /*!< Touch key sensing count is 64   */
61 
62 #define TK_AVCCH_1_DIV_16                   (0UL << TK_SCANC_AVDDH_S_Pos)                     /*!< Touch key AVCCH voltage is 1/16 VDD */
63 #define TK_AVCCH_1_DIV_8                    (1UL << TK_SCANC_AVDDH_S_Pos)                     /*!< Touch key AVCCH voltage is 1/8 VDD  */
64 #define TK_AVCCH_3_DIV_16                   (2UL << TK_SCANC_AVDDH_S_Pos)                     /*!< Touch key AVCCH voltage is 3/16 VDD */
65 #define TK_AVCCH_1_DIV_4                    (3UL << TK_SCANC_AVDDH_S_Pos)                     /*!< Touch key AVCCH voltage is 1/4 VDD  */
66 #define TK_AVCCH_5_DIV_16                   (4UL << TK_SCANC_AVDDH_S_Pos)                     /*!< Touch key AVCCH voltage is 5/16 VDD */
67 #define TK_AVCCH_3_DIV_8                    (5UL << TK_SCANC_AVDDH_S_Pos)                     /*!< Touch key AVCCH voltage is 3/8 VDD  */
68 #define TK_AVCCH_7_DIV_16                   (6UL << TK_SCANC_AVDDH_S_Pos)                     /*!< Touch key AVCCH voltage is 7/16 VDD */
69 #define TK_AVCCH_1_DIV_2                    (7UL << TK_SCANC_AVDDH_S_Pos)                     /*!< Touch key AVCCH voltage is 1/2 VDD  */
70 #define TK_AVCCH_1_DIV_32                   (8UL << TK_SCANC_AVDDH_S_Pos)                     /*!< Touch key AVCCH voltage is 1/32 VDD */
71 #define TK_AVCCH_2_DIV_32                   (9UL << TK_SCANC_AVDDH_S_Pos)                     /*!< Touch key AVCCH voltage is 2/32 VDD */
72 #define TK_AVCCH_3_DIV_32                   (0xAUL << TK_SCANC_AVDDH_S_Pos)                   /*!< Touch key AVCCH voltage is 3/32 VDD */
73 #define TK_AVCCH_4_DIV_32                   (0xBUL << TK_SCANC_AVDDH_S_Pos)                   /*!< Touch key AVCCH voltage is 4/32 VDD */
74 #define TK_AVCCH_5_DIV_32                   (0xCUL << TK_SCANC_AVDDH_S_Pos)                   /*!< Touch key AVCCH voltage is 5/32 VDD */
75 #define TK_AVCCH_6_DIV_32                   (0xDUL << TK_SCANC_AVDDH_S_Pos)                   /*!< Touch key AVCCH voltage is 6/32 VDD */
76 #define TK_AVCCH_7_DIV_32                   (0xEUL << TK_SCANC_AVDDH_S_Pos)                   /*!< Touch key AVCCH voltage is 7/32 VDD */
77 #define TK_AVCCH_8_DIV_32                   (0xFUL << TK_SCANC_AVDDH_S_Pos)                   /*!< Touch key AVCCH voltage is 8/32 VDD */
78 
79 #define TK_TRG_EN_DISABLED                  (0UL << TK_SCANC_TMRTRG_EN_Pos)      /*!< Touch key periodic trigger source selction disabled */
80 #define TK_TRG_EN_TMR0                      (1UL << TK_SCANC_TMRTRG_EN_Pos)      /*!< Touch key periodic trigger source selction Timer0 */
81 #define TK_TRG_EN_TMR1                      (2UL << TK_SCANC_TMRTRG_EN_Pos)      /*!< Touch key periodic trigger source selction Timer1 */
82 #define TK_TRG_EN_TMR2                      (3UL << TK_SCANC_TMRTRG_EN_Pos)      /*!< Touch key periodic trigger source selction Timer2 */
83 #define TK_TRG_EN_TMR3                      (4UL << TK_SCANC_TMRTRG_EN_Pos)      /*!< Touch key periodic trigger source selction Timer3 */
84 #define TK_TRG_EN_RTC                       (5UL << TK_SCANC_TMRTRG_EN_Pos)      /*!< Touch key periodic trigger source selction RTC */
85 #define TK_TRG_EN_LPTMR0                    (8UL << TK_SCANC_TMRTRG_EN_Pos)      /*!< Touch key periodic trigger source selction LP Timer0 */
86 #define TK_TRG_EN_LPTMR1                    (9UL << TK_SCANC_TMRTRG_EN_Pos)      /*!< Touch key periodic trigger source selction LP Timer1 */
87 #define TK_TRG_EN_TICKTMR0                  (0xAUL << TK_SCANC_TMRTRG_EN_Pos)    /*!< Touch key periodic trigger source selction Tick Timer0 */
88 #define TK_TRG_EN_TICKTMR1                  (0xBUL << TK_SCANC_TMRTRG_EN_Pos)    /*!< Touch key periodic trigger source selction Tick Timer1 */
89 
90 #define TK_CAP_BANK_POL_SEL_GND             (0UL)                                             /*!< Touch key capacitor bank polarity is GND   */
91 #define TK_CAP_BANK_POL_SEL_AVCCH           (1UL)                                             /*!< Touch key capacitor bank polarity is AVCCH */
92 #define TK_CAP_BANK_POL_SEL_VDD             (2UL)                                             /*!< Touch key capacitor bank polarity is VDD   */
93 
94 #define TK_TKn_POL_SEL_GND                  (0UL)                                             /*!< Touch key polarity is GND   */
95 #define TK_TKn_POL_SEL_AVCCH                (1UL)                                             /*!< Touch key polarity is AVCCH */
96 #define TK_TKn_POL_SEL_VDD                  (2UL)                                             /*!< Touch key polarity is VDD   */
97 
98 #define TK_INT_EN_SCAN_COMPLETE             (TK_INTEN_SCIE_Msk)                               /*!< Touch key enable scan complete interrupt */
99 #define TK_INT_EN_SCAN_COMPLETE_LEVEL_TH    (TK_INTEN_SCIE_Msk | TK_INTEN_SCTHIE_Msk)         /*!< Touch key enable scan complete with threshold interrupt of level trigger mode */
100 
101 #define TK_INT_SCAN_COMPLETE                (TK_STA_SCIF_Msk)                                 /*!< Touch key scan complete interrupt */
102 #define TK_INT_SCAN_COMPLETE_TH_ALL         (0x1FFFF02UL)                                     /*!< Touch key scan complete or all touch keys threshold control interrupt */
103 #define TK_INT_SCAN_TH_ALL                  (0x1FFFF00UL)                                     /*!< ALL Touch key threshold control interrupt */
104 #define TK_INT_SCAN_TH_ALL1                 (0x000001FUL)                                     /*!< ALL Touch key threshold control interrupt */
105 #define TK_INT_SCAN_TH_TK0                  (TK_STA_TKIF0_Msk)                                /*!< Touch key 0  threshold control interrupt  */
106 #define TK_INT_SCAN_TH_TK1                  (TK_STA_TKIF1_Msk)                                /*!< Touch key 1  threshold control interrupt  */
107 #define TK_INT_SCAN_TH_TK2                  (TK_STA_TKIF2_Msk)                                /*!< Touch key 2  threshold control interrupt  */
108 #define TK_INT_SCAN_TH_TK3                  (TK_STA_TKIF3_Msk)                                /*!< Touch key 3  threshold control interrupt  */
109 #define TK_INT_SCAN_TH_TK4                  (TK_STA_TKIF4_Msk)                                /*!< Touch key 4  threshold control interrupt  */
110 #define TK_INT_SCAN_TH_TK5                  (TK_STA_TKIF5_Msk)                                /*!< Touch key 5  threshold control interrupt  */
111 #define TK_INT_SCAN_TH_TK6                  (TK_STA_TKIF6_Msk)                                /*!< Touch key 6  threshold control interrupt  */
112 #define TK_INT_SCAN_TH_TK7                  (TK_STA_TKIF7_Msk)                                /*!< Touch key 7  threshold control interrupt  */
113 #define TK_INT_SCAN_TH_TK8                  (TK_STA_TKIF8_Msk)                                /*!< Touch key 8  threshold control interrupt  */
114 #define TK_INT_SCAN_TH_TK9                  (TK_STA_TKIF9_Msk)                                /*!< Touch key 9  threshold control interrupt  */
115 #define TK_INT_SCAN_TH_TK10                 (TK_STA_TKIF10_Msk)                               /*!< Touch key 10 threshold control interrupt  */
116 #define TK_INT_SCAN_TH_TK11                 (TK_STA_TKIF11_Msk)                               /*!< Touch key 11 threshold control interrupt  */
117 #define TK_INT_SCAN_TH_TK12                 (TK_STA_TKIF12_Msk)                               /*!< Touch key 12 threshold control interrupt  */
118 #define TK_INT_SCAN_TH_TK13                 (TK_STA_TKIF13_Msk)                               /*!< Touch key 13 threshold control interrupt  */
119 #define TK_INT_SCAN_TH_TK14                 (TK_STA_TKIF14_Msk)                               /*!< Touch key 14 threshold control interrupt  */
120 #define TK_INT_SCAN_TH_TK15                 (TK_STA_TKIF15_Msk)                               /*!< Touch key 15 threshold control interrupt  */
121 #define TK_INT_SCAN_TH_TK16                 (TK_STA_TKIF16_Msk)                               /*!< Touch key 16 threshold control interrupt  */
122 #define TK_INT_SCAN_TH_TK17                 (TK_STA_TKIF17_Msk)                               /*!< Touch key 17 threshold control interrupt  */
123 #define TK_INT_SCAN_TH_TK18                 (TK_STA_TKIF18_Msk)                               /*!< Touch key 18 threshold control interrupt  */
124 #define TK_INT_SCAN_TH_TK19                 (TK_STA_TKIF19_Msk)                               /*!< Touch key 19 threshold control interrupt  */
125 #define TK_INT_SCAN_TH_TK20                 (TK_STA_TKIF20_Msk)                               /*!< Touch key 20 threshold control interrupt  */
126 #define TK_INT_SCAN_TH_TK21                 (TK_STA_TKIF21_Msk)                               /*!< Touch key 21 threshold control interrupt  */
127 #define TK_INT_SCAN_TH_TK22                 (TK_STA_TKIF22_Msk)                               /*!< Touch key 22 threshold control interrupt  */
128 #define TK_INT_SCAN_TH_TK23                 (TK_STA_TKIF23_Msk)                               /*!< Touch key 23 threshold control interrupt  */
129 #define TK_INT_SCAN_TH_TK24                 (TK_STA_TKIF24_Msk)                               /*!< Touch key 24 threshold control interrupt  */
130 #define TK_INT_SCAN_TH_TK25                 (TK_STA_TKIF25_Msk)                               /*!< Touch key 25 threshold control interrupt  */
131 
132 #define TK_SCANALL_NUM                      (31)                                              /*!< Touch key scan all number */
133 
134 /*@}*/ /* end of group TK_EXPORTED_CONSTANTS */
135 
136 
137 /** @addtogroup TK_EXPORTED_FUNCTIONS TK Exported Functions
138   @{
139 */
140 
141 /**
142  * @brief Enable scan key(s)
143  * @param[in] u32Mask Combination of enabled scan keys. Each bit corresponds to a touch key.
144  *                           Bit 0 represents touch key 0, bit 1 represents touch key 1...
145  * @return None
146  * @note Touch key 16 is the default reference key, so touch key 16 is enabled.
147  * \hideinitializer
148  */
149 #define TK_ENABLE_SCAN_KEY(u32Mask) (TK->SCANC |= (u32Mask&0x1FFFF)); \
150     (TK->SCANC1 |= ((u32Mask)>>17))
151 
152 /**
153  * @brief Disable scan key(s)
154  * @param[in] u32Mask Combination of disabled scan keys. Each bit corresponds to a touch key.
155  *                           Bit 0 represents touch key 0, bit 1 represents touch key 1...
156  * @return None
157  * \hideinitializer
158  */
159 #define TK_DISABLE_SCAN_KEY(u32Mask) (TK->SCANC &= ~(u32Mask&0x1FFFF)); \
160     (TK->SCANC1 &= ~((u32Mask)>>17))
161 
162 /**
163  * @brief Enable reference key(s)
164  * @param[in] u32Mask Combination of enabled reference keys. Each bit corresponds to a touch key.
165  *                           Bit 0 represents touch key 0, bit 1 represents touch key 1...
166  * @return None
167  * @note Touch key 16 is the default reference key, so touch key 16 is enabled.
168  * \hideinitializer
169  */
170 #define TK_ENABLE_REF_KEY(u32Mask) (TK->REFC |= (u32Mask&0x1FFFF)); \
171     (TK->REFC1 |= (u32Mask>>17))
172 
173 /**
174  * @brief Disable reference key(s)
175  * @param[in] u32Mask Combination of disabled reference keys. Each bit corresponds to a touch key.
176  *                           Bit 0 represents touch key 0, bit 1 represents touch key 1...
177  * @return None
178  * @note It must enable a reference key and touch key 16 is the default reference key.
179  *       If no any one touch key as reference key except touch key 16, then reference Touch key 16 can't be disable.
180  * \hideinitializer
181  */
182 #define TK_DISABLE_REF_KEY(u32Mask) (TK->REFC &= ~(u32Mask&0x1FFFF)); \
183     (TK->REFC1 &= ~(u32Mask>>17))
184 /**
185  * @brief Initiate enabled key(s) scan immediately.
186  * @param None
187  * @return None
188  * \hideinitializer
189  */
190 #define TK_START_SCAN() (TK->SCANC |= TK_SCANC_SCAN_Msk)
191 
192 /**
193  * @brief Set touch key Sensing pulse width.
194  * @param[in] u32PulseWidth Sensing pulse width.
195  *              - \ref TK_SENSE_PULSE_1
196  *              - \ref TK_SENSE_PULSE_2
197  *              - \ref TK_SENSE_PULSE_4
198  *              - \ref TK_SENSE_PULSE_8
199  *              - \ref TK_SENSE_PULSE_250NS
200  *              - \ref TK_SENSE_PULSE_500NS
201  * @return None
202  * \hideinitializer
203  */
204 #define TK_SET_PULSE_WIDTH(u32PulseWidth) (TK->REFC = (TK->REFC & ~TK_REFC_PULSET_Msk) | (u32PulseWidth))
205 
206 /**
207  * @brief Set touch key Sensing count.
208  * @param[in] u32SenseCnt Sensing count.
209  *              - \ref TK_SENSE_CNT_128
210  *              - \ref TK_SENSE_CNT_255
211  *              - \ref TK_SENSE_CNT_511
212  *              - \ref TK_SENSE_CNT_1023
213  *              - \ref TK_SENSE_CNT_8
214  *              - \ref TK_SENSE_CNT_16
215  *              - \ref TK_SENSE_CNT_32
216  *              - \ref TK_SENSE_CNT_64
217  * @return None
218  * \hideinitializer
219  */
220 #define TK_SET_SENSING_CNT(u32SenseCnt) (TK->REFC = (TK->REFC & ~TK_REFC_SENSET_Msk) | (u32SenseCnt))
221 
222 
223 /**
224  * @brief Set touch key AVCCH voltage.
225  * @param[in] u32AVCCHSel voltage selection.
226  *              - \ref TK_AVCCH_1_DIV_16
227  *              - \ref TK_AVCCH_1_DIV_8
228  *              - \ref TK_AVCCH_3_DIV_16
229  *              - \ref TK_AVCCH_1_DIV_4
230  *              - \ref TK_AVCCH_5_DIV_16
231  *              - \ref TK_AVCCH_3_DIV_8
232  *              - \ref TK_AVCCH_7_DIV_16
233  *              - \ref TK_AVCCH_1_DIV_2
234  *              - \ref TK_AVCCH_1_DIV_32
235  *              - \ref TK_AVCCH_2_DIV_32
236  *              - \ref TK_AVCCH_3_DIV_32
237  *              - \ref TK_AVCCH_4_DIV_32
238  *              - \ref TK_AVCCH_5_DIV_32
239  *              - \ref TK_AVCCH_6_DIV_32
240  *              - \ref TK_AVCCH_7_DIV_32
241  *              - \ref TK_AVCCH_8_DIV_32
242  * @return None
243  * \hideinitializer
244  */
245 #define TK_SET_AVCCH(u32AVCCHSel) (TK->SCANC = (TK->SCANC & ~TK_SCANC_AVDDH_S_Msk) | (u32AVCCHSel))
246 
247 /**
248  * @brief Get touch key complement capacitor bank data.
249  * @param[in] u32TKNum Touch key number. The valid value is 0~25.
250  * @return Complement capacitor bank data
251  * \hideinitializer
252  */
253 #define TK_GET_COMP_CAP_BANK_DATA(u32TKNum) ((u32TKNum<=16) ? (((*(__IO uint32_t *) (&(TK->CCBD0) + ((u32TKNum%17) >> 2))) >> ((u32TKNum%17) % 4 * 8) & TK_CCBD0_CCBD0_Msk)):(((*(__IO uint32_t *) (&(TK->CCBD5) + ((u32TKNum%17) >> 2))) >> ((u32TKNum%17) % 4 * 8) & TK_CCBD0_CCBD0_Msk)))
254 
255 /**
256  * @brief Get touch key sensing result data.
257  * @param[in] u32TKNum Touch key number. The valid value is 0~25.
258  * @return Sensing result data
259  * \hideinitializer
260  */
261 #define TK_GET_SENSE_DATA(u32TKNum) ((u32TKNum<=16) ? (((*(__IO uint32_t *) (&(TK->DAT0) + ((u32TKNum%17) >> 2))) >> ((u32TKNum%17) % 4 * 8) & TK_DAT0_TKDAT0_Msk)):(((*(__IO uint32_t *) (&(TK->DAT5) + ((u32TKNum%17) >> 2))) >> ((u32TKNum%17) % 4 * 8) & TK_DAT0_TKDAT0_Msk)))
262 
263 /**
264  * @brief Get touch key sensing result data.
265  * @param[in] u32TKNum Touch key number. The valid value is 17~25.
266  * @return Sensing result data
267  * \hideinitializer
268  */
269 #define TK_GET_SCANALL_SENSE_DATA() ((TK->DAT4 >> TK_DAT4_TKDAT_ALL_Pos) & TK_DAT0_TKDAT0_Msk)
270 
271 /**
272  * @brief Get touch key busy status.
273  * @param None
274  * @retval 0 Touch key is scan completed or stopped.
275  * @retval 1 Touch key is busy.
276  * \hideinitializer
277  */
278 #define TK_IS_BUSY() ((TK->STA & TK_STA_BUSY_Msk) ? 1: 0)
279 
280 /**
281  * @brief Get touch key interrupt flag.
282  * @param[in] u32Mask Interrupt flag type selection.
283  *              - \ref TK_INT_SCAN_COMPLETE
284  *              - \ref TK_INT_SCAN_COMPLETE_TH_ALL
285  *              - \ref TK_INT_SCAN_TH_ALL
286  *              - \ref TK_INT_SCAN_TH_TK0
287  *              - \ref TK_INT_SCAN_TH_TK1
288  *              - \ref TK_INT_SCAN_TH_TK2
289  *              - \ref TK_INT_SCAN_TH_TK3
290  *              - \ref TK_INT_SCAN_TH_TK4
291  *              - \ref TK_INT_SCAN_TH_TK5
292  *              - \ref TK_INT_SCAN_TH_TK6
293  *              - \ref TK_INT_SCAN_TH_TK7
294  *              - \ref TK_INT_SCAN_TH_TK8
295  *              - \ref TK_INT_SCAN_TH_TK9
296  *              - \ref TK_INT_SCAN_TH_TK10
297  *              - \ref TK_INT_SCAN_TH_TK11
298  *              - \ref TK_INT_SCAN_TH_TK12
299  *              - \ref TK_INT_SCAN_TH_TK13
300  *              - \ref TK_INT_SCAN_TH_TK14
301  *              - \ref TK_INT_SCAN_TH_TK15
302  *              - \ref TK_INT_SCAN_TH_TK16
303  * @retval 0 Touch key has no interrupt.
304  * @retval 1 Touch key is scan completed or threshold control event occurs.
305  * \hideinitializer
306  */
307 #define TK_GET_INT_STATUS(u32Mask) ((TK->STA & (u32Mask)) ? 1: 0)
308 
309 /**
310  * @brief Get touch key interrupt flag 1.
311  * @param[in] u32Mask Interrupt flag type selection.
312  *              - \ref TK_INT_SCAN_TH_ALL1
313  *              - \ref TK_INT_SCAN_TH_TK17
314  *              - \ref TK_INT_SCAN_TH_TK18
315  *              - \ref TK_INT_SCAN_TH_TK19
316  *              - \ref TK_INT_SCAN_TH_TK20
317  *              - \ref TK_INT_SCAN_TH_TK21
318  *              - \ref TK_INT_SCAN_TH_TK22
319  *              - \ref TK_INT_SCAN_TH_TK23
320  *              - \ref TK_INT_SCAN_TH_TK24
321  *              - \ref TK_INT_SCAN_TH_TK25
322  * @retval 0 Touch key has no interrupt.
323  * @retval 1 Touch key is scan completed or threshold control event occurs.
324  * \hideinitializer
325  */
326 #define TK_GET_INT_STATUS1(u32Mask) ((TK->STA1 & (u32Mask)) ? 1: 0)
327 
328 /**
329  * @brief Clear touch key interrupt flag.
330  * @param[in] u32Mask Interrupt flag type selection.
331  *              - \ref TK_INT_SCAN_COMPLETE
332  *              - \ref TK_INT_SCAN_COMPLETE_TH_ALL
333  *              - \ref TK_INT_SCAN_TH_ALL
334  *              - \ref TK_INT_SCAN_TH_TK0
335  *              - \ref TK_INT_SCAN_TH_TK1
336  *              - \ref TK_INT_SCAN_TH_TK2
337  *              - \ref TK_INT_SCAN_TH_TK3
338  *              - \ref TK_INT_SCAN_TH_TK4
339  *              - \ref TK_INT_SCAN_TH_TK5
340  *              - \ref TK_INT_SCAN_TH_TK6
341  *              - \ref TK_INT_SCAN_TH_TK7
342  *              - \ref TK_INT_SCAN_TH_TK8
343  *              - \ref TK_INT_SCAN_TH_TK9
344  *              - \ref TK_INT_SCAN_TH_TK10
345  *              - \ref TK_INT_SCAN_TH_TK11
346  *              - \ref TK_INT_SCAN_TH_TK12
347  *              - \ref TK_INT_SCAN_TH_TK13
348  *              - \ref TK_INT_SCAN_TH_TK14
349  *              - \ref TK_INT_SCAN_TH_TK15
350  *              - \ref TK_INT_SCAN_TH_TK16
351  *              - \ref TK_INT_SCAN_TH_TK17
352  * @return None
353  * \hideinitializer
354  */
355 #define TK_CLR_INT_FLAG(u32Mask) (TK->STA = (u32Mask))
356 
357 /**
358  * @brief Clear touch key interrupt flag 1.
359  * @param[in] u32Mask Interrupt flag type selection.
360  *              - \ref TK_INT_SCAN_TH_ALL1
361  *              - \ref TK_INT_SCAN_TH_TK17
362  *              - \ref TK_INT_SCAN_TH_TK18
363  *              - \ref TK_INT_SCAN_TH_TK19
364  *              - \ref TK_INT_SCAN_TH_TK20
365  *              - \ref TK_INT_SCAN_TH_TK21
366  *              - \ref TK_INT_SCAN_TH_TK22
367  *              - \ref TK_INT_SCAN_TH_TK23
368  *              - \ref TK_INT_SCAN_TH_TK24
369  *              - \ref TK_INT_SCAN_TH_TK25
370  * @return None
371  * \hideinitializer
372  */
373 #define TK_CLR_INT_FLAG1(u32Mask) (TK->STA1 = (u32Mask))
374 
375 #define TK_INITIAL_POTENTIAL_GND             (0UL << TK_POLC_POL_INIT_Pos)
376 #define TK_INITIAL_POTENTIAL_AVDDH                   (1UL << TK_POLC_POL_INIT_Pos)
377 /**
378  * @brief Set TK Sensing Initial Potential Level
379  * @param[in] u32Level Sensing Initial Potential Level.
380  *              - \ref TK_INITIAL_POTENTIAL_GND
381  *              - \ref TK_INITIAL_POTENTIAL_AVDDH
382  * @return None
383  * \hideinitializer
384  */
385 #define TK_SET_INITIAL_POTENTIAL_LEVEL(u32Level) (TK->REFC = (TK->REFC & ~TK_POLC_POL_INIT_Msk) | (u32Level))
386 
387 
388 #define TK_CAPACITOR_BANK_SEL_MODE0                     (0UL << TK_EXTCBC_EXT_CBSEL_Pos)
389 #define TK_CAPACITOR_BANK_SEL_MODE1 					(1UL << TK_EXTCBC_EXT_CBSEL_Pos)
390 #define TK_CAPACITOR_BANK_SEL_MODE2 					(2UL << TK_EXTCBC_EXT_CBSEL_Pos)
391 /**
392  * @brief Set TK Capacitor Bank Select Mode
393  * @param[in] u32Level Capacitor Bank Select Mode
394  *              - \ref TK_CAPACITOR_BANK_SEL_MODE0
395  *              - \ref TK_CAPACITOR_BANK_SEL_MODE1
396  *              - \ref TK_CAPACITOR_BANK_SEL_MODE2
397  * @return None
398  * \hideinitializer
399  */
400 #define TK_EXTEND_CAPACITOR_BANK_SEL(u32CapBankSel) (TK->EXTCBC = (TK->EXTCBC & ~TK_EXTCBC_EXT_CBSEL_Msk) | (u32CapBankSel))
401 
402 /*---------------------------------------------------------------------------------------------------------*/
403 /* Define TK functions prototype                                                                          */
404 /*---------------------------------------------------------------------------------------------------------*/
405 void TK_Open(void);
406 void TK_Close(void);
407 void TK_SetScanMode(uint32_t u32Mode);
408 void TK_ConfigSensitivity(uint32_t u32PulseWidth, uint32_t u32SenseCnt, uint32_t u32AVCCHSel);
409 void TK_SetCapBankPol(uint32_t u32CapBankPolSel);
410 void TK_EnableTkPolarity(uint32_t u32Mask);
411 void TK_DisableTkPolarity(uint32_t u32Mask);
412 void TK_SetCompCapBankData(uint32_t u32TKNum, uint32_t u32CapData);
413 void TK_SetTkPol(uint32_t u32Mask, uint32_t u32PolSel);
414 void TK_SetRefKeyCapBankData(uint32_t u32CapData);
415 void TK_SetRefCapBankData(uint32_t u32TKNum, uint32_t u32CapData);
416 void TK_SetScanThreshold(uint32_t u32TKNum, uint32_t u32HighLevel);
417 void TK_EnableInt(uint32_t u32Msk);
418 void TK_DisableInt(uint32_t u32Msk);
419 
420 void TK_DisableScanAll(void);
421 void TK_EnableScanAll(uint8_t u8RefcbAll, uint8_t u8CcbAll, uint8_t u8HThAll);
422 void TK_DisableAllChannel(void);
423 void TK_ClearTKIF(void);
424 
425 void TK_ConfigPowerDown(uint8_t u8Sensitivity);
426 
427 /*@}*/ /* end of group TK_EXPORTED_FUNCTIONS */
428 
429 /*@}*/ /* end of group TK_Driver */
430 
431 /*@}*/ /* end of group Standard_Driver */
432 
433 #ifdef __cplusplus
434 }
435 #endif
436 
437 #endif //__TK_H__
438