VSF Documented
vsf_template_adc.h
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#ifndef __VSF_TEMPLATE_ADC_H__
19#define __VSF_TEMPLATE_ADC_H__
20
21/*============================ INCLUDES ======================================*/
22
24#include "hal/arch/vsf_arch.h"
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
30/*============================ MACROS ========================================*/
31
39#ifndef VSF_ADC_CFG_MULTI_CLASS
40# define VSF_ADC_CFG_MULTI_CLASS ENABLED
41#endif
42
50#if defined(VSF_HW_ADC_COUNT) && !defined(VSF_HW_ADC_MASK)
51# define VSF_HW_ADC_MASK VSF_HAL_COUNT_TO_MASK(VSF_HW_ADC_COUNT)
52#endif
53
61#if defined(VSF_HW_ADC_MASK) && !defined(VSF_HW_ADC_COUNT)
62# define VSF_HW_ADC_COUNT VSF_HAL_MASK_TO_COUNT(VSF_HW_ADC_MASK)
63#endif
64
74#ifndef VSF_ADC_CFG_PREFIX
75# if VSF_ADC_CFG_MULTI_CLASS == ENABLED
76# define VSF_ADC_CFG_PREFIX vsf
77# elif defined(VSF_HW_ADC_COUNT) && (VSF_HW_ADC_COUNT != 0)
78# define VSF_ADC_CFG_PREFIX vsf_hw
79# else
80# define VSF_ADC_CFG_PREFIX vsf
81# endif
82#endif
83
93#ifndef VSF_ADC_CFG_FUNCTION_RENAME
94# define VSF_ADC_CFG_FUNCTION_RENAME ENABLED
95#endif
96
105#ifndef VSF_ADC_CFG_REIMPLEMENT_TYPE_MODE
106# define VSF_ADC_CFG_REIMPLEMENT_TYPE_MODE DISABLED
107#endif
108
117#ifndef VSF_ADC_CFG_REIMPLEMENT_TYPE_CHANNEL_MODE
118# define VSF_ADC_CFG_REIMPLEMENT_TYPE_CHANNEL_MODE DISABLED
119#endif
120
129#ifndef VSF_ADC_CFG_REIMPLEMENT_TYPE_IRQ_MASK
130# define VSF_ADC_CFG_REIMPLEMENT_TYPE_IRQ_MASK DISABLED
131#endif
132
144#ifndef VSF_ADC_CFG_REIMPLEMENT_TYPE_CHANNEL_CFG
145# define VSF_ADC_CFG_REIMPLEMENT_TYPE_CHANNEL_CFG DISABLED
146#endif
147
160#ifndef VSF_ADC_CFG_REIMPLEMENT_TYPE_CFG
161# define VSF_ADC_CFG_REIMPLEMENT_TYPE_CFG DISABLED
162#endif
163
173#ifndef VSF_ADC_CFG_REIMPLEMENT_TYPE_CAPABILITY
174# define VSF_ADC_CFG_REIMPLEMENT_TYPE_CAPABILITY DISABLED
175#endif
176
185#ifndef VSF_ADC_CFG_REIMPLEMENT_TYPE_STATUS
186# define VSF_ADC_CFG_REIMPLEMENT_TYPE_STATUS DISABLED
187#endif
188
198#ifndef VSF_ADC_CFG_INHERIT_HAL_CAPABILITY
199# define VSF_ADC_CFG_INHERIT_HAL_CAPABILITY ENABLED
200#endif
201
202/*============================ MACROFIED FUNCTIONS ===========================*/
203
213#define VSF_ADC_APIS(__prefix_name) \
214 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, adc, init, VSF_MCONNECT(__prefix_name, _t) *adc_ptr, vsf_adc_cfg_t *cfg_ptr) \
215 __VSF_HAL_TEMPLATE_API(__prefix_name, void, adc, fini, VSF_MCONNECT(__prefix_name, _t) *adc_ptr) \
216 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, adc, get_configuration, VSF_MCONNECT(__prefix_name, _t) *adc_ptr, vsf_adc_cfg_t *cfg_ptr) \
217 __VSF_HAL_TEMPLATE_API(__prefix_name, fsm_rt_t, adc, enable, VSF_MCONNECT(__prefix_name, _t) *adc_ptr) \
218 __VSF_HAL_TEMPLATE_API(__prefix_name, fsm_rt_t, adc, disable, VSF_MCONNECT(__prefix_name, _t) *adc_ptr) \
219 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_adc_status_t, adc, status, VSF_MCONNECT(__prefix_name, _t) *adc_ptr) \
220 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_adc_capability_t, adc, capability, VSF_MCONNECT(__prefix_name, _t) *adc_ptr) \
221 __VSF_HAL_TEMPLATE_API(__prefix_name, void, adc, irq_enable, VSF_MCONNECT(__prefix_name, _t) *adc_ptr, vsf_adc_irq_mask_t irq_mask) \
222 __VSF_HAL_TEMPLATE_API(__prefix_name, void, adc, irq_disable, VSF_MCONNECT(__prefix_name, _t) *adc_ptr, vsf_adc_irq_mask_t irq_mask) \
223 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, adc, channel_request_once, VSF_MCONNECT(__prefix_name, _t) *adc_ptr, vsf_adc_channel_cfg_t *channel_cfg, void *buffer_ptr) \
224 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, adc, channel_config, VSF_MCONNECT(__prefix_name, _t) *adc_ptr, vsf_adc_channel_cfg_t *channel_cfgs_ptr, uint32_t channel_cfgs_cnt) \
225 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, adc, channel_request, VSF_MCONNECT(__prefix_name, _t) *adc_ptr, void *buffer_ptr, uint_fast32_t count)
226
227/*============================ TYPES =========================================*/
228
229#if VSF_ADC_CFG_REIMPLEMENT_TYPE_MODE == DISABLED
274typedef enum vsf_adc_mode_t {
284
294
304
314
324
334
344
354
364
374
385#endif
386
387enum {
393
397
401
406
412};
413
414#if VSF_ADC_CFG_REIMPLEMENT_TYPE_CHANNEL_MODE == DISABLED
468
478
488
498
508
518
528
538
548
559#endif
560
561enum {
569
575
580};
581
582#if VSF_ADC_CFG_REIMPLEMENT_TYPE_IRQ_MASK == DISABLED
606typedef enum vsf_adc_irq_mask_t {
607 VSF_ADC_IRQ_MASK_CPL = (0x1ul << 0),
609#endif
610
611enum {
614};
615
617#if VSF_ADC_CFG_REIMPLEMENT_TYPE_CHANNEL_CFG == DISABLED
625typedef struct vsf_adc_channel_cfg_t {
630#endif
631
632#if VSF_ADC_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
633typedef struct vsf_adc_t vsf_adc_t;
634typedef void vsf_adc_isr_handler_t(void *target_ptr,
635 vsf_adc_t *adc_ptr,
638typedef struct vsf_adc_isr_t {
643
651typedef struct vsf_adc_cfg_t {
656#endif
657
658#if VSF_ADC_CFG_REIMPLEMENT_TYPE_STATUS == DISABLED
673typedef struct vsf_adc_status_t {
674 union {
676 struct {
677 uint32_t is_busy : 1;
678 };
680 };
682#endif
683
684#if VSF_ADC_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
701typedef struct vsf_adc_capability_t {
702#if VSF_ADC_CFG_INHERIT_HAL_CAPABILITY == ENABLED
704#endif
706
710#endif
711
712typedef struct vsf_adc_op_t {
714#undef __VSF_HAL_TEMPLATE_API
715#define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_FP
717
718 VSF_ADC_APIS(vsf_adc)
720
721#if VSF_ADC_CFG_MULTI_CLASS == ENABLED
722struct vsf_adc_t {
724};
725#endif
726
727/*============================ PROTOTYPES ====================================*/
728
748extern vsf_err_t vsf_adc_init(vsf_adc_t *adc_ptr, vsf_adc_cfg_t *cfg_ptr);
749
761extern void vsf_adc_fini(vsf_adc_t *adc_ptr);
762
781
793extern fsm_rt_t vsf_adc_enable(vsf_adc_t *adc_ptr);
794
806extern fsm_rt_t vsf_adc_disable(vsf_adc_t *adc_ptr);
807
824
839
852
865
882 vsf_adc_channel_cfg_t *channel_cfg,
883 void *buffer_ptr);
884
901 vsf_adc_channel_cfg_t *cfgs_ptr,
902 uint32_t cnt);
903
920 void *buffer_ptr,
921 uint_fast32_t count);
922
923/*============================ MACROFIED FUNCTIONS ===========================*/
924
926#if VSF_ADC_CFG_FUNCTION_RENAME == ENABLED
927# define __vsf_adc_t VSF_MCONNECT(VSF_ADC_CFG_PREFIX, _adc_t)
928# define vsf_adc_init(__ADC, ...) VSF_MCONNECT(VSF_ADC_CFG_PREFIX, _adc_init) ((__vsf_adc_t *)(__ADC), ##__VA_ARGS__)
929# define vsf_adc_fini(__ADC) VSF_MCONNECT(VSF_ADC_CFG_PREFIX, _adc_fini) ((__vsf_adc_t *)(__ADC))
930# define vsf_adc_get_configuration(__ADC, ...) VSF_MCONNECT(VSF_ADC_CFG_PREFIX, _adc_get_configuration) ((__vsf_adc_t *)(__ADC), ##__VA_ARGS__)
931# define vsf_adc_enable(__ADC) VSF_MCONNECT(VSF_ADC_CFG_PREFIX, _adc_enable) ((__vsf_adc_t *)(__ADC))
932# define vsf_adc_disable(__ADC) VSF_MCONNECT(VSF_ADC_CFG_PREFIX, _adc_disable) ((__vsf_adc_t *)(__ADC))
933# define vsf_adc_status(__ADC) VSF_MCONNECT(VSF_ADC_CFG_PREFIX, _adc_status) ((__vsf_adc_t *)(__ADC))
934# define vsf_adc_capability(__ADC) VSF_MCONNECT(VSF_ADC_CFG_PREFIX, _adc_capability) ((__vsf_adc_t *)(__ADC))
935# define vsf_adc_irq_enable(__ADC, ...) VSF_MCONNECT(VSF_ADC_CFG_PREFIX, _adc_irq_enable) ((__vsf_adc_t *)(__ADC), ##__VA_ARGS__)
936# define vsf_adc_irq_disable(__ADC, ...) VSF_MCONNECT(VSF_ADC_CFG_PREFIX, _adc_irq_disable) ((__vsf_adc_t *)(__ADC), ##__VA_ARGS__)
937# define vsf_adc_channel_request_once(__ADC, ...) VSF_MCONNECT(VSF_ADC_CFG_PREFIX, _adc_channel_request_once) ((__vsf_adc_t *)(__ADC), ##__VA_ARGS__)
938# define vsf_adc_channel_config(__ADC, ...) VSF_MCONNECT(VSF_ADC_CFG_PREFIX, _adc_channel_config) ((__vsf_adc_t *)(__ADC), ##__VA_ARGS__)
939# define vsf_adc_channel_request(__ADC, ...) VSF_MCONNECT(VSF_ADC_CFG_PREFIX, _adc_channel_request) ((__vsf_adc_t *)(__ADC), ##__VA_ARGS__)
940#endif
942
943#ifdef __cplusplus
944}
945#endif
946
947#endif /*__VSF_TEMPLATE_ADC_H__*/
vsf_err_t
Definition __type.h:42
vsf_arch_prio_t
Definition cortex_a_generic.h:88
const i_spi_t vsf_spi_irq_mask_t irq_mask
Definition spi_interface.h:38
unsigned short uint16_t
Definition stdint.h:7
unsigned uint32_t
Definition stdint.h:9
unsigned int uint_fast32_t
Definition stdint.h:27
unsigned char uint8_t
Definition stdint.h:5
Predefined VSF ADC capability that can be reimplemented in specific HAL drivers.
Definition vsf_template_adc.h:701
inherit(vsf_peripheral_capability_t) vsf_adc_irq_mask_t irq_mask
uint8_t max_data_bits
Definition vsf_template_adc.h:707
uint8_t channel_count
Definition vsf_template_adc.h:708
Configuration structure for ADC.
Definition vsf_template_adc.h:651
vsf_adc_isr_t isr
Interrupt service routine configuration.
Definition vsf_template_adc.h:653
uint32_t clock_hz
Clock frequency in Hertz.
Definition vsf_template_adc.h:654
vsf_adc_mode_t mode
ADC working mode.
Definition vsf_template_adc.h:652
adc channel configuration
Definition vsf_template_adc.h:625
vsf_adc_channel_mode_t mode
Channel mode.
Definition vsf_template_adc.h:626
uint16_t sample_cycles
Sample cycles.
Definition vsf_template_adc.h:627
uint8_t channel
Channel Index.
Definition vsf_template_adc.h:628
adc isr for api
Definition vsf_template_adc.h:638
vsf_arch_prio_t prio
Definition vsf_template_adc.h:641
void * target_ptr
Definition vsf_template_adc.h:640
vsf_adc_isr_handler_t * handler_fn
Definition vsf_template_adc.h:639
Definition vsf_template_adc.h:712
Predefined VSF ADC status that can be reimplemented in specific HAL drivers.
Definition vsf_template_adc.h:673
uint32_t value
Definition vsf_template_adc.h:679
Definition vsf_template_adc.h:722
const vsf_adc_op_t * op
Definition vsf_template_adc.h:723
Definition vsf_template_hal_driver.h:203
Definition vsf_template_hal_driver.h:196
void vsf_adc_isr_handler_t(void *target_ptr, vsf_adc_t *adc_ptr, vsf_adc_irq_mask_t irq_mask)
Definition adc.h:180
vsf_adc_irq_mask_t
Definition adc.h:150
vsf_adc_channel_mode_t
Definition adc.h:134
vsf_adc_mode_t
Definition adc.h:118
fsm_rt_t
Definition vsf_fsm.h:315
void vsf_adc_isr_handler_t(void *target_ptr, vsf_adc_t *adc_ptr, vsf_adc_irq_mask_t irq_mask)
Definition vsf_template_adc.h:634
vsf_adc_capability_t vsf_adc_capability(vsf_adc_t *adc_ptr)
Get the capability of ADC instance.
Definition adc_common.c:111
fsm_rt_t vsf_adc_disable(vsf_adc_t *adc_ptr)
Disable an ADC instance.
Definition adc_common.c:75
vsf_err_t vsf_adc_channel_request_once(vsf_adc_t *adc_ptr, vsf_adc_channel_cfg_t *channel_cfg, void *buffer_ptr)
ADC request sampling once.
Definition adc_common.c:120
void vsf_adc_irq_enable(vsf_adc_t *adc_ptr, vsf_adc_irq_mask_t irq_mask)
Enable interrupt masks of ADC instance.
Definition adc_common.c:84
struct vsf_adc_capability_t vsf_adc_capability_t
Predefined VSF ADC capability that can be reimplemented in specific HAL drivers.
struct vsf_adc_status_t vsf_adc_status_t
Predefined VSF ADC status that can be reimplemented in specific HAL drivers.
vsf_err_t vsf_adc_channel_request(vsf_adc_t *adc_ptr, void *buffer_ptr, uint_fast32_t count)
ADC channel request.
Definition adc_common.c:138
vsf_adc_status_t vsf_adc_status(vsf_adc_t *adc_ptr)
Get the status of ADC instance.
Definition adc_common.c:102
vsf_err_t vsf_adc_channel_config(vsf_adc_t *adc_ptr, vsf_adc_channel_cfg_t *cfgs_ptr, uint32_t cnt)
ADC channel configuration.
Definition adc_common.c:129
fsm_rt_t vsf_adc_enable(vsf_adc_t *adc_ptr)
Enable an ADC instance.
Definition adc_common.c:66
vsf_adc_irq_mask_t
Predefined VSF ADC interrupt that can be reimplemented in specific HAL drivers.
Definition vsf_template_adc.h:606
@ VSF_ADC_IRQ_MASK_CPL
Conversion complete interrupt.
Definition vsf_template_adc.h:607
vsf_adc_channel_mode_t
Predefined VSF ADC channel modes that can be reimplemented in specific HAL drivers.
Definition vsf_template_adc.h:458
@ 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:547
@ 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:537
@ 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:527
@ 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:487
@ 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:477
@ 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:507
@ 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:517
@ 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:557
@ 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:497
@ 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:467
vsf_err_t vsf_adc_init(vsf_adc_t *adc_ptr, vsf_adc_cfg_t *cfg_ptr)
Initialize an ADC instance.
Definition adc_common.c:38
vsf_adc_mode_t
Predefined VSF ADC modes that can be reimplemented in specific HAL drivers.
Definition vsf_template_adc.h:274
@ VSF_ADC_EXTERN_TRIGGER_2
External trigger source 2. Selects the third external event source to trigger conversion.
Definition vsf_template_adc.h:383
@ 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:333
@ 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:293
@ 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:323
@ 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:313
@ VSF_ADC_EXTERN_TRIGGER_1
External trigger source 1. Selects the second external event source to trigger conversion.
Definition vsf_template_adc.h:373
@ 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:303
@ VSF_ADC_EXTERN_TRIGGER_0
External trigger source 0. Selects the first external event source to trigger conversion.
Definition vsf_template_adc.h:363
@ VSF_ADC_SCAN_CONV_SINGLE_MODE
Single conversion mode. Conversion is performed once for a single channel.
Definition vsf_template_adc.h:343
@ VSF_ADC_SCAN_CONV_SEQUENCE_MODE
Sequence conversion mode. Conversions are performed in sequence for multiple channels.
Definition vsf_template_adc.h:353
@ 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:283
vsf_err_t vsf_adc_get_configuration(vsf_adc_t *adc_ptr, vsf_adc_cfg_t *cfg_ptr)
Get current configuration of an ADC instance.
Definition adc_common.c:56
#define VSF_ADC_APIS(__prefix_name)
ADC API template, used to generate ADC type, specific prefix function declarations,...
Definition vsf_template_adc.h:213
struct vsf_adc_channel_cfg_t vsf_adc_channel_cfg_t
adc channel configuration
struct vsf_adc_isr_t vsf_adc_isr_t
adc isr for api
void vsf_adc_fini(vsf_adc_t *adc_ptr)
Finalize an ADC instance.
Definition adc_common.c:47
void vsf_adc_irq_disable(vsf_adc_t *adc_ptr, vsf_adc_irq_mask_t irq_mask)
Disable interrupt masks of ADC instance.
Definition adc_common.c:93
@ VSF_ADC_MODE_ALL_BITS_MASK
Definition vsf_template_adc.h:408
@ VSF_ADC_EXTERN_TRIGGER_COUNT
Definition vsf_template_adc.h:402
@ VSF_ADC_MODE_MASK_COUNT
Definition vsf_template_adc.h:407
@ VSF_ADC_REF_VDD_MASK
Definition vsf_template_adc.h:389
@ VSF_ADC_REF_VDD_COUNT
Definition vsf_template_adc.h:388
@ VSF_ADC_DATA_ALIGN_MASK
Definition vsf_template_adc.h:395
@ VSF_ADC_DATA_ALIGN_COUNT
Definition vsf_template_adc.h:394
@ VSF_ADC_SCAN_CONV_MASK
Definition vsf_template_adc.h:399
@ VSF_ADC_EXTERN_TRIGGER_MASK
Definition vsf_template_adc.h:403
@ VSF_ADC_SCAN_CONV_COUNT
Definition vsf_template_adc.h:398
struct vsf_adc_cfg_t vsf_adc_cfg_t
Configuration structure for ADC.
@ VSF_ADC_CHANNEL_GAIN_MASK
Definition vsf_template_adc.h:563
@ VSF_ADC_CHANNEL_MODE_ALL_BITS_MASK
Definition vsf_template_adc.h:577
@ VSF_ADC_CHANNEL_MODE_MASK_COUNT
Definition vsf_template_adc.h:576
@ VSF_ADC_CHANNEL_REF_VDD_MASK
Definition vsf_template_adc.h:571
@ VSF_ADC_CHANNEL_GAIN_COUNT
Definition vsf_template_adc.h:562
@ VSF_ADC_CHANNEL_REF_VDD_COUNT
Definition vsf_template_adc.h:570
@ VSF_ADC_IRQ_COUNT
Definition vsf_template_adc.h:612
@ VSF_ADC_IRQ_ALL_BITS_MASK
Definition vsf_template_adc.h:613
Generated from commit: vsfteam/vsf@206e2c0