VSF Documented
adc_template.inc
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#if VSF_HAL_USE_ADC == ENABLED
19
20/*============================ INCLUDES ======================================*/
21/*============================ MACROS ========================================*/
22
23#if defined(VSF_ADC_CFG_IMP_RENAME_DEVICE_PREFIX) && (VSF_ADC_CFG_IMP_RENAME_DEVICE_PREFIX == ENABLED)
24# define vsf_real_adc_t VSF_MCONNECT(VSF_ADC_CFG_IMP_DEVICE_PREFIX, _t)
25# define vsf_real_adc_capability VSF_MCONNECT(VSF_ADC_CFG_IMP_DEVICE_PREFIX, _capability)
26# define vsf_real_adc_ctrl VSF_MCONNECT(VSF_ADC_CFG_IMP_DEVICE_PREFIX, _ctrl)
27# define vsf_real_adc_get_configuration VSF_MCONNECT(VSF_ADC_CFG_IMP_DEVICE_PREFIX, _get_configuration)
28# define vsf_real_adc_irq_clear VSF_MCONNECT(VSF_ADC_CFG_IMP_DEVICE_PREFIX, _irq_clear)
29#else
30# define vsf_real_adc_t VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_t)
31# define vsf_real_adc_capability VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_capability)
32# define vsf_real_adc_ctrl VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_ctrl)
33# define vsf_real_adc_get_configuration VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_get_configuration)
34# define vsf_real_adc_irq_clear VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_irq_clear)
35#endif
36
37#ifndef VSF_ADC_CFG_REIMPLEMENT_API_CAPABILITY
38# define VSF_ADC_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
39#endif
40
41#ifndef VSF_ADC_CFG_REIMPLEMENT_API_CTRL
42# define VSF_ADC_CFG_REIMPLEMENT_API_CTRL DISABLED
43#endif
44
45#ifndef VSF_ADC_CFG_REIMPLEMENT_API_GET_CONFIGURATION
46# define VSF_ADC_CFG_REIMPLEMENT_API_GET_CONFIGURATION DISABLED
47#endif
48
49#ifndef VSF_ADC_CFG_REIMPLEMENT_API_IRQ_CLEAR
50# define VSF_ADC_CFG_REIMPLEMENT_API_IRQ_CLEAR DISABLED
51#endif
52
53#ifdef VSF_ADC_CFG_IMP_REMAP_PREFIX
54# undef VSF_ADC_CFG_REIMPLEMENT_API_CAPABILITY
55# define VSF_ADC_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
56# undef VSF_ADC_CFG_REIMPLEMENT_API_CTRL
57# define VSF_ADC_CFG_REIMPLEMENT_API_CTRL ENABLED
58# undef VSF_ADC_CFG_REIMPLEMENT_API_GET_CONFIGURATION
59# define VSF_ADC_CFG_REIMPLEMENT_API_GET_CONFIGURATION ENABLED
60# undef VSF_ADC_CFG_REIMPLEMENT_API_IRQ_CLEAR
61# define VSF_ADC_CFG_REIMPLEMENT_API_IRQ_CLEAR ENABLED
62#endif
63
64#if VSF_ADC_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
65# ifndef VSF_ADC_CFG_CAPABILITY_IRQ_MASK
66# define VSF_ADC_CFG_CAPABILITY_IRQ_MASK VSF_ADC_IRQ_ALL_BITS_MASK
67# endif
68# ifndef VSF_ADC_CFG_CAPABILITY_MAX_DATA_BITS
69# define VSF_ADC_CFG_CAPABILITY_MAX_DATA_BITS 12
70# endif
71# ifndef VSF_ADC_CFG_CAPABILITY_CHANNEL_COUNT
72# define VSF_ADC_CFG_CAPABILITY_CHANNEL_COUNT 4
73# endif
74#endif
75
76/*============================ LOCAL VARIABLES ===============================*/
77/*============================ IMPLEMENTATION ================================*/
78
79#if VSF_ADC_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
80vsf_adc_capability_t vsf_real_adc_capability(vsf_real_adc_t *adc_ptr)
81{
82 vsf_adc_capability_t adc_capability = {
83 .irq_mask = VSF_ADC_CFG_CAPABILITY_IRQ_MASK,
84 .max_data_bits = VSF_ADC_CFG_CAPABILITY_MAX_DATA_BITS,
85 .channel_count = VSF_ADC_CFG_CAPABILITY_CHANNEL_COUNT,
86 };
87
88 return adc_capability;
89}
90#endif
91
92#if VSF_ADC_CFG_REIMPLEMENT_API_GET_CONFIGURATION == DISABLED
93vsf_err_t vsf_real_adc_get_configuration(vsf_real_adc_t *adc_ptr, vsf_adc_cfg_t *cfg_ptr)
94{
95 VSF_HAL_ASSERT(NULL != adc_ptr);
96 VSF_HAL_ASSERT(NULL != cfg_ptr);
97
98 // Default implementation: not supported, trigger assertion
100
101 return VSF_ERR_NOT_SUPPORT;
102}
103#endif
104
105#if VSF_ADC_CFG_REIMPLEMENT_API_CTRL == DISABLED
106vsf_err_t vsf_real_adc_ctrl(vsf_real_adc_t *adc_ptr, vsf_adc_ctrl_t ctrl, void *param)
107{
108 VSF_HAL_ASSERT(NULL != adc_ptr);
109
110 // Default implementation: not supported, trigger assertion
112
113 return VSF_ERR_NOT_SUPPORT;
114}
115#endif
116
117#if VSF_ADC_CFG_REIMPLEMENT_API_IRQ_CLEAR == DISABLED
118vsf_adc_irq_mask_t vsf_real_adc_irq_clear(vsf_real_adc_t *adc_ptr, vsf_adc_irq_mask_t irq_mask)
119{
120 VSF_HAL_ASSERT(NULL != adc_ptr);
121
122 // Default implementation: not supported, trigger assertion
124
125 return 0;
126}
127#endif
128
129/*============================ MACROS ========================================*/
130
131
132#undef VSF_ADC_CFG_REIMPLEMENT_TYPE_MODE
133#undef VSF_ADC_CFG_REIMPLEMENT_TYPE_CHANNEL_MODE
134#undef VSF_ADC_CFG_REIMPLEMENT_TYPE_IRQ_MASK
135#undef VSF_ADC_CFG_REIMPLEMENT_TYPE_CHANNEL_CFG
136#undef VSF_ADC_CFG_REIMPLEMENT_TYPE_CFG
137#undef VSF_ADC_CFG_REIMPLEMENT_TYPE_CAPABILITY
138#undef VSF_ADC_CFG_REIMPLEMENT_TYPE_STATUS
139#undef VSF_ADC_CFG_REIMPLEMENT_TYPE_CTRL
140#undef VSF_ADC_CFG_REIMPLEMENT_API_CAPABILITY
141#undef VSF_ADC_CFG_REIMPLEMENT_API_CTRL
142#undef VSF_ADC_CFG_REIMPLEMENT_API_GET_CONFIGURATION
143#undef VSF_ADC_CFG_REIMPLEMENT_API_IRQ_CLEAR
144#undef VSF_ADC_CFG_CAPABILITY_IRQ_MASK
145#undef VSF_ADC_CFG_CAPABILITY_MAX_DATA_BITS
146#undef VSF_ADC_CFG_CAPABILITY_CHANNEL_COUNT
147
148#undef vsf_real_adc_t
149#undef vsf_real_adc_capability
150#undef vsf_real_adc_ctrl
151#undef vsf_real_adc_get_configuration
152#undef vsf_real_adc_irq_clear
153
154/*============================ LOCAL VARIABLES ===============================*/
155/*============================ IMPLEMENTATION ================================*/
156/*============================ MACROS ========================================*/
157
158#ifdef VSF_ADC_CFG_IMP_REMAP_PREFIX
159# define vsf_imp_adc_t VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_t)
160# define vsf_imp_adc_init VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_init)
161# define vsf_imp_adc_fini VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_fini)
162# define vsf_imp_adc_enable VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_enable)
163# define vsf_imp_adc_disable VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_disable)
164# define vsf_imp_adc_status VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_status)
165# define vsf_imp_adc_capability VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_capability)
166# define vsf_imp_adc_irq_enable VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_irq_enable)
167# define vsf_imp_adc_irq_disable VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_irq_disable)
168# define vsf_imp_adc_channel_request_once VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_channel_request_once)
169# define vsf_imp_adc_channel_config VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_channel_config)
170# define vsf_imp_adc_channel_request VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_channel_request)
171# define vsf_imp_adc_get_configuration VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_get_configuration)
172# define vsf_imp_adc_ctrl VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_ctrl)
173
174# define vsf_remap_adc_t VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_t)
175# define vsf_remap_adc_init VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_init)
176# define vsf_remap_adc_fini VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_fini)
177# define vsf_remap_adc_enable VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_enable)
178# define vsf_remap_adc_disable VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_disable)
179# define vsf_remap_adc_status VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_status)
180# define vsf_remap_adc_capability VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_capability)
181# define vsf_remap_adc_irq_enable VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_irq_enable)
182# define vsf_remap_adc_irq_disable VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_irq_disable)
183# define vsf_remap_adc_channel_request_once VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_channel_request_once)
184# define vsf_remap_adc_channel_config VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_channel_config)
185# define vsf_remap_adc_channel_request VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_channel_request)
186# define vsf_remap_adc_get_configuration VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_get_configuration)
187# define vsf_remap_adc_ctrl VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_ctrl)
188
189# define VSF_ADC_CFG_IMP_REMAP_FUNCTIONS \
190 vsf_err_t vsf_imp_adc_init(vsf_imp_adc_t *adc, vsf_adc_cfg_t *cfg) \
191 { \
192 VSF_HAL_ASSERT(adc != NULL); \
193 return vsf_remap_adc_init((vsf_remap_adc_t *)adc, cfg); \
194 } \
195 \
196 void vsf_imp_adc_fini(vsf_imp_adc_t *adc) \
197 { \
198 VSF_HAL_ASSERT(adc != NULL); \
199 vsf_remap_adc_fini((vsf_remap_adc_t *)adc); \
200 } \
201 \
202 vsf_adc_status_t vsf_imp_adc_status(vsf_imp_adc_t *adc) \
203 { \
204 VSF_HAL_ASSERT(adc != NULL); \
205 return vsf_remap_adc_status((vsf_remap_adc_t *)adc); \
206 } \
207 \
208 vsf_adc_capability_t vsf_imp_adc_capability(vsf_imp_adc_t *adc) \
209 { \
210 VSF_HAL_ASSERT(adc != NULL); \
211 return vsf_remap_adc_capability((vsf_remap_adc_t *)adc); \
212 } \
213 \
214 fsm_rt_t vsf_imp_adc_enable(vsf_imp_adc_t *adc) \
215 { \
216 VSF_HAL_ASSERT(adc != NULL); \
217 return vsf_remap_adc_enable((vsf_remap_adc_t *)adc); \
218 } \
219 \
220 fsm_rt_t vsf_imp_adc_disable(vsf_imp_adc_t *adc) \
221 { \
222 VSF_HAL_ASSERT(adc != NULL); \
223 return vsf_remap_adc_disable((vsf_remap_adc_t *)adc); \
224 } \
225 \
226 void vsf_imp_adc_irq_enable(vsf_imp_adc_t *adc, vsf_adc_irq_mask_t irq_mask) \
227 { \
228 VSF_HAL_ASSERT(adc != NULL); \
229 vsf_remap_adc_irq_enable((vsf_remap_adc_t *)adc, irq_mask); \
230 } \
231 \
232 void vsf_imp_adc_irq_disable(vsf_imp_adc_t *adc, vsf_adc_irq_mask_t irq_mask) \
233 { \
234 VSF_HAL_ASSERT(adc != NULL); \
235 vsf_remap_adc_irq_disable((vsf_remap_adc_t *)adc, irq_mask); \
236 } \
237 \
238 vsf_err_t vsf_imp_adc_channel_request_once(vsf_imp_adc_t *adc, \
239 vsf_adc_channel_cfg_t *channel_cfg, void *buffer) \
240 { \
241 VSF_HAL_ASSERT(adc != NULL); \
242 return vsf_remap_adc_channel_request_once((vsf_remap_adc_t *)adc, \
243 channel_cfg, buffer); \
244 } \
245 \
246 vsf_err_t vsf_imp_adc_channel_config(vsf_imp_adc_t *adc, \
247 vsf_adc_channel_cfg_t *channel_cfgs, uint32_t channel_cfgs_cnt) \
248 { \
249 VSF_HAL_ASSERT(adc != NULL); \
250 return vsf_remap_adc_channel_config((vsf_remap_adc_t *)adc, \
251 channel_cfgs, channel_cfgs_cnt); \
252 } \
253 \
254 vsf_err_t vsf_imp_adc_channel_request(vsf_imp_adc_t *adc, \
255 void *buffer, uint_fast32_t count) \
256 { \
257 VSF_HAL_ASSERT(adc != NULL); \
258 return vsf_remap_adc_channel_request((vsf_remap_adc_t *)adc, buffer, count);\
259 } \
260 vsf_err_t vsf_imp_adc_get_configuration(vsf_imp_adc_t *adc, vsf_adc_cfg_t *cfg) \
261 { \
262 VSF_HAL_ASSERT(adc != NULL); \
263 return vsf_remap_adc_get_configuration((vsf_remap_adc_t *)adc, cfg); \
264 } \
265 vsf_err_t vsf_imp_adc_ctrl(vsf_imp_adc_t *adc, vsf_adc_ctrl_t ctrl, void *param)\
266 { \
267 VSF_HAL_ASSERT(adc != NULL); \
268 return vsf_remap_adc_ctrl((vsf_remap_adc_t *)adc, ctrl, param); \
269 }
270#endif
271
272/*============================ GLOBAL VARIABLES ==============================*/
273
274#define VSF_HAL_TEMPLATE_IMP_NAME _adc
275#define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _ADC
276
277#if !defined(VSF_ADC_CFG_IMP_PREFIX) && !defined(VSF_ADC_CFG_IMP_DEVICE_PREFIX)
278# error "Please define VSF_ADC_CFG_IMP_PREFIX in adc driver"
279#endif
280
281#if !defined(VSF_ADC_CFG_IMP_UPCASE_PREFIX) && !defined(VSF_ADC_CFG_IMP_DEVICE_UPCASE_PREFIX)
282# error "Please define VSF_ADC_CFG_IMP_UPCASE_PREFIX in adc driver"
283#endif
284
285#ifndef VSF_ADC_CFG_IMP_COUNT_MASK_PREFIX
286# define VSF_ADC_CFG_IMP_COUNT_MASK_PREFIX VSF_ADC_CFG_IMP_UPCASE_PREFIX
287#endif
288
289#ifdef VSF_ADC_CFG_IMP_REMAP_FUNCTIONS
290# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_ADC_CFG_IMP_REMAP_FUNCTIONS
291#endif
292
294
295#undef VSF_ADC_CFG_IMP_PREFIX
296#undef VSF_ADC_CFG_IMP_COUNT_MASK_PREFIX
297#undef VSF_ADC_CFG_IMP_UPCASE_PREFIX
298#undef VSF_ADC_CFG_IMP_DEVICE_PREFIX
299#undef VSF_ADC_CFG_IMP_DEVICE_UPCASE_PREFIX
300#undef VSF_ADC_CFG_IMP_REMAP_PREFIX
301#undef VSF_ADC_CFG_IMP_RENAME_DEVICE_PREFIX
302#undef VSF_ADC_CFG_IMP_LV0
303#undef VSF_ADC_CFG_IMP_REMAP_FUNCTIONS
304#undef VSF_ADC_CFG_IMP_HAS_OP
305#undef VSF_ADC_CFG_IMP_EXTERN_OP
306
307#undef vsf_imp_adc_t
308#undef vsf_imp_adc_init
309#undef vsf_imp_adc_fini
310#undef vsf_imp_adc_enable
311#undef vsf_imp_adc_disable
312#undef vsf_imp_adc_status
313#undef vsf_imp_adc_capability
314#undef vsf_imp_adc_irq_enable
315#undef vsf_imp_adc_irq_disable
316#undef vsf_imp_adc_channel_request_once
317#undef vsf_imp_adc_channel_config
318#undef vsf_imp_adc_channel_request
319#undef vsf_imp_adc_get_configuration
320
321#undef vsf_remap_adc_t
322#undef vsf_remap_adc_init
323#undef vsf_remap_adc_fini
324#undef vsf_remap_adc_enable
325#undef vsf_remap_adc_disable
326#undef vsf_remap_adc_status
327#undef vsf_remap_adc_capability
328#undef vsf_remap_adc_irq_enable
329#undef vsf_remap_adc_irq_disable
330#undef vsf_remap_adc_channel_request_once
331#undef vsf_remap_adc_channel_config
332#undef vsf_remap_adc_channel_request
333#undef vsf_remap_adc_get_configuration
334#undef vsf_remap_adc_ctrl
335
336#undef VSF_HAL_TEMPLATE_IMP_NAME
337#undef VSF_HAL_TEMPLATE_IMP_UPCASE_NAME
338
339/*============================ STATIC ASSERTIONS ==============================*/
340
341/* User-extensible macros for custom mode and IRQ mask values
342 * Users can define these macros before including this template to append
343 * their custom enum values to the uniqueness checks.
344 *
345 * Check modes for custom values:
346 * VSF_ADC_CFG_MODE_CHECK_UNIQUE - Check mode for custom mode values
347 * Default: VSF_HAL_CHECK_MODE_LOOSE (loose mode, no overlapping bits)
348 * Can be set to: VSF_HAL_CHECK_MODE_STRICT (strict mode, no overlapping bits)
349 * VSF_ADC_CFG_IRQ_MASK_CHECK_UNIQUE - Check mode for custom IRQ mask values
350 * Default: VSF_HAL_CHECK_MODE_STRICT (strict mode, no overlapping bits)
351 * Can be set to: VSF_HAL_CHECK_MODE_LOOSE (loose mode, no overlapping bits)
352 *
353 * Example usage in vendor driver:
354 * #define VSF_ADC_CUSTOM_MODE_VALUES MY_CUSTOM_MODE1, MY_CUSTOM_MODE2
355 * #define VSF_ADC_CFG_MODE_CHECK_UNIQUE VSF_HAL_CHECK_MODE_LOOSE
356 * #define VSF_ADC_CUSTOM_IRQ_MASK_VALUES MY_CUSTOM_IRQ1, MY_CUSTOM_IRQ2
357 * #define VSF_ADC_CFG_IRQ_MASK_CHECK_UNIQUE VSF_HAL_CHECK_MODE_STRICT
358 * #include "hal/driver/common/adc/adc_template.inc"
359 */
360
361
362#ifdef VSF_ADC_CFG_MODE_CHECK_UNIQUE
363/* Default mode lists - can be redefined by users before including this file */
364#ifndef VSF_ADC_CHECK_UNIQUE_REF_VDD_MODES
365# define VSF_ADC_CHECK_UNIQUE_REF_VDD_MODES \
366 VSF_ADC_REF_VDD_1, \
367 VSF_ADC_REF_VDD_1_2, \
368 VSF_ADC_REF_VDD_1_3, \
369 VSF_ADC_REF_VDD_1_4
370#endif
371
372#ifndef VSF_ADC_CHECK_UNIQUE_DATA_ALIGN_MODES
373# define VSF_ADC_CHECK_UNIQUE_DATA_ALIGN_MODES \
374 VSF_ADC_DATA_ALIGN_RIGHT, \
375 VSF_ADC_DATA_ALIGN_LEFT
376#endif
377
378#ifndef VSF_ADC_CHECK_UNIQUE_SCAN_CONV_MODES
379# define VSF_ADC_CHECK_UNIQUE_SCAN_CONV_MODES \
380 VSF_ADC_SCAN_CONV_SINGLE_MODE, \
381 VSF_ADC_SCAN_CONV_SEQUENCE_MODE
382#endif
383
384#ifndef VSF_ADC_CHECK_UNIQUE_EXTERN_TRIGGER_MODES
385# define VSF_ADC_CHECK_UNIQUE_EXTERN_TRIGGER_MODES \
386 VSF_ADC_EXTERN_TRIGGER_0, \
387 VSF_ADC_EXTERN_TRIGGER_1, \
388 VSF_ADC_EXTERN_TRIGGER_2
389#endif
390
391/* ==================== GROUP INTERNAL UNIQUENESS CHECKS ==================== */
392/* Check uniqueness within each functional group */
393
394/* Check reference voltage mode uniqueness - all reference voltage modes should have different values
395 * Mandatory: VSF_ADC_REF_VDD_1, VSF_ADC_REF_VDD_1_2, VSF_ADC_REF_VDD_1_3, VSF_ADC_REF_VDD_1_4
396 */
397VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_ADC_CFG_MODE_CHECK_UNIQUE, VSF_ADC_CHECK_UNIQUE_REF_VDD_MODES);
398
399/* Check data alignment uniqueness - all data alignment modes should have different values
400 * Mandatory: VSF_ADC_DATA_ALIGN_RIGHT, VSF_ADC_DATA_ALIGN_LEFT
401 */
402VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_ADC_CFG_MODE_CHECK_UNIQUE, VSF_ADC_CHECK_UNIQUE_DATA_ALIGN_MODES);
403
404/* Check scan conversion mode uniqueness - all scan conversion modes should have different values
405 * Mandatory: VSF_ADC_SCAN_CONV_SINGLE_MODE, VSF_ADC_SCAN_CONV_SEQUENCE_MODE
406 */
407VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_ADC_CFG_MODE_CHECK_UNIQUE, VSF_ADC_CHECK_UNIQUE_SCAN_CONV_MODES);
408
409/* Check external trigger mode uniqueness - all external trigger modes should have different values
410 * Mandatory: VSF_ADC_EXTERN_TRIGGER_0, VSF_ADC_EXTERN_TRIGGER_1, VSF_ADC_EXTERN_TRIGGER_2
411 */
412VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_ADC_CFG_MODE_CHECK_UNIQUE, VSF_ADC_CHECK_UNIQUE_EXTERN_TRIGGER_MODES);
413
414#ifdef VSF_ADC_CUSTOM_MODE_VALUES
415/* Check uniqueness among custom mode values using user-specified check mode */
417#endif
418
421 /* Mandatory modes - always included */
426 /* User-defined modes - appended by user configuration */
427#ifdef VSF_ADC_CUSTOM_MODE_VALUES
428 , VSF_ADC_CUSTOM_MODE_VALUES
429#endif
430);
431
432#undef VSF_ADC_CHECK_UNIQUE_REF_VDD_MODES
433#undef VSF_ADC_CHECK_UNIQUE_DATA_ALIGN_MODES
434#undef VSF_ADC_CHECK_UNIQUE_SCAN_CONV_MODES
435#undef VSF_ADC_CHECK_UNIQUE_EXTERN_TRIGGER_MODES
436#endif /* VSF_ADC_CFG_MODE_CHECK_UNIQUE */
437
438/* ==================== CHANNEL MODE UNIQUENESS CHECKS ==================== */
439
440#ifdef VSF_ADC_CFG_CHANNEL_MODE_CHECK_UNIQUE
441/* Default channel mode lists - can be redefined by users before including this file */
442#ifndef VSF_ADC_CHECK_UNIQUE_CHANNEL_GAIN_MODES
443# define VSF_ADC_CHECK_UNIQUE_CHANNEL_GAIN_MODES \
444 VSF_ADC_CHANNEL_GAIN_1_6, \
445 VSF_ADC_CHANNEL_GAIN_1_5, \
446 VSF_ADC_CHANNEL_GAIN_1_4, \
447 VSF_ADC_CHANNEL_GAIN_1_3, \
448 VSF_ADC_CHANNEL_GAIN_1_2, \
449 VSF_ADC_CHANNEL_GAIN_1
450#endif
451
452#ifndef VSF_ADC_CHECK_UNIQUE_CHANNEL_REF_VDD_MODES
453# define VSF_ADC_CHECK_UNIQUE_CHANNEL_REF_VDD_MODES \
454 VSF_ADC_CHANNEL_REF_VDD_1, \
455 VSF_ADC_CHANNEL_REF_VDD_1_2, \
456 VSF_ADC_CHANNEL_REF_VDD_1_3, \
457 VSF_ADC_CHANNEL_REF_VDD_1_4
458#endif
459
460/* ==================== GROUP INTERNAL UNIQUENESS CHECKS ==================== */
461/* Check uniqueness within each functional group */
462
463/* Check channel gain mode uniqueness - all channel gain modes should have different values
464 * Mandatory: VSF_ADC_CHANNEL_GAIN_1_6, VSF_ADC_CHANNEL_GAIN_1_5, VSF_ADC_CHANNEL_GAIN_1_4,
465 * VSF_ADC_CHANNEL_GAIN_1_3, VSF_ADC_CHANNEL_GAIN_1_2, VSF_ADC_CHANNEL_GAIN_1
466 */
467VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_ADC_CFG_CHANNEL_MODE_CHECK_UNIQUE, VSF_ADC_CHECK_UNIQUE_CHANNEL_GAIN_MODES);
468
469/* Check channel reference voltage mode uniqueness - all channel reference voltage modes should have different values
470 * Mandatory: VSF_ADC_CHANNEL_REF_VDD_1, VSF_ADC_CHANNEL_REF_VDD_1_2, VSF_ADC_CHANNEL_REF_VDD_1_3, VSF_ADC_CHANNEL_REF_VDD_1_4
471 */
472VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_ADC_CFG_CHANNEL_MODE_CHECK_UNIQUE, VSF_ADC_CHECK_UNIQUE_CHANNEL_REF_VDD_MODES);
473
474#ifdef VSF_ADC_CUSTOM_CHANNEL_MODE_VALUES
475/* Check uniqueness among custom channel mode values using user-specified check mode */
476VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_ADC_CFG_CHANNEL_MODE_CHECK_UNIQUE, VSF_ADC_CUSTOM_CHANNEL_MODE_VALUES);
477#endif
478
480 VSF_ADC_CFG_CHANNEL_MODE_CHECK_UNIQUE,
481 /* Mandatory channel modes - always included */
485 /* User-defined channel modes - appended by user configuration */
486#ifdef VSF_ADC_CUSTOM_CHANNEL_MODE_VALUES
487 , VSF_ADC_CUSTOM_CHANNEL_MODE_VALUES
488#endif
489);
490
491#undef VSF_ADC_CHECK_UNIQUE_CHANNEL_GAIN_MODES
492#undef VSF_ADC_CHECK_UNIQUE_CHANNEL_REF_VDD_MODES
493#endif /* VSF_ADC_CFG_CHANNEL_MODE_CHECK_UNIQUE */
494
495/* ==================== IRQ MASK UNIQUENESS CHECKS ==================== */
496
497#ifdef VSF_ADC_CFG_IRQ_MASK_CHECK_UNIQUE
498
499#ifdef VSF_ADC_CUSTOM_IRQ_MASK_VALUES
500/* Check uniqueness among custom IRQ mask values using user-specified check mode */
502#endif
503
504/* Check uniqueness within vsf_adc_irq_mask_t enum */
505
506/* Check IRQ mask uniqueness - all IRQ mask bits should have different values
507 * Mandatory: VSF_ADC_IRQ_MASK_CPL
508 */
511 /* Mandatory IRQ masks - always included */
513 /* User-defined IRQ masks - appended by user configuration */
514#ifdef VSF_ADC_CUSTOM_IRQ_MASK_VALUES
515 , VSF_ADC_CUSTOM_IRQ_MASK_VALUES
516#endif
517);
518#endif /* VSF_ADC_CFG_IRQ_MASK_CHECK_UNIQUE */
519
520#undef VSF_ADC_CFG_MODE_CHECK_UNIQUE
521#undef VSF_ADC_CFG_CHANNEL_MODE_CHECK_UNIQUE
522#undef VSF_ADC_CFG_IRQ_MASK_CHECK_UNIQUE
523#undef VSF_ADC_CUSTOM_MODE_VALUES
524#undef VSF_ADC_CUSTOM_CHANNEL_MODE_VALUES
525#undef VSF_ADC_CUSTOM_IRQ_MASK_VALUES
526
527#endif /* VSF_HAL_USE_ADC */
vsf_err_t
Definition __type.h:42
@ VSF_ERR_NOT_SUPPORT
function not supported
Definition __type.h:46
#define NULL
Definition lvgl.h:26
const i_spi_t vsf_spi_irq_mask_t irq_mask
Definition spi_interface.h:38
Predefined VSF ADC capability that can be reimplemented in specific HAL drivers.
Definition vsf_template_adc.h:703
uint8_t max_data_bits
Definition vsf_template_adc.h:709
Configuration structure for ADC.
Definition vsf_template_adc.h:653
#define VSF_ADC_CFG_MODE_CHECK_UNIQUE
Definition adc.c:238
#define VSF_ADC_CFG_IRQ_MASK_CHECK_UNIQUE
Definition adc.c:239
#define VSF_HAL_ASSERT(__CON)
all hal modules use this configuration file
Definition vsf_hal_cfg.h:36
vsf_adc_irq_mask_t
Predefined VSF ADC interrupt that can be reimplemented in specific HAL drivers.
Definition vsf_template_adc.h:608
@ VSF_ADC_IRQ_MASK_CPL
Conversion complete interrupt.
Definition vsf_template_adc.h:609
@ VSF_ADC_CHANNEL_REF_VDD_1_3
Channel reference voltage set to VDD/1.3. Uses VDD/1.3 as reference voltage for this channel.
Definition vsf_template_adc.h:549
@ VSF_ADC_CHANNEL_REF_VDD_1_2
Channel reference voltage set to VDD/1.2. Uses VDD/1.2 as reference voltage for this channel.
Definition vsf_template_adc.h:539
@ VSF_ADC_CHANNEL_REF_VDD_1
Channel reference voltage set to VDD/1. Uses the full supply voltage as reference for this channel.
Definition vsf_template_adc.h:529
@ VSF_ADC_CHANNEL_GAIN_1_4
Channel gain set to 1/4. Input signal is attenuated to 1/4 of its original value.
Definition vsf_template_adc.h:489
@ VSF_ADC_CHANNEL_GAIN_1_5
Channel gain set to 1/5. Input signal is attenuated to 1/5 of its original value.
Definition vsf_template_adc.h:479
@ VSF_ADC_CHANNEL_GAIN_1_2
Channel gain set to 1/2. Input signal is attenuated to 1/2 of its original value.
Definition vsf_template_adc.h:509
@ VSF_ADC_CHANNEL_GAIN_1
Channel gain set to 1. Input signal remains at its original value (no amplification or attenuation).
Definition vsf_template_adc.h:519
@ VSF_ADC_CHANNEL_REF_VDD_1_4
Channel reference voltage set to VDD/1.4. Uses VDD/1.4 as reference voltage for this channel.
Definition vsf_template_adc.h:559
@ VSF_ADC_CHANNEL_GAIN_1_3
Channel gain set to 1/3. Input signal is attenuated to 1/3 of its original value.
Definition vsf_template_adc.h:499
@ VSF_ADC_CHANNEL_GAIN_1_6
Channel gain set to 1/6. Input signal is attenuated to 1/6 of its original value.
Definition vsf_template_adc.h:469
@ VSF_ADC_EXTERN_TRIGGER_2
External trigger source 2. Selects the third external event source to trigger conversion.
Definition vsf_template_adc.h:385
@ VSF_ADC_DATA_ALIGN_LEFT
Data alignment set to left. The converted data is left-aligned in the data register.
Definition vsf_template_adc.h:335
@ VSF_ADC_REF_VDD_1_2
Reference voltage set to VDD/2. Uses half of the supply voltage as reference for ADC conversion.
Definition vsf_template_adc.h:295
@ VSF_ADC_DATA_ALIGN_RIGHT
Data alignment set to right. The converted data is right-aligned in the data register.
Definition vsf_template_adc.h:325
@ VSF_ADC_REF_VDD_1_4
Reference voltage set to VDD/4. Uses one-fourth of the supply voltage as reference for ADC conversion...
Definition vsf_template_adc.h:315
@ VSF_ADC_EXTERN_TRIGGER_1
External trigger source 1. Selects the second external event source to trigger conversion.
Definition vsf_template_adc.h:375
@ VSF_ADC_REF_VDD_1_3
Reference voltage set to VDD/3. Uses one-third of the supply voltage as reference for ADC conversion.
Definition vsf_template_adc.h:305
@ VSF_ADC_EXTERN_TRIGGER_0
External trigger source 0. Selects the first external event source to trigger conversion.
Definition vsf_template_adc.h:365
@ VSF_ADC_SCAN_CONV_SINGLE_MODE
Single conversion mode. Conversion is performed once for a single channel.
Definition vsf_template_adc.h:345
@ VSF_ADC_SCAN_CONV_SEQUENCE_MODE
Sequence conversion mode. Conversions are performed in sequence for multiple channels.
Definition vsf_template_adc.h:355
@ VSF_ADC_REF_VDD_1
Reference voltage set to VDD. Uses the full supply voltage as reference for ADC conversion.
Definition vsf_template_adc.h:285
vsf_adc_ctrl_t
ADC control commands for hardware-specific operations.
Definition vsf_template_adc.h:723
#define VSF_HAL_CHECK_UNIQUE_CUSTOM(__CHECK_FUNC,...)
Definition vsf_template_static_assert_unique.h:2426
Generated from commit: vsfteam/vsf@85be636