caffeine-hal 0.6.6
A Header-Defined Interface c library, it provides the hal layer for the Caffeine framework
Loading...
Searching...
No Matches
cfn_hal_adc.h
Go to the documentation of this file.
1
26#ifndef CAFFEINE_HAL_HAL_ADC_H
27#define CAFFEINE_HAL_HAL_ADC_H
28
29#ifdef __cplusplus
30extern "C"
31{
32#endif
33
34/* Includes ---------------------------------------------------------*/
35#include "cfn_hal.h"
36#include "cfn_hal_base.h"
37#include "cfn_hal_gpio.h"
38#include "cfn_hal_types.h"
39
40/* Defines ----------------------------------------------------------*/
41
42/* Types Enums ------------------------------------------------------*/
43
52
62
76
84
92
101
107/* Types Structs ----------------------------------------------------*/
108
116
126
127typedef struct cfn_hal_adc_s cfn_hal_adc_t;
129
139 cfn_hal_adc_t *driver, uint32_t event_mask, uint32_t error_mask, uint32_t value, void *user_arg);
140
145{
147
148 /* ADC Specific Extensions */
149 cfn_hal_error_code_t (*read)(cfn_hal_adc_t *driver, uint32_t *value, uint32_t timeout);
152 cfn_hal_error_code_t (*read_dma)(cfn_hal_adc_t *driver, uint32_t *data, size_t nbr_of_samples);
153};
154
156
158/* Functions inline ------------------------------------------------- */
160 uint32_t peripheral_id,
161 struct cfn_hal_clock_s *clock,
162 void *dependency,
163 const cfn_hal_adc_api_t *api,
164 const cfn_hal_adc_phy_t *phy,
165 const cfn_hal_adc_config_t *config,
166 cfn_hal_adc_callback_t callback,
167 void *user_arg)
168{
170 driver, CFN_HAL_PERIPHERAL_TYPE_ADC, peripheral_id, clock, dependency, api, phy, config, callback, user_arg);
171}
172
180 const cfn_hal_adc_config_t *config)
181{
182 if (driver == NULL || config == NULL)
183 {
185 }
186
188 (config->scan >= CFN_HAL_SCAN_MAX) || (config->mode >= CFN_HAL_ADC_MODE_MAX))
189 {
191 }
192
193 return cfn_hal_base_config_validate(&driver->base, CFN_HAL_PERIPHERAL_TYPE_ADC, config);
194}
195
202{
203 if (!driver)
204 {
206 }
207 driver->base.vmt = (const struct cfn_hal_api_base_s *) driver->api;
208 cfn_hal_error_code_t error = cfn_hal_adc_config_validate(driver, driver->config);
209 if (error != CFN_HAL_ERROR_OK)
210 {
211 return error;
212 }
213 return cfn_hal_base_init(&driver->base, CFN_HAL_PERIPHERAL_TYPE_ADC);
214}
215
222{
223 if (!driver)
224 {
226 }
228}
229
237{
238 if (!driver)
239 {
241 }
243 if (error != CFN_HAL_ERROR_OK)
244 {
245 return error;
246 }
247 {
248 driver->config = config;
249 }
250 return cfn_hal_base_config_set(&driver->base, CFN_HAL_PERIPHERAL_TYPE_ADC, (const void *) config);
251}
252
260{
261 if (!driver || !config || !driver->config)
262 {
264 }
265 *config = *(driver->config);
266 return CFN_HAL_ERROR_OK;
267}
268
277 const cfn_hal_adc_callback_t callback,
278 void *user_arg)
279{
280 if (!driver)
281 {
283 }
284 {
285 driver->cb = callback;
286 driver->cb_user_arg = user_arg;
287 }
289 &driver->base, CFN_HAL_PERIPHERAL_TYPE_ADC, (cfn_hal_callback_t) callback, user_arg);
290}
291
306
314{
315 if (!driver)
316 {
318 }
319 return cfn_hal_base_event_enable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_ADC, event_mask);
320}
321
329{
330 if (!driver)
331 {
333 }
334 return cfn_hal_base_event_disable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_ADC, event_mask);
335}
336
344{
345 if (!driver)
346 {
348 }
349 return cfn_hal_base_event_get(&driver->base, CFN_HAL_PERIPHERAL_TYPE_ADC, event_mask);
350}
351
359{
360 if (!driver)
361 {
363 }
364 return cfn_hal_base_error_enable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_ADC, error_mask);
365}
366
374{
375 if (!driver)
376 {
378 }
379 return cfn_hal_base_error_disable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_ADC, error_mask);
380}
381
389{
390 if (!driver)
391 {
393 }
394 return cfn_hal_base_error_get(&driver->base, CFN_HAL_PERIPHERAL_TYPE_ADC, error_mask);
395}
396
397/* ADC Specific Functions ------------------------------------------- */
398
406CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_adc_read(cfn_hal_adc_t *driver, uint32_t *value, uint32_t timeout)
407{
409 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_HAL_PERIPHERAL_TYPE_ADC, read, driver, error, value, timeout);
410 return error;
411}
412
424
436
444CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_adc_read_dma(cfn_hal_adc_t *driver, uint32_t *data, size_t nbr_of_samples)
445{
447 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_HAL_PERIPHERAL_TYPE_ADC, read_dma, driver, error, data, nbr_of_samples);
448 return error;
449}
450
452 const cfn_hal_adc_config_t *config,
453 const cfn_hal_adc_phy_t *phy,
454 struct cfn_hal_clock_s *clock,
455 void *dependency,
456 cfn_hal_adc_callback_t callback,
457 void *user_arg);
459#ifdef __cplusplus
460}
461#endif
462
463#endif // CAFFEINE_HAL_HAL_ADC_H
Core Hardware Abstraction Layer definitions and macros.
#define CFN_HAL_CHECK_AND_CALL_FUNC_VARG(expected_peripheral_type, func, driver, result,...)
Definition cfn_hal.h:134
#define CFN_HAL_CHECK_AND_CALL_FUNC(expected_peripheral_type, func, driver, result)
Definition cfn_hal.h:114
#define CFN_HAL_INLINE
Macro for inlining HAL wrapper functions. Can be overridden with attribute((always_inline)) for perfo...
Definition cfn_hal.h:61
#define CFN_HAL_BIT(x)
Definition cfn_hal.h:79
#define CFN_HAL_CREATE_DRIVER_TYPE(prefix, config_type, api_type, phy_type, cb_type)
Definition cfn_hal.h:102
cfn_hal_adc_error_t
ADC exception error flags.
Definition cfn_hal_adc.h:57
@ CFN_HAL_ADC_ERROR_NONE
Definition cfn_hal_adc.h:58
@ CFN_HAL_ADC_ERROR_OVERRUN
Definition cfn_hal_adc.h:59
@ CFN_HAL_ADC_ERROR_GENERAL
Definition cfn_hal_adc.h:60
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_adc_start(cfn_hal_adc_t *driver)
Starts continuous ADC conversion.
Definition cfn_hal_adc.h:418
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_adc_error_get(cfn_hal_adc_t *driver, uint32_t *error_mask)
Retrieves the current ADC exception error status.
Definition cfn_hal_adc.h:388
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_adc_error_enable(cfn_hal_adc_t *driver, uint32_t error_mask)
Enables one or more ADC exception errors.
Definition cfn_hal_adc.h:358
cfn_hal_adc_scan_t
Definition cfn_hal_adc.h:86
@ CFN_HAL_SCAN_ENABLED
Definition cfn_hal_adc.h:87
@ CFN_HAL_SCAN_MAX
Definition cfn_hal_adc.h:90
@ CFN_HAL_SCAN_DISABLED
Definition cfn_hal_adc.h:88
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_adc_deinit(cfn_hal_adc_t *driver)
Deinitializes the ADC driver.
Definition cfn_hal_adc.h:221
struct cfn_hal_adc_s cfn_hal_adc_t
Definition cfn_hal_adc.h:127
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_adc_event_disable(cfn_hal_adc_t *driver, uint32_t event_mask)
Disables one or more ADC nominal events.
Definition cfn_hal_adc.h:328
cfn_hal_adc_align_t
Definition cfn_hal_adc.h:78
@ CFN_HAL_ADC_ALIGN_LEFT
Definition cfn_hal_adc.h:80
@ CFN_HAL_ADC_ALIGN_RIGHT
Definition cfn_hal_adc.h:79
@ CFN_HAL_ADC_ALIGN_MAX
Definition cfn_hal_adc.h:82
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_adc_init(cfn_hal_adc_t *driver)
Initializes the ADC driver.
Definition cfn_hal_adc.h:201
cfn_hal_adc_eoc_t
Definition cfn_hal_adc.h:103
@ CFN_HAL_ADC_EOC_SINGLE
Definition cfn_hal_adc.h:104
@ CFN_HAL_ADC_EOC_SEQUENCE
Definition cfn_hal_adc.h:105
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_adc_power_state_set(cfn_hal_adc_t *driver, cfn_hal_power_state_t state)
Sets the ADC power state.
Definition cfn_hal_adc.h:298
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_adc_config_set(cfn_hal_adc_t *driver, const cfn_hal_adc_config_t *config)
Sets the ADC configuration.
Definition cfn_hal_adc.h:236
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_adc_error_disable(cfn_hal_adc_t *driver, uint32_t error_mask)
Disables one or more ADC exception errors.
Definition cfn_hal_adc.h:373
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_adc_read_dma(cfn_hal_adc_t *driver, uint32_t *data, size_t nbr_of_samples)
Reads multiple ADC values using DMA.
Definition cfn_hal_adc.h:444
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_adc_event_enable(cfn_hal_adc_t *driver, uint32_t event_mask)
Enables one or more ADC nominal events.
Definition cfn_hal_adc.h:313
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_adc_callback_register(cfn_hal_adc_t *driver, const cfn_hal_adc_callback_t callback, void *user_arg)
Registers a callback for ADC events and errors.
Definition cfn_hal_adc.h:276
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_adc_stop(cfn_hal_adc_t *driver)
Stops continuous ADC conversion.
Definition cfn_hal_adc.h:430
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_adc_read(cfn_hal_adc_t *driver, uint32_t *value, uint32_t timeout)
Reads a single ADC value (polling).
Definition cfn_hal_adc.h:406
cfn_hal_error_code_t cfn_hal_adc_destruct(cfn_hal_adc_t *driver)
Definition cfn_hal_adc_port.c:85
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_adc_config_validate(const cfn_hal_adc_t *driver, const cfn_hal_adc_config_t *config)
Validates the ADC configuration.
Definition cfn_hal_adc.h:179
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_adc_event_get(cfn_hal_adc_t *driver, uint32_t *event_mask)
Retrieves the current ADC nominal event status.
Definition cfn_hal_adc.h:343
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_adc_config_get(cfn_hal_adc_t *driver, cfn_hal_adc_config_t *config)
Gets the current ADC configuration.
Definition cfn_hal_adc.h:259
CFN_HAL_INLINE void cfn_hal_adc_populate(cfn_hal_adc_t *driver, uint32_t peripheral_id, struct cfn_hal_clock_s *clock, void *dependency, const cfn_hal_adc_api_t *api, const cfn_hal_adc_phy_t *phy, const cfn_hal_adc_config_t *config, cfn_hal_adc_callback_t callback, void *user_arg)
Definition cfn_hal_adc.h:159
cfn_hal_adc_resolution_t
Definition cfn_hal_adc.h:64
@ CFN_HAL_ADC_RESOLUTION_BIT_6
Definition cfn_hal_adc.h:66
@ CFN_HAL_ADC_RESOLUTION_BIT_MAX
Definition cfn_hal_adc.h:74
@ CFN_HAL_ADC_RESOLUTION_BIT_8
Definition cfn_hal_adc.h:67
@ CFN_HAL_ADC_RESOLUTION_BIT_4
Definition cfn_hal_adc.h:65
@ CFN_HAL_ADC_RESOLUTION_BIT_12
Definition cfn_hal_adc.h:69
@ CFN_HAL_ADC_RESOLUTION_BIT_10
Definition cfn_hal_adc.h:68
@ CFN_HAL_ADC_RESOLUTION_BIT_24
Definition cfn_hal_adc.h:72
@ CFN_HAL_ADC_RESOLUTION_BIT_14
Definition cfn_hal_adc.h:70
@ CFN_HAL_ADC_RESOLUTION_BIT_16
Definition cfn_hal_adc.h:71
void(* cfn_hal_adc_callback_t)(cfn_hal_adc_t *driver, uint32_t event_mask, uint32_t error_mask, uint32_t value, void *user_arg)
ADC callback signature.
Definition cfn_hal_adc.h:138
cfn_hal_error_code_t cfn_hal_adc_construct(cfn_hal_adc_t *driver, const cfn_hal_adc_config_t *config, const cfn_hal_adc_phy_t *phy, struct cfn_hal_clock_s *clock, void *dependency, cfn_hal_adc_callback_t callback, void *user_arg)
Definition cfn_hal_adc_port.c:69
cfn_hal_adc_event_t
ADC nominal event flags.
Definition cfn_hal_adc.h:48
@ CFN_HAL_ADC_EVENT_EOC
Definition cfn_hal_adc.h:50
@ CFN_HAL_ADC_EVENT_NONE
Definition cfn_hal_adc.h:49
cfn_hal_adc_mode_t
Definition cfn_hal_adc.h:94
@ CFN_HAL_ADC_MODE_CONTINUOUS
Definition cfn_hal_adc.h:96
@ CFN_HAL_ADC_MODE_SINGLE
Definition cfn_hal_adc.h:95
@ CFN_HAL_ADC_MODE_MAX
Definition cfn_hal_adc.h:98
Base driver Hardware Abstraction Layer declarations.
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_error_disable(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t error_mask)
Generic error disable for any driver. Deactivates exception-flow hardware triggers based on the provi...
Definition cfn_hal_base_impl.h:436
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_callback_register(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, cfn_hal_callback_t callback, void *user_arg)
Generic callback registration for any driver.
Definition cfn_hal_base_impl.h:254
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_error_enable(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t error_mask)
Generic error enable for any driver. Activates exception-flow hardware triggers based on the provided...
Definition cfn_hal_base_impl.h:411
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_event_enable(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t event_mask)
Generic event enable for any driver. Activates nominal hardware triggers based on the provided mask.
Definition cfn_hal_base_impl.h:331
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_event_get(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t *event_mask)
Generic event status getter for any driver. Retrieves the current nominal hardware triggers/flags.
Definition cfn_hal_base_impl.h:386
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_error_get(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t *error_mask)
Generic error status getter for any driver. Retrieves current exception-flow hardware flags/errors.
Definition cfn_hal_base_impl.h:461
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_config_set(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, const void *config)
Generic configuration setter for any driver.
Definition cfn_hal_base_impl.h:196
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_power_state_set(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, cfn_hal_power_state_t state)
Generic power state transition for any driver.
Definition cfn_hal_base_impl.h:279
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_deinit(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type)
Generic deinitialization for any driver. Returns the driver to the CONSTRUCTED state and releases boa...
Definition cfn_hal_base_impl.h:144
#define CFN_HAL_VMT_CHECK(api_struct_type)
Compile-time check to ensure a peripheral API struct is compatible with the base layer....
Definition cfn_hal_base.h:91
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_init(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type)
Generic initialization for any driver. Handles board-level hooks, type validation,...
Definition cfn_hal_base_impl.h:85
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_config_validate(const cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, const void *config)
Generic validation for a configuration.
Definition cfn_hal_base_impl.h:234
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_event_disable(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t event_mask)
Generic event disable for any driver. Deactivates nominal hardware triggers based on the provided mas...
Definition cfn_hal_base_impl.h:361
#define CFN_HAL_POPULATE_DRIVER( driver_ptr, periph_type, periph_id, clock_ptr, dep_ptr, api_ptr, phy_ptr, cfg_ptr, cb_func, cb_arg)
Standardizes the population of a peripheral driver structure. This macro ensures that the base driver...
Definition cfn_hal_base_impl.h:45
General Purpose Input/Output (GPIO) HAL API.
Common type definitions and enums for the HAL.
void(* cfn_hal_callback_t)(void)
Generic function pointer for HAL callbacks. Used as a standard-compliant carrier in the base layer.
Definition cfn_hal_types.h:98
enum cfn_hal_error_codes cfn_hal_error_code_t
#define CFN_HAL_PERIPHERAL_TYPE_ADC
Definition cfn_hal_types.h:120
cfn_hal_power_state_t
Definition cfn_hal_types.h:156
@ CFN_HAL_ERROR_OK
Definition cfn_hal_types.h:50
@ CFN_HAL_ERROR_BAD_PARAM
Definition cfn_hal_types.h:53
@ CFN_HAL_ERROR_BAD_CONFIG
Definition cfn_hal_types.h:60
ADC Virtual Method Table (VMT).
Definition cfn_hal_adc.h:145
cfn_hal_error_code_t(* read)(cfn_hal_adc_t *driver, uint32_t *value, uint32_t timeout)
Definition cfn_hal_adc.h:149
cfn_hal_api_base_t base
Definition cfn_hal_adc.h:146
cfn_hal_error_code_t(* start)(cfn_hal_adc_t *driver)
Definition cfn_hal_adc.h:150
cfn_hal_error_code_t(* stop)(cfn_hal_adc_t *driver)
Definition cfn_hal_adc.h:151
cfn_hal_error_code_t(* read_dma)(cfn_hal_adc_t *driver, uint32_t *data, size_t nbr_of_samples)
Definition cfn_hal_adc.h:152
Definition cfn_hal_adc.h:118
cfn_hal_adc_resolution_t resolution
Definition cfn_hal_adc.h:119
cfn_hal_adc_align_t alignment
Definition cfn_hal_adc.h:120
uint32_t eoc
Definition cfn_hal_adc.h:123
void * custom
Definition cfn_hal_adc.h:124
cfn_hal_adc_scan_t scan
Definition cfn_hal_adc.h:121
cfn_hal_adc_mode_t mode
Definition cfn_hal_adc.h:122
Definition cfn_hal_adc.h:110
void * instance
Definition cfn_hal_adc.h:111
void * user_arg
Definition cfn_hal_adc.h:114
uint32_t channel
Definition cfn_hal_adc.h:112
cfn_hal_gpio_pin_handle_t * gpio
Definition cfn_hal_adc.h:113
Base API structure for all peripheral drivers. Every peripheral-specific API struct MUST have this as...
Definition cfn_hal_base.h:63
Lightweight handle to a specific GPIO pin. Used by other peripherals to reference physical pins.
Definition cfn_hal_gpio.h:173