Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
2 | mjames | 1 | /** |
2 | ****************************************************************************** |
||
3 | * @file stm32f0xx_hal_tsc.c |
||
4 | * @author MCD Application Team |
||
5 | * @brief This file provides firmware functions to manage the following |
||
6 | * functionalities of the Touch Sensing Controller (TSC) peripheral: |
||
7 | * + Initialization and De-initialization |
||
8 | * + Channel IOs, Shield IOs and Sampling IOs configuration |
||
9 | * + Start and Stop an acquisition |
||
10 | * + Read acquisition result |
||
11 | * + Interrupts and flags management |
||
12 | * |
||
13 | @verbatim |
||
14 | ================================================================================ |
||
15 | ##### TSC specific features ##### |
||
16 | ================================================================================ |
||
17 | [..] |
||
18 | (#) Proven and robust surface charge transfer acquisition principle |
||
19 | |||
20 | (#) Supports up to 3 capacitive sensing channels per group |
||
21 | |||
22 | (#) Capacitive sensing channels can be acquired in parallel offering a very good |
||
23 | response time |
||
24 | |||
25 | (#) Spread spectrum feature to improve system robustness in noisy environments |
||
26 | |||
27 | (#) Full hardware management of the charge transfer acquisition sequence |
||
28 | |||
29 | (#) Programmable charge transfer frequency |
||
30 | |||
31 | (#) Programmable sampling capacitor I/O pin |
||
32 | |||
33 | (#) Programmable channel I/O pin |
||
34 | |||
35 | (#) Programmable max count value to avoid long acquisition when a channel is faulty |
||
36 | |||
37 | (#) Dedicated end of acquisition and max count error flags with interrupt capability |
||
38 | |||
39 | (#) One sampling capacitor for up to 3 capacitive sensing channels to reduce the system |
||
40 | components |
||
41 | |||
42 | (#) Compatible with proximity, touchkey, linear and rotary touch sensor implementation |
||
43 | |||
44 | ##### How to use this driver ##### |
||
45 | ================================================================================ |
||
46 | [..] |
||
47 | (#) Enable the TSC interface clock using __HAL_RCC_TSC_CLK_ENABLE() macro. |
||
48 | |||
49 | (#) GPIO pins configuration |
||
50 | (++) Enable the clock for the TSC GPIOs using __HAL_RCC_GPIOx_CLK_ENABLE() macro. |
||
51 | (++) Configure the TSC pins used as sampling IOs in alternate function output Open-Drain mode, |
||
52 | and TSC pins used as channel/shield IOs in alternate function output Push-Pull mode |
||
53 | using HAL_GPIO_Init() function. |
||
54 | |||
55 | (#) Interrupts configuration |
||
56 | (++) Configure the NVIC (if the interrupt model is used) using HAL_NVIC_SetPriority() |
||
57 | and HAL_NVIC_EnableIRQ() and function. |
||
58 | |||
59 | (#) TSC configuration |
||
60 | (++) Configure all TSC parameters and used TSC IOs using HAL_TSC_Init() function. |
||
61 | |||
62 | [..] TSC peripheral alternate functions are mapped on AF9. |
||
63 | |||
64 | *** Acquisition sequence *** |
||
65 | =================================== |
||
66 | [..] |
||
67 | (+) Discharge all IOs using HAL_TSC_IODischarge() function. |
||
68 | (+) Wait a certain time allowing a good discharge of all capacitors. This delay depends |
||
69 | of the sampling capacitor and electrodes design. |
||
70 | (+) Select the channel IOs to be acquired using HAL_TSC_IOConfig() function. |
||
71 | (+) Launch the acquisition using either HAL_TSC_Start() or HAL_TSC_Start_IT() function. |
||
72 | If the synchronized mode is selected, the acquisition will start as soon as the signal |
||
73 | is received on the synchro pin. |
||
74 | (+) Wait the end of acquisition using either HAL_TSC_PollForAcquisition() or |
||
75 | HAL_TSC_GetState() function or using WFI instruction for example. |
||
76 | (+) Check the group acquisition status using HAL_TSC_GroupGetStatus() function. |
||
77 | (+) Read the acquisition value using HAL_TSC_GroupGetValue() function. |
||
78 | |||
79 | *** Callback registration *** |
||
80 | ============================================= |
||
81 | |||
82 | [..] |
||
83 | The compilation flag USE_HAL_TSC_REGISTER_CALLBACKS when set to 1 |
||
84 | allows the user to configure dynamically the driver callbacks. |
||
6 | mjames | 85 | Use Functions HAL_TSC_RegisterCallback() to register an interrupt callback. |
2 | mjames | 86 | |
87 | [..] |
||
6 | mjames | 88 | Function HAL_TSC_RegisterCallback() allows to register following callbacks: |
2 | mjames | 89 | (+) ConvCpltCallback : callback for conversion complete process. |
90 | (+) ErrorCallback : callback for error detection. |
||
91 | (+) MspInitCallback : callback for Msp Init. |
||
92 | (+) MspDeInitCallback : callback for Msp DeInit. |
||
93 | [..] |
||
94 | This function takes as parameters the HAL peripheral handle, the Callback ID |
||
95 | and a pointer to the user callback function. |
||
96 | |||
97 | [..] |
||
6 | mjames | 98 | Use function HAL_TSC_UnRegisterCallback to reset a callback to the default |
2 | mjames | 99 | weak function. |
6 | mjames | 100 | HAL_TSC_UnRegisterCallback takes as parameters the HAL peripheral handle, |
2 | mjames | 101 | and the Callback ID. |
102 | [..] |
||
103 | This function allows to reset following callbacks: |
||
104 | (+) ConvCpltCallback : callback for conversion complete process. |
||
105 | (+) ErrorCallback : callback for error detection. |
||
106 | (+) MspInitCallback : callback for Msp Init. |
||
107 | (+) MspDeInitCallback : callback for Msp DeInit. |
||
108 | |||
109 | [..] |
||
6 | mjames | 110 | By default, after the HAL_TSC_Init() and when the state is HAL_TSC_STATE_RESET |
2 | mjames | 111 | all callbacks are set to the corresponding weak functions: |
6 | mjames | 112 | examples HAL_TSC_ConvCpltCallback(), HAL_TSC_ErrorCallback(). |
2 | mjames | 113 | Exception done for MspInit and MspDeInit functions that are |
6 | mjames | 114 | reset to the legacy weak functions in the HAL_TSC_Init()/ HAL_TSC_DeInit() only when |
2 | mjames | 115 | these callbacks are null (not registered beforehand). |
6 | mjames | 116 | If MspInit or MspDeInit are not null, the HAL_TSC_Init()/ HAL_TSC_DeInit() |
2 | mjames | 117 | keep and use the user MspInit/MspDeInit callbacks (registered beforehand) whatever the state. |
118 | |||
119 | [..] |
||
6 | mjames | 120 | Callbacks can be registered/unregistered in HAL_TSC_STATE_READY state only. |
2 | mjames | 121 | Exception done MspInit/MspDeInit functions that can be registered/unregistered |
6 | mjames | 122 | in HAL_TSC_STATE_READY or HAL_TSC_STATE_RESET state, |
2 | mjames | 123 | thus registered (user) MspInit/DeInit callbacks can be used during the Init/DeInit. |
124 | Then, the user first registers the MspInit/MspDeInit user callbacks |
||
6 | mjames | 125 | using HAL_TSC_RegisterCallback() before calling HAL_TSC_DeInit() |
126 | or HAL_TSC_Init() function. |
||
2 | mjames | 127 | |
128 | [..] |
||
129 | When the compilation flag USE_HAL_TSC_REGISTER_CALLBACKS is set to 0 or |
||
130 | not defined, the callback registration feature is not available and all callbacks |
||
131 | are set to the corresponding weak functions. |
||
132 | |||
133 | @endverbatim |
||
134 | ****************************************************************************** |
||
135 | ****************************************************************************** |
||
136 | * @attention |
||
137 | * |
||
138 | * <h2><center>© Copyright (c) 2016 STMicroelectronics. |
||
139 | * All rights reserved.</center></h2> |
||
140 | * |
||
141 | * This software component is licensed by ST under BSD 3-Clause license, |
||
142 | * the "License"; You may not use this file except in compliance with the |
||
143 | * License. You may obtain a copy of the License at: |
||
144 | * opensource.org/licenses/BSD-3-Clause |
||
145 | * |
||
146 | ****************************************************************************** |
||
147 | */ |
||
148 | |||
149 | /* Includes ------------------------------------------------------------------*/ |
||
150 | #include "stm32f0xx_hal.h" |
||
151 | |||
152 | #if defined(TSC) |
||
153 | /** @addtogroup STM32F0xx_HAL_Driver |
||
154 | * @{ |
||
155 | */ |
||
156 | |||
157 | /** @defgroup TSC TSC |
||
158 | * @brief HAL TSC module driver |
||
159 | * @{ |
||
160 | */ |
||
161 | |||
162 | #ifdef HAL_TSC_MODULE_ENABLED |
||
163 | |||
164 | /* Private typedef -----------------------------------------------------------*/ |
||
165 | /* Private define ------------------------------------------------------------*/ |
||
166 | /* Private macro -------------------------------------------------------------*/ |
||
167 | /* Private variables ---------------------------------------------------------*/ |
||
168 | /* Private function prototypes -----------------------------------------------*/ |
||
169 | static uint32_t TSC_extract_groups(uint32_t iomask); |
||
170 | |||
171 | /* Exported functions --------------------------------------------------------*/ |
||
172 | |||
173 | /** @defgroup TSC_Exported_Functions TSC Exported Functions |
||
174 | * @{ |
||
175 | */ |
||
176 | |||
177 | /** @defgroup TSC_Exported_Functions_Group1 Initialization and de-initialization functions |
||
6 | mjames | 178 | * @brief Initialization and Configuration functions |
179 | * |
||
2 | mjames | 180 | @verbatim |
181 | =============================================================================== |
||
182 | ##### Initialization and de-initialization functions ##### |
||
183 | =============================================================================== |
||
184 | [..] This section provides functions allowing to: |
||
185 | (+) Initialize and configure the TSC. |
||
186 | (+) De-initialize the TSC. |
||
187 | @endverbatim |
||
188 | * @{ |
||
189 | */ |
||
190 | |||
191 | /** |
||
192 | * @brief Initialize the TSC peripheral according to the specified parameters |
||
193 | * in the TSC_InitTypeDef structure and initialize the associated handle. |
||
194 | * @param htsc TSC handle |
||
195 | * @retval HAL status |
||
196 | */ |
||
197 | HAL_StatusTypeDef HAL_TSC_Init(TSC_HandleTypeDef *htsc) |
||
198 | { |
||
199 | /* Check TSC handle allocation */ |
||
200 | if (htsc == NULL) |
||
201 | { |
||
202 | return HAL_ERROR; |
||
203 | } |
||
204 | |||
205 | /* Check the parameters */ |
||
206 | assert_param(IS_TSC_ALL_INSTANCE(htsc->Instance)); |
||
207 | assert_param(IS_TSC_CTPH(htsc->Init.CTPulseHighLength)); |
||
208 | assert_param(IS_TSC_CTPL(htsc->Init.CTPulseLowLength)); |
||
209 | assert_param(IS_TSC_SS(htsc->Init.SpreadSpectrum)); |
||
210 | assert_param(IS_TSC_SSD(htsc->Init.SpreadSpectrumDeviation)); |
||
211 | assert_param(IS_TSC_SS_PRESC(htsc->Init.SpreadSpectrumPrescaler)); |
||
212 | assert_param(IS_TSC_PG_PRESC(htsc->Init.PulseGeneratorPrescaler)); |
||
6 | mjames | 213 | assert_param(IS_TSC_PG_PRESC_VS_CTPL(htsc->Init.PulseGeneratorPrescaler, htsc->Init.CTPulseLowLength)); |
2 | mjames | 214 | assert_param(IS_TSC_MCV(htsc->Init.MaxCountValue)); |
215 | assert_param(IS_TSC_IODEF(htsc->Init.IODefaultMode)); |
||
216 | assert_param(IS_TSC_SYNC_POL(htsc->Init.SynchroPinPolarity)); |
||
217 | assert_param(IS_TSC_ACQ_MODE(htsc->Init.AcquisitionMode)); |
||
218 | assert_param(IS_TSC_MCE_IT(htsc->Init.MaxCountInterrupt)); |
||
219 | assert_param(IS_TSC_GROUP(htsc->Init.ChannelIOs)); |
||
220 | assert_param(IS_TSC_GROUP(htsc->Init.ShieldIOs)); |
||
221 | assert_param(IS_TSC_GROUP(htsc->Init.SamplingIOs)); |
||
222 | |||
223 | if (htsc->State == HAL_TSC_STATE_RESET) |
||
224 | { |
||
225 | /* Allocate lock resource and initialize it */ |
||
226 | htsc->Lock = HAL_UNLOCKED; |
||
227 | |||
228 | #if (USE_HAL_TSC_REGISTER_CALLBACKS == 1) |
||
229 | /* Init the TSC Callback settings */ |
||
230 | htsc->ConvCpltCallback = HAL_TSC_ConvCpltCallback; /* Legacy weak ConvCpltCallback */ |
||
231 | htsc->ErrorCallback = HAL_TSC_ErrorCallback; /* Legacy weak ErrorCallback */ |
||
232 | |||
233 | if (htsc->MspInitCallback == NULL) |
||
234 | { |
||
235 | htsc->MspInitCallback = HAL_TSC_MspInit; /* Legacy weak MspInit */ |
||
236 | } |
||
237 | |||
238 | /* Init the low level hardware : GPIO, CLOCK, CORTEX...etc */ |
||
239 | htsc->MspInitCallback(htsc); |
||
240 | #else |
||
241 | /* Init the low level hardware : GPIO, CLOCK, CORTEX */ |
||
242 | HAL_TSC_MspInit(htsc); |
||
243 | #endif /* USE_HAL_TSC_REGISTER_CALLBACKS */ |
||
244 | } |
||
245 | |||
246 | /* Initialize the TSC state */ |
||
247 | htsc->State = HAL_TSC_STATE_BUSY; |
||
248 | |||
249 | /*--------------------------------------------------------------------------*/ |
||
250 | /* Set TSC parameters */ |
||
251 | |||
252 | /* Enable TSC */ |
||
253 | htsc->Instance->CR = TSC_CR_TSCE; |
||
254 | |||
255 | /* Set all functions */ |
||
256 | htsc->Instance->CR |= (htsc->Init.CTPulseHighLength | |
||
257 | htsc->Init.CTPulseLowLength | |
||
258 | (htsc->Init.SpreadSpectrumDeviation << TSC_CR_SSD_Pos) | |
||
259 | htsc->Init.SpreadSpectrumPrescaler | |
||
260 | htsc->Init.PulseGeneratorPrescaler | |
||
261 | htsc->Init.MaxCountValue | |
||
262 | htsc->Init.SynchroPinPolarity | |
||
263 | htsc->Init.AcquisitionMode); |
||
264 | |||
265 | /* Spread spectrum */ |
||
266 | if (htsc->Init.SpreadSpectrum == ENABLE) |
||
267 | { |
||
268 | htsc->Instance->CR |= TSC_CR_SSE; |
||
269 | } |
||
270 | |||
271 | /* Disable Schmitt trigger hysteresis on all used TSC IOs */ |
||
272 | htsc->Instance->IOHCR = (~(htsc->Init.ChannelIOs | htsc->Init.ShieldIOs | htsc->Init.SamplingIOs)); |
||
273 | |||
274 | /* Set channel and shield IOs */ |
||
275 | htsc->Instance->IOCCR = (htsc->Init.ChannelIOs | htsc->Init.ShieldIOs); |
||
276 | |||
277 | /* Set sampling IOs */ |
||
278 | htsc->Instance->IOSCR = htsc->Init.SamplingIOs; |
||
279 | |||
280 | /* Set the groups to be acquired */ |
||
281 | htsc->Instance->IOGCSR = TSC_extract_groups(htsc->Init.ChannelIOs); |
||
282 | |||
283 | /* Disable interrupts */ |
||
284 | htsc->Instance->IER &= (~(TSC_IT_EOA | TSC_IT_MCE)); |
||
285 | |||
286 | /* Clear flags */ |
||
287 | htsc->Instance->ICR = (TSC_FLAG_EOA | TSC_FLAG_MCE); |
||
288 | |||
289 | /*--------------------------------------------------------------------------*/ |
||
290 | |||
291 | /* Initialize the TSC state */ |
||
292 | htsc->State = HAL_TSC_STATE_READY; |
||
293 | |||
294 | /* Return function status */ |
||
295 | return HAL_OK; |
||
296 | } |
||
297 | |||
298 | /** |
||
299 | * @brief Deinitialize the TSC peripheral registers to their default reset values. |
||
300 | * @param htsc TSC handle |
||
301 | * @retval HAL status |
||
302 | */ |
||
303 | HAL_StatusTypeDef HAL_TSC_DeInit(TSC_HandleTypeDef *htsc) |
||
304 | { |
||
305 | /* Check TSC handle allocation */ |
||
306 | if (htsc == NULL) |
||
307 | { |
||
308 | return HAL_ERROR; |
||
309 | } |
||
310 | |||
311 | /* Check the parameters */ |
||
312 | assert_param(IS_TSC_ALL_INSTANCE(htsc->Instance)); |
||
313 | |||
314 | /* Change TSC state */ |
||
315 | htsc->State = HAL_TSC_STATE_BUSY; |
||
316 | |||
317 | #if (USE_HAL_TSC_REGISTER_CALLBACKS == 1) |
||
318 | if (htsc->MspDeInitCallback == NULL) |
||
319 | { |
||
320 | htsc->MspDeInitCallback = HAL_TSC_MspDeInit; /* Legacy weak MspDeInit */ |
||
321 | } |
||
322 | |||
323 | /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ |
||
324 | htsc->MspDeInitCallback(htsc); |
||
325 | #else |
||
326 | /* DeInit the low level hardware */ |
||
327 | HAL_TSC_MspDeInit(htsc); |
||
328 | #endif /* USE_HAL_TSC_REGISTER_CALLBACKS */ |
||
329 | |||
330 | /* Change TSC state */ |
||
331 | htsc->State = HAL_TSC_STATE_RESET; |
||
332 | |||
333 | /* Process unlocked */ |
||
334 | __HAL_UNLOCK(htsc); |
||
335 | |||
336 | /* Return function status */ |
||
337 | return HAL_OK; |
||
338 | } |
||
339 | |||
340 | /** |
||
341 | * @brief Initialize the TSC MSP. |
||
342 | * @param htsc Pointer to a TSC_HandleTypeDef structure that contains |
||
343 | * the configuration information for the specified TSC. |
||
344 | * @retval None |
||
345 | */ |
||
346 | __weak void HAL_TSC_MspInit(TSC_HandleTypeDef *htsc) |
||
347 | { |
||
348 | /* Prevent unused argument(s) compilation warning */ |
||
349 | UNUSED(htsc); |
||
350 | |||
351 | /* NOTE : This function should not be modified, when the callback is needed, |
||
352 | the HAL_TSC_MspInit could be implemented in the user file. |
||
353 | */ |
||
354 | } |
||
355 | |||
356 | /** |
||
357 | * @brief DeInitialize the TSC MSP. |
||
358 | * @param htsc Pointer to a TSC_HandleTypeDef structure that contains |
||
359 | * the configuration information for the specified TSC. |
||
360 | * @retval None |
||
361 | */ |
||
362 | __weak void HAL_TSC_MspDeInit(TSC_HandleTypeDef *htsc) |
||
363 | { |
||
364 | /* Prevent unused argument(s) compilation warning */ |
||
365 | UNUSED(htsc); |
||
366 | |||
367 | /* NOTE : This function should not be modified, when the callback is needed, |
||
368 | the HAL_TSC_MspDeInit could be implemented in the user file. |
||
369 | */ |
||
370 | } |
||
371 | |||
372 | #if (USE_HAL_TSC_REGISTER_CALLBACKS == 1) |
||
373 | /** |
||
374 | * @brief Register a User TSC Callback |
||
375 | * To be used instead of the weak predefined callback |
||
376 | * @param htsc Pointer to a TSC_HandleTypeDef structure that contains |
||
377 | * the configuration information for the specified TSC. |
||
378 | * @param CallbackID ID of the callback to be registered |
||
379 | * This parameter can be one of the following values: |
||
380 | * @arg @ref HAL_TSC_CONV_COMPLETE_CB_ID Conversion completed callback ID |
||
381 | * @arg @ref HAL_TSC_ERROR_CB_ID Error callback ID |
||
382 | * @arg @ref HAL_TSC_MSPINIT_CB_ID MspInit callback ID |
||
383 | * @arg @ref HAL_TSC_MSPDEINIT_CB_ID MspDeInit callback ID |
||
384 | * @param pCallback pointer to the Callback function |
||
385 | * @retval HAL status |
||
386 | */ |
||
6 | mjames | 387 | HAL_StatusTypeDef HAL_TSC_RegisterCallback(TSC_HandleTypeDef *htsc, HAL_TSC_CallbackIDTypeDef CallbackID, |
388 | pTSC_CallbackTypeDef pCallback) |
||
2 | mjames | 389 | { |
390 | HAL_StatusTypeDef status = HAL_OK; |
||
391 | |||
392 | if (pCallback == NULL) |
||
393 | { |
||
394 | /* Update the error code */ |
||
395 | htsc->ErrorCode |= HAL_TSC_ERROR_INVALID_CALLBACK; |
||
396 | |||
397 | return HAL_ERROR; |
||
398 | } |
||
399 | /* Process locked */ |
||
400 | __HAL_LOCK(htsc); |
||
401 | |||
402 | if (HAL_TSC_STATE_READY == htsc->State) |
||
403 | { |
||
404 | switch (CallbackID) |
||
405 | { |
||
406 | case HAL_TSC_CONV_COMPLETE_CB_ID : |
||
407 | htsc->ConvCpltCallback = pCallback; |
||
408 | break; |
||
409 | |||
410 | case HAL_TSC_ERROR_CB_ID : |
||
411 | htsc->ErrorCallback = pCallback; |
||
412 | break; |
||
413 | |||
414 | case HAL_TSC_MSPINIT_CB_ID : |
||
415 | htsc->MspInitCallback = pCallback; |
||
416 | break; |
||
417 | |||
418 | case HAL_TSC_MSPDEINIT_CB_ID : |
||
419 | htsc->MspDeInitCallback = pCallback; |
||
420 | break; |
||
421 | |||
422 | default : |
||
423 | /* Update the error code */ |
||
424 | htsc->ErrorCode |= HAL_TSC_ERROR_INVALID_CALLBACK; |
||
425 | |||
426 | /* Return error status */ |
||
427 | status = HAL_ERROR; |
||
428 | break; |
||
429 | } |
||
430 | } |
||
431 | else if (HAL_TSC_STATE_RESET == htsc->State) |
||
432 | { |
||
433 | switch (CallbackID) |
||
434 | { |
||
435 | case HAL_TSC_MSPINIT_CB_ID : |
||
436 | htsc->MspInitCallback = pCallback; |
||
437 | break; |
||
438 | |||
439 | case HAL_TSC_MSPDEINIT_CB_ID : |
||
440 | htsc->MspDeInitCallback = pCallback; |
||
441 | break; |
||
442 | |||
443 | default : |
||
444 | /* Update the error code */ |
||
445 | htsc->ErrorCode |= HAL_TSC_ERROR_INVALID_CALLBACK; |
||
446 | |||
447 | /* Return error status */ |
||
448 | status = HAL_ERROR; |
||
449 | break; |
||
450 | } |
||
451 | } |
||
452 | else |
||
453 | { |
||
454 | /* Update the error code */ |
||
455 | htsc->ErrorCode |= HAL_TSC_ERROR_INVALID_CALLBACK; |
||
456 | |||
457 | /* Return error status */ |
||
458 | status = HAL_ERROR; |
||
459 | } |
||
460 | |||
461 | /* Release Lock */ |
||
462 | __HAL_UNLOCK(htsc); |
||
463 | return status; |
||
464 | } |
||
465 | |||
466 | /** |
||
467 | * @brief Unregister an TSC Callback |
||
468 | * TSC callback is redirected to the weak predefined callback |
||
469 | * @param htsc Pointer to a TSC_HandleTypeDef structure that contains |
||
470 | * the configuration information for the specified TSC. |
||
471 | * @param CallbackID ID of the callback to be unregistered |
||
472 | * This parameter can be one of the following values: |
||
473 | * This parameter can be one of the following values: |
||
474 | * @arg @ref HAL_TSC_CONV_COMPLETE_CB_ID Conversion completed callback ID |
||
475 | * @arg @ref HAL_TSC_ERROR_CB_ID Error callback ID |
||
476 | * @arg @ref HAL_TSC_MSPINIT_CB_ID MspInit callback ID |
||
477 | * @arg @ref HAL_TSC_MSPDEINIT_CB_ID MspDeInit callback ID |
||
478 | * @retval HAL status |
||
479 | */ |
||
480 | HAL_StatusTypeDef HAL_TSC_UnRegisterCallback(TSC_HandleTypeDef *htsc, HAL_TSC_CallbackIDTypeDef CallbackID) |
||
481 | { |
||
482 | HAL_StatusTypeDef status = HAL_OK; |
||
483 | |||
484 | /* Process locked */ |
||
485 | __HAL_LOCK(htsc); |
||
486 | |||
487 | if (HAL_TSC_STATE_READY == htsc->State) |
||
488 | { |
||
489 | switch (CallbackID) |
||
490 | { |
||
491 | case HAL_TSC_CONV_COMPLETE_CB_ID : |
||
492 | htsc->ConvCpltCallback = HAL_TSC_ConvCpltCallback; /* Legacy weak ConvCpltCallback */ |
||
493 | break; |
||
494 | |||
495 | case HAL_TSC_ERROR_CB_ID : |
||
496 | htsc->ErrorCallback = HAL_TSC_ErrorCallback; /* Legacy weak ErrorCallback */ |
||
497 | break; |
||
498 | |||
499 | case HAL_TSC_MSPINIT_CB_ID : |
||
500 | htsc->MspInitCallback = HAL_TSC_MspInit; /* Legacy weak MspInit */ |
||
501 | break; |
||
502 | |||
503 | case HAL_TSC_MSPDEINIT_CB_ID : |
||
504 | htsc->MspDeInitCallback = HAL_TSC_MspDeInit; /* Legacy weak MspDeInit */ |
||
505 | break; |
||
506 | |||
507 | default : |
||
508 | /* Update the error code */ |
||
509 | htsc->ErrorCode |= HAL_TSC_ERROR_INVALID_CALLBACK; |
||
510 | |||
511 | /* Return error status */ |
||
512 | status = HAL_ERROR; |
||
513 | break; |
||
514 | } |
||
515 | } |
||
516 | else if (HAL_TSC_STATE_RESET == htsc->State) |
||
517 | { |
||
518 | switch (CallbackID) |
||
519 | { |
||
520 | case HAL_TSC_MSPINIT_CB_ID : |
||
521 | htsc->MspInitCallback = HAL_TSC_MspInit; /* Legacy weak MspInit */ |
||
522 | break; |
||
523 | |||
524 | case HAL_TSC_MSPDEINIT_CB_ID : |
||
525 | htsc->MspDeInitCallback = HAL_TSC_MspDeInit; /* Legacy weak MspDeInit */ |
||
526 | break; |
||
527 | |||
528 | default : |
||
529 | /* Update the error code */ |
||
530 | htsc->ErrorCode |= HAL_TSC_ERROR_INVALID_CALLBACK; |
||
531 | |||
532 | /* Return error status */ |
||
533 | status = HAL_ERROR; |
||
534 | break; |
||
535 | } |
||
536 | } |
||
537 | else |
||
538 | { |
||
539 | /* Update the error code */ |
||
540 | htsc->ErrorCode |= HAL_TSC_ERROR_INVALID_CALLBACK; |
||
541 | |||
542 | /* Return error status */ |
||
543 | status = HAL_ERROR; |
||
544 | } |
||
545 | |||
546 | /* Release Lock */ |
||
547 | __HAL_UNLOCK(htsc); |
||
548 | return status; |
||
549 | } |
||
550 | |||
551 | #endif /* USE_HAL_TSC_REGISTER_CALLBACKS */ |
||
552 | |||
553 | /** |
||
554 | * @} |
||
555 | */ |
||
556 | |||
557 | /** @defgroup TSC_Exported_Functions_Group2 Input and Output operation functions |
||
6 | mjames | 558 | * @brief Input and Output operation functions |
559 | * |
||
2 | mjames | 560 | @verbatim |
561 | =============================================================================== |
||
562 | ##### IO Operation functions ##### |
||
563 | =============================================================================== |
||
564 | [..] This section provides functions allowing to: |
||
565 | (+) Start acquisition in polling mode. |
||
566 | (+) Start acquisition in interrupt mode. |
||
567 | (+) Stop conversion in polling mode. |
||
568 | (+) Stop conversion in interrupt mode. |
||
569 | (+) Poll for acquisition completed. |
||
570 | (+) Get group acquisition status. |
||
571 | (+) Get group acquisition value. |
||
572 | @endverbatim |
||
573 | * @{ |
||
574 | */ |
||
575 | |||
576 | /** |
||
577 | * @brief Start the acquisition. |
||
578 | * @param htsc Pointer to a TSC_HandleTypeDef structure that contains |
||
579 | * the configuration information for the specified TSC. |
||
580 | * @retval HAL status |
||
581 | */ |
||
582 | HAL_StatusTypeDef HAL_TSC_Start(TSC_HandleTypeDef *htsc) |
||
583 | { |
||
584 | /* Check the parameters */ |
||
585 | assert_param(IS_TSC_ALL_INSTANCE(htsc->Instance)); |
||
586 | |||
587 | /* Process locked */ |
||
588 | __HAL_LOCK(htsc); |
||
589 | |||
590 | /* Change TSC state */ |
||
591 | htsc->State = HAL_TSC_STATE_BUSY; |
||
592 | |||
593 | /* Clear interrupts */ |
||
594 | __HAL_TSC_DISABLE_IT(htsc, (TSC_IT_EOA | TSC_IT_MCE)); |
||
595 | |||
596 | /* Clear flags */ |
||
597 | __HAL_TSC_CLEAR_FLAG(htsc, (TSC_FLAG_EOA | TSC_FLAG_MCE)); |
||
598 | |||
599 | /* Set touch sensing IOs not acquired to the specified IODefaultMode */ |
||
600 | if (htsc->Init.IODefaultMode == TSC_IODEF_OUT_PP_LOW) |
||
601 | { |
||
602 | __HAL_TSC_SET_IODEF_OUTPPLOW(htsc); |
||
603 | } |
||
604 | else |
||
605 | { |
||
606 | __HAL_TSC_SET_IODEF_INFLOAT(htsc); |
||
607 | } |
||
608 | |||
609 | /* Launch the acquisition */ |
||
610 | __HAL_TSC_START_ACQ(htsc); |
||
611 | |||
612 | /* Process unlocked */ |
||
613 | __HAL_UNLOCK(htsc); |
||
614 | |||
615 | /* Return function status */ |
||
616 | return HAL_OK; |
||
617 | } |
||
618 | |||
619 | /** |
||
620 | * @brief Start the acquisition in interrupt mode. |
||
621 | * @param htsc Pointer to a TSC_HandleTypeDef structure that contains |
||
622 | * the configuration information for the specified TSC. |
||
623 | * @retval HAL status. |
||
624 | */ |
||
625 | HAL_StatusTypeDef HAL_TSC_Start_IT(TSC_HandleTypeDef *htsc) |
||
626 | { |
||
627 | /* Check the parameters */ |
||
628 | assert_param(IS_TSC_ALL_INSTANCE(htsc->Instance)); |
||
629 | assert_param(IS_TSC_MCE_IT(htsc->Init.MaxCountInterrupt)); |
||
630 | |||
631 | /* Process locked */ |
||
632 | __HAL_LOCK(htsc); |
||
633 | |||
634 | /* Change TSC state */ |
||
635 | htsc->State = HAL_TSC_STATE_BUSY; |
||
636 | |||
637 | /* Enable end of acquisition interrupt */ |
||
638 | __HAL_TSC_ENABLE_IT(htsc, TSC_IT_EOA); |
||
639 | |||
640 | /* Enable max count error interrupt (optional) */ |
||
641 | if (htsc->Init.MaxCountInterrupt == ENABLE) |
||
642 | { |
||
643 | __HAL_TSC_ENABLE_IT(htsc, TSC_IT_MCE); |
||
644 | } |
||
645 | else |
||
646 | { |
||
647 | __HAL_TSC_DISABLE_IT(htsc, TSC_IT_MCE); |
||
648 | } |
||
649 | |||
650 | /* Clear flags */ |
||
651 | __HAL_TSC_CLEAR_FLAG(htsc, (TSC_FLAG_EOA | TSC_FLAG_MCE)); |
||
652 | |||
653 | /* Set touch sensing IOs not acquired to the specified IODefaultMode */ |
||
654 | if (htsc->Init.IODefaultMode == TSC_IODEF_OUT_PP_LOW) |
||
655 | { |
||
656 | __HAL_TSC_SET_IODEF_OUTPPLOW(htsc); |
||
657 | } |
||
658 | else |
||
659 | { |
||
660 | __HAL_TSC_SET_IODEF_INFLOAT(htsc); |
||
661 | } |
||
662 | |||
663 | /* Launch the acquisition */ |
||
664 | __HAL_TSC_START_ACQ(htsc); |
||
665 | |||
666 | /* Process unlocked */ |
||
667 | __HAL_UNLOCK(htsc); |
||
668 | |||
669 | /* Return function status */ |
||
670 | return HAL_OK; |
||
671 | } |
||
672 | |||
673 | /** |
||
674 | * @brief Stop the acquisition previously launched in polling mode. |
||
675 | * @param htsc Pointer to a TSC_HandleTypeDef structure that contains |
||
676 | * the configuration information for the specified TSC. |
||
677 | * @retval HAL status |
||
678 | */ |
||
679 | HAL_StatusTypeDef HAL_TSC_Stop(TSC_HandleTypeDef *htsc) |
||
680 | { |
||
681 | /* Check the parameters */ |
||
682 | assert_param(IS_TSC_ALL_INSTANCE(htsc->Instance)); |
||
683 | |||
684 | /* Process locked */ |
||
685 | __HAL_LOCK(htsc); |
||
686 | |||
687 | /* Stop the acquisition */ |
||
688 | __HAL_TSC_STOP_ACQ(htsc); |
||
689 | |||
690 | /* Set touch sensing IOs in low power mode (output push-pull) */ |
||
691 | __HAL_TSC_SET_IODEF_OUTPPLOW(htsc); |
||
692 | |||
693 | /* Clear flags */ |
||
694 | __HAL_TSC_CLEAR_FLAG(htsc, (TSC_FLAG_EOA | TSC_FLAG_MCE)); |
||
695 | |||
696 | /* Change TSC state */ |
||
697 | htsc->State = HAL_TSC_STATE_READY; |
||
698 | |||
699 | /* Process unlocked */ |
||
700 | __HAL_UNLOCK(htsc); |
||
701 | |||
702 | /* Return function status */ |
||
703 | return HAL_OK; |
||
704 | } |
||
705 | |||
706 | /** |
||
707 | * @brief Stop the acquisition previously launched in interrupt mode. |
||
708 | * @param htsc Pointer to a TSC_HandleTypeDef structure that contains |
||
709 | * the configuration information for the specified TSC. |
||
710 | * @retval HAL status |
||
711 | */ |
||
712 | HAL_StatusTypeDef HAL_TSC_Stop_IT(TSC_HandleTypeDef *htsc) |
||
713 | { |
||
714 | /* Check the parameters */ |
||
715 | assert_param(IS_TSC_ALL_INSTANCE(htsc->Instance)); |
||
716 | |||
717 | /* Process locked */ |
||
718 | __HAL_LOCK(htsc); |
||
719 | |||
720 | /* Stop the acquisition */ |
||
721 | __HAL_TSC_STOP_ACQ(htsc); |
||
722 | |||
723 | /* Set touch sensing IOs in low power mode (output push-pull) */ |
||
724 | __HAL_TSC_SET_IODEF_OUTPPLOW(htsc); |
||
725 | |||
726 | /* Disable interrupts */ |
||
727 | __HAL_TSC_DISABLE_IT(htsc, (TSC_IT_EOA | TSC_IT_MCE)); |
||
728 | |||
729 | /* Clear flags */ |
||
730 | __HAL_TSC_CLEAR_FLAG(htsc, (TSC_FLAG_EOA | TSC_FLAG_MCE)); |
||
731 | |||
732 | /* Change TSC state */ |
||
733 | htsc->State = HAL_TSC_STATE_READY; |
||
734 | |||
735 | /* Process unlocked */ |
||
736 | __HAL_UNLOCK(htsc); |
||
737 | |||
738 | /* Return function status */ |
||
739 | return HAL_OK; |
||
740 | } |
||
741 | |||
742 | /** |
||
743 | * @brief Start acquisition and wait until completion. |
||
744 | * @note There is no need of a timeout parameter as the max count error is already |
||
745 | * managed by the TSC peripheral. |
||
746 | * @param htsc Pointer to a TSC_HandleTypeDef structure that contains |
||
747 | * the configuration information for the specified TSC. |
||
748 | * @retval HAL state |
||
749 | */ |
||
750 | HAL_StatusTypeDef HAL_TSC_PollForAcquisition(TSC_HandleTypeDef *htsc) |
||
751 | { |
||
752 | /* Check the parameters */ |
||
753 | assert_param(IS_TSC_ALL_INSTANCE(htsc->Instance)); |
||
754 | |||
755 | /* Process locked */ |
||
756 | __HAL_LOCK(htsc); |
||
757 | |||
758 | /* Check end of acquisition */ |
||
759 | while (HAL_TSC_GetState(htsc) == HAL_TSC_STATE_BUSY) |
||
760 | { |
||
761 | /* The timeout (max count error) is managed by the TSC peripheral itself. */ |
||
762 | } |
||
763 | |||
764 | /* Process unlocked */ |
||
765 | __HAL_UNLOCK(htsc); |
||
766 | |||
767 | return HAL_OK; |
||
768 | } |
||
769 | |||
770 | /** |
||
771 | * @brief Get the acquisition status for a group. |
||
772 | * @param htsc Pointer to a TSC_HandleTypeDef structure that contains |
||
773 | * the configuration information for the specified TSC. |
||
774 | * @param gx_index Index of the group |
||
775 | * @retval Group status |
||
776 | */ |
||
777 | TSC_GroupStatusTypeDef HAL_TSC_GroupGetStatus(TSC_HandleTypeDef *htsc, uint32_t gx_index) |
||
778 | { |
||
779 | /* Check the parameters */ |
||
780 | assert_param(IS_TSC_ALL_INSTANCE(htsc->Instance)); |
||
781 | assert_param(IS_TSC_GROUP_INDEX(gx_index)); |
||
782 | |||
783 | /* Return the group status */ |
||
784 | return (__HAL_TSC_GET_GROUP_STATUS(htsc, gx_index)); |
||
785 | } |
||
786 | |||
787 | /** |
||
788 | * @brief Get the acquisition measure for a group. |
||
789 | * @param htsc Pointer to a TSC_HandleTypeDef structure that contains |
||
790 | * the configuration information for the specified TSC. |
||
791 | * @param gx_index Index of the group |
||
792 | * @retval Acquisition measure |
||
793 | */ |
||
794 | uint32_t HAL_TSC_GroupGetValue(TSC_HandleTypeDef *htsc, uint32_t gx_index) |
||
795 | { |
||
796 | /* Check the parameters */ |
||
797 | assert_param(IS_TSC_ALL_INSTANCE(htsc->Instance)); |
||
798 | assert_param(IS_TSC_GROUP_INDEX(gx_index)); |
||
799 | |||
800 | /* Return the group acquisition counter */ |
||
801 | return htsc->Instance->IOGXCR[gx_index]; |
||
802 | } |
||
803 | |||
804 | /** |
||
805 | * @} |
||
806 | */ |
||
807 | |||
808 | /** @defgroup TSC_Exported_Functions_Group3 Peripheral Control functions |
||
6 | mjames | 809 | * @brief Peripheral Control functions |
810 | * |
||
2 | mjames | 811 | @verbatim |
812 | =============================================================================== |
||
813 | ##### Peripheral Control functions ##### |
||
814 | =============================================================================== |
||
815 | [..] This section provides functions allowing to: |
||
816 | (+) Configure TSC IOs |
||
817 | (+) Discharge TSC IOs |
||
818 | @endverbatim |
||
819 | * @{ |
||
820 | */ |
||
821 | |||
822 | /** |
||
823 | * @brief Configure TSC IOs. |
||
824 | * @param htsc Pointer to a TSC_HandleTypeDef structure that contains |
||
825 | * the configuration information for the specified TSC. |
||
826 | * @param config Pointer to the configuration structure. |
||
827 | * @retval HAL status |
||
828 | */ |
||
829 | HAL_StatusTypeDef HAL_TSC_IOConfig(TSC_HandleTypeDef *htsc, TSC_IOConfigTypeDef *config) |
||
830 | { |
||
831 | /* Check the parameters */ |
||
832 | assert_param(IS_TSC_ALL_INSTANCE(htsc->Instance)); |
||
833 | assert_param(IS_TSC_GROUP(config->ChannelIOs)); |
||
834 | assert_param(IS_TSC_GROUP(config->ShieldIOs)); |
||
835 | assert_param(IS_TSC_GROUP(config->SamplingIOs)); |
||
836 | |||
837 | /* Process locked */ |
||
838 | __HAL_LOCK(htsc); |
||
839 | |||
840 | /* Stop acquisition */ |
||
841 | __HAL_TSC_STOP_ACQ(htsc); |
||
842 | |||
843 | /* Disable Schmitt trigger hysteresis on all used TSC IOs */ |
||
844 | htsc->Instance->IOHCR = (~(config->ChannelIOs | config->ShieldIOs | config->SamplingIOs)); |
||
845 | |||
846 | /* Set channel and shield IOs */ |
||
847 | htsc->Instance->IOCCR = (config->ChannelIOs | config->ShieldIOs); |
||
848 | |||
849 | /* Set sampling IOs */ |
||
850 | htsc->Instance->IOSCR = config->SamplingIOs; |
||
851 | |||
852 | /* Set groups to be acquired */ |
||
853 | htsc->Instance->IOGCSR = TSC_extract_groups(config->ChannelIOs); |
||
854 | |||
855 | /* Process unlocked */ |
||
856 | __HAL_UNLOCK(htsc); |
||
857 | |||
858 | /* Return function status */ |
||
859 | return HAL_OK; |
||
860 | } |
||
861 | |||
862 | /** |
||
863 | * @brief Discharge TSC IOs. |
||
864 | * @param htsc Pointer to a TSC_HandleTypeDef structure that contains |
||
865 | * the configuration information for the specified TSC. |
||
866 | * @param choice This parameter can be set to ENABLE or DISABLE. |
||
867 | * @retval HAL status |
||
868 | */ |
||
869 | HAL_StatusTypeDef HAL_TSC_IODischarge(TSC_HandleTypeDef *htsc, FunctionalState choice) |
||
870 | { |
||
871 | /* Check the parameters */ |
||
872 | assert_param(IS_TSC_ALL_INSTANCE(htsc->Instance)); |
||
873 | |||
874 | /* Process locked */ |
||
875 | __HAL_LOCK(htsc); |
||
876 | |||
877 | if (choice == ENABLE) |
||
878 | { |
||
879 | __HAL_TSC_SET_IODEF_OUTPPLOW(htsc); |
||
880 | } |
||
881 | else |
||
882 | { |
||
883 | __HAL_TSC_SET_IODEF_INFLOAT(htsc); |
||
884 | } |
||
885 | |||
886 | /* Process unlocked */ |
||
887 | __HAL_UNLOCK(htsc); |
||
888 | |||
889 | /* Return the group acquisition counter */ |
||
890 | return HAL_OK; |
||
891 | } |
||
892 | |||
893 | /** |
||
894 | * @} |
||
895 | */ |
||
896 | |||
897 | /** @defgroup TSC_Exported_Functions_Group4 Peripheral State and Errors functions |
||
6 | mjames | 898 | * @brief Peripheral State and Errors functions |
899 | * |
||
2 | mjames | 900 | @verbatim |
901 | =============================================================================== |
||
902 | ##### State and Errors functions ##### |
||
903 | =============================================================================== |
||
904 | [..] |
||
905 | This subsection provides functions allowing to |
||
906 | (+) Get TSC state. |
||
907 | |||
908 | @endverbatim |
||
909 | * @{ |
||
910 | */ |
||
911 | |||
912 | /** |
||
913 | * @brief Return the TSC handle state. |
||
914 | * @param htsc Pointer to a TSC_HandleTypeDef structure that contains |
||
915 | * the configuration information for the specified TSC. |
||
916 | * @retval HAL state |
||
917 | */ |
||
918 | HAL_TSC_StateTypeDef HAL_TSC_GetState(TSC_HandleTypeDef *htsc) |
||
919 | { |
||
920 | /* Check the parameters */ |
||
921 | assert_param(IS_TSC_ALL_INSTANCE(htsc->Instance)); |
||
922 | |||
923 | if (htsc->State == HAL_TSC_STATE_BUSY) |
||
924 | { |
||
925 | /* Check end of acquisition flag */ |
||
926 | if (__HAL_TSC_GET_FLAG(htsc, TSC_FLAG_EOA) != RESET) |
||
927 | { |
||
928 | /* Check max count error flag */ |
||
929 | if (__HAL_TSC_GET_FLAG(htsc, TSC_FLAG_MCE) != RESET) |
||
930 | { |
||
931 | /* Change TSC state */ |
||
932 | htsc->State = HAL_TSC_STATE_ERROR; |
||
933 | } |
||
934 | else |
||
935 | { |
||
936 | /* Change TSC state */ |
||
937 | htsc->State = HAL_TSC_STATE_READY; |
||
938 | } |
||
939 | } |
||
940 | } |
||
941 | |||
942 | /* Return TSC state */ |
||
943 | return htsc->State; |
||
944 | } |
||
945 | |||
946 | /** |
||
947 | * @} |
||
948 | */ |
||
949 | |||
950 | /** @defgroup TSC_IRQ_Handler_and_Callbacks IRQ Handler and Callbacks |
||
6 | mjames | 951 | * @{ |
952 | */ |
||
2 | mjames | 953 | |
954 | /** |
||
955 | * @brief Handle TSC interrupt request. |
||
956 | * @param htsc Pointer to a TSC_HandleTypeDef structure that contains |
||
957 | * the configuration information for the specified TSC. |
||
958 | * @retval None |
||
959 | */ |
||
960 | void HAL_TSC_IRQHandler(TSC_HandleTypeDef *htsc) |
||
961 | { |
||
962 | /* Check the parameters */ |
||
963 | assert_param(IS_TSC_ALL_INSTANCE(htsc->Instance)); |
||
964 | |||
965 | /* Check if the end of acquisition occurred */ |
||
966 | if (__HAL_TSC_GET_FLAG(htsc, TSC_FLAG_EOA) != RESET) |
||
967 | { |
||
968 | /* Clear EOA flag */ |
||
969 | __HAL_TSC_CLEAR_FLAG(htsc, TSC_FLAG_EOA); |
||
970 | } |
||
971 | |||
972 | /* Check if max count error occurred */ |
||
973 | if (__HAL_TSC_GET_FLAG(htsc, TSC_FLAG_MCE) != RESET) |
||
974 | { |
||
975 | /* Clear MCE flag */ |
||
976 | __HAL_TSC_CLEAR_FLAG(htsc, TSC_FLAG_MCE); |
||
977 | /* Change TSC state */ |
||
978 | htsc->State = HAL_TSC_STATE_ERROR; |
||
979 | #if (USE_HAL_TSC_REGISTER_CALLBACKS == 1) |
||
980 | htsc->ErrorCallback(htsc); |
||
981 | #else |
||
982 | /* Conversion completed callback */ |
||
983 | HAL_TSC_ErrorCallback(htsc); |
||
984 | #endif /* USE_HAL_TSC_REGISTER_CALLBACKS */ |
||
985 | } |
||
986 | else |
||
987 | { |
||
988 | /* Change TSC state */ |
||
989 | htsc->State = HAL_TSC_STATE_READY; |
||
990 | #if (USE_HAL_TSC_REGISTER_CALLBACKS == 1) |
||
991 | htsc->ConvCpltCallback(htsc); |
||
992 | #else |
||
993 | /* Conversion completed callback */ |
||
994 | HAL_TSC_ConvCpltCallback(htsc); |
||
995 | #endif /* USE_HAL_TSC_REGISTER_CALLBACKS */ |
||
996 | } |
||
997 | } |
||
998 | |||
999 | /** |
||
1000 | * @brief Acquisition completed callback in non-blocking mode. |
||
1001 | * @param htsc Pointer to a TSC_HandleTypeDef structure that contains |
||
1002 | * the configuration information for the specified TSC. |
||
1003 | * @retval None |
||
1004 | */ |
||
1005 | __weak void HAL_TSC_ConvCpltCallback(TSC_HandleTypeDef *htsc) |
||
1006 | { |
||
1007 | /* Prevent unused argument(s) compilation warning */ |
||
1008 | UNUSED(htsc); |
||
1009 | |||
1010 | /* NOTE : This function should not be modified, when the callback is needed, |
||
1011 | the HAL_TSC_ConvCpltCallback could be implemented in the user file. |
||
1012 | */ |
||
1013 | } |
||
1014 | |||
1015 | /** |
||
1016 | * @brief Error callback in non-blocking mode. |
||
1017 | * @param htsc Pointer to a TSC_HandleTypeDef structure that contains |
||
1018 | * the configuration information for the specified TSC. |
||
1019 | * @retval None |
||
1020 | */ |
||
1021 | __weak void HAL_TSC_ErrorCallback(TSC_HandleTypeDef *htsc) |
||
1022 | { |
||
1023 | /* Prevent unused argument(s) compilation warning */ |
||
1024 | UNUSED(htsc); |
||
1025 | |||
1026 | /* NOTE : This function should not be modified, when the callback is needed, |
||
1027 | the HAL_TSC_ErrorCallback could be implemented in the user file. |
||
1028 | */ |
||
1029 | } |
||
1030 | |||
1031 | /** |
||
1032 | * @} |
||
1033 | */ |
||
1034 | |||
1035 | /** |
||
1036 | * @} |
||
1037 | */ |
||
1038 | |||
1039 | /* Private functions ---------------------------------------------------------*/ |
||
1040 | /** @defgroup TSC_Private_Functions TSC Private Functions |
||
1041 | * @{ |
||
1042 | */ |
||
1043 | |||
1044 | /** |
||
1045 | * @brief Utility function used to set the acquired groups mask. |
||
1046 | * @param iomask Channels IOs mask |
||
1047 | * @retval Acquired groups mask |
||
1048 | */ |
||
1049 | static uint32_t TSC_extract_groups(uint32_t iomask) |
||
1050 | { |
||
1051 | uint32_t groups = 0UL; |
||
1052 | uint32_t idx; |
||
1053 | |||
1054 | for (idx = 0UL; idx < (uint32_t)TSC_NB_OF_GROUPS; idx++) |
||
1055 | { |
||
6 | mjames | 1056 | if ((iomask & (0x0FUL << (idx * 4UL))) != 0UL) |
2 | mjames | 1057 | { |
1058 | groups |= (1UL << idx); |
||
1059 | } |
||
1060 | } |
||
1061 | |||
1062 | return groups; |
||
1063 | } |
||
1064 | |||
1065 | /** |
||
1066 | * @} |
||
1067 | */ |
||
1068 | |||
1069 | #endif /* HAL_TSC_MODULE_ENABLED */ |
||
1070 | |||
1071 | /** |
||
1072 | * @} |
||
1073 | */ |
||
1074 | |||
1075 | /** |
||
1076 | * @} |
||
1077 | */ |
||
1078 | |||
1079 | #endif /* TSC */ |
||
1080 | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |