28#if (HAL_USE_ADC == TRUE) || defined(__DOXYGEN__)
46#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
47#define ADC_USE_WAIT TRUE
54#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
55#define ADC_USE_MUTUAL_EXCLUSION TRUE
189#if (ADC_USE_WAIT == TRUE) || defined(__DOXYGEN__)
195#if (ADC_USE_MUTUAL_EXCLUSION == TRUE) || defined(__DOXYGEN__)
201#if defined(ADC_DRIVER_EXT_FIELDS)
202 ADC_DRIVER_EXT_FIELDS
232#define adcIsBufferComplete(adcp) ((bool)((adcp)->state == ADC_COMPLETE))
239#if (ADC_USE_WAIT == TRUE) || defined(__DOXYGEN__)
247#define _adc_reset_i(adcp) \
248 osalThreadResumeI(&(adcp)->thread, MSG_RESET)
257#define _adc_reset_s(adcp) \
258 osalThreadResumeS(&(adcp)->thread, MSG_RESET)
267#define _adc_wakeup_isr(adcp) { \
268 osalSysLockFromISR(); \
269 osalThreadResumeI(&(adcp)->thread, MSG_OK); \
270 osalSysUnlockFromISR(); \
280#define _adc_timeout_isr(adcp) { \
281 osalSysLockFromISR(); \
282 osalThreadResumeI(&(adcp)->thread, MSG_TIMEOUT); \
283 osalSysUnlockFromISR(); \
287#define _adc_reset_i(adcp)
288#define _adc_reset_s(adcp)
289#define _adc_wakeup_isr(adcp)
290#define _adc_timeout_isr(adcp)
305#define _adc_isr_half_code(adcp) { \
306 if ((adcp)->grpp->end_cb != NULL) { \
307 (adcp)->grpp->end_cb(adcp); \
325#define _adc_isr_full_code(adcp) { \
326 if ((adcp)->grpp->circular) { \
328 if ((adcp)->grpp->end_cb != NULL) { \
329 (adcp)->state = ADC_COMPLETE; \
330 (adcp)->grpp->end_cb(adcp); \
331 if ((adcp)->state == ADC_COMPLETE) { \
332 (adcp)->state = ADC_ACTIVE; \
338 const ADCConversionGroup *grpp = (adcp)->grpp; \
339 adc_lld_stop_conversion(adcp); \
340 if ((adcp)->grpp->end_cb != NULL) { \
341 (adcp)->state = ADC_READY; \
342 (adcp)->grpp->end_cb(adcp); \
343 if (((adcp)->state == ADC_READY) && ((adcp)->grpp == grpp)) { \
344 (adcp)->grpp = NULL; \
348 (adcp)->state = ADC_READY; \
349 (adcp)->grpp = NULL; \
351 _adc_wakeup_isr(adcp); \
370#define _adc_isr_error_code(adcp, err) { \
371 adc_lld_stop_conversion(adcp); \
372 if ((adcp)->grpp->error_cb != NULL) { \
373 (adcp)->state = ADC_ERROR; \
374 (adcp)->grpp->error_cb(adcp, err); \
375 if ((adcp)->state == ADC_ERROR) { \
376 (adcp)->state = ADC_READY; \
377 (adcp)->grpp = NULL; \
381 (adcp)->state = ADC_READY; \
382 (adcp)->grpp = NULL; \
384 _adc_timeout_isr(adcp); \
409#if ADC_USE_WAIT == TRUE
415#if ADC_USE_MUTUAL_EXCLUSION == TRUE
uint32_t adcerror_t
Type of an ADC error mask.
void(* adccallback_t)(ADCDriver *adcp)
Type of an ADC notification callback.
struct hal_adc_driver ADCDriver
Type of a structure representing an ADC driver.
void adcStartConversionI(ADCDriver *adcp, const ADCConversionGroup *grpp, adcsample_t *samples, size_t depth)
Starts an ADC conversion.
msg_t adcStart(ADCDriver *adcp, const ADCConfig *config)
Configures and activates the ADC peripheral.
void adcStop(ADCDriver *adcp)
Deactivates the ADC peripheral.
#define adc_lld_driver_fields
Low level fields of the ADC driver structure.
void(* adcerrorcallback_t)(ADCDriver *adcp, adcerror_t err)
Type of an ADC error callback.
adcstate_t
Driver state machine possible states.
void adcAcquireBus(ADCDriver *adcp)
Gains exclusive access to the ADC peripheral.
struct hal_adc_configuration_group ADCConversionGroup
Conversion group configuration structure.
uint16_t adc_channels_num_t
Channels number in a conversion group.
struct hal_adc_config ADCConfig
Type of a structure representing an ADC driver configuration.
#define adc_lld_configuration_group_fields
Low level fields of the ADC configuration structure.
void adcStopConversionI(ADCDriver *adcp)
Stops an ongoing conversion.
#define adc_lld_config_fields
Low level fields of the ADC configuration structure.
void adcStartConversion(ADCDriver *adcp, const ADCConversionGroup *grpp, adcsample_t *samples, size_t depth)
Starts an ADC conversion.
void adcStopConversion(ADCDriver *adcp)
Stops an ongoing conversion.
uint16_t adcsample_t
ADC sample data type.
void adcObjectInit(ADCDriver *adcp)
Initializes the standard part of a ADCDriver structure.
void adcReleaseBus(ADCDriver *adcp)
Releases exclusive access to the ADC peripheral.
msg_t adcConvert(ADCDriver *adcp, const ADCConversionGroup *grpp, adcsample_t *samples, size_t depth)
Performs an ADC conversion.
void adcInit(void)
ADC Driver initialization.
struct ch_mutex mutex_t
Type of a mutex structure.
thread_t * thread_reference_t
Type of a thread reference.
PLATFORM ADC subsystem low level driver header.
Driver configuration structure.
Conversion group configuration structure.
adcerrorcallback_t error_cb
Error callback or NULL.
adc_channels_num_t num_channels
Number of the analog channels belonging to the conversion group.
adccallback_t end_cb
Callback function associated to the group or NULL.
bool circular
Enables the circular buffer mode for the group.
Structure representing an ADC driver.
adcsample_t * samples
Current samples buffer pointer or NULL.
const ADCConversionGroup * grpp
Current conversion group pointer or NULL.
adcstate_t state
Driver state.
size_t depth
Current samples buffer depth or 0.
const ADCConfig * config
Current configuration data.
thread_reference_t thread
Waiting thread.
mutex_t mutex
Mutex protecting the peripheral.