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
181#if (ADC_USE_WAIT == TRUE) || defined(__DOXYGEN__)
187#if (ADC_USE_MUTUAL_EXCLUSION == TRUE) || defined(__DOXYGEN__)
193#if defined(ADC_DRIVER_EXT_FIELDS)
194 ADC_DRIVER_EXT_FIELDS
221#define adcIsBufferComplete(adcp) ((bool)((adcp)->state == ADC_COMPLETE))
228#if (ADC_USE_WAIT == TRUE) || defined(__DOXYGEN__)
236#define _adc_reset_i(adcp) \
237 osalThreadResumeI(&(adcp)->thread, MSG_RESET)
246#define _adc_reset_s(adcp) \
247 osalThreadResumeS(&(adcp)->thread, MSG_RESET)
256#define _adc_wakeup_isr(adcp) { \
257 osalSysLockFromISR(); \
258 osalThreadResumeI(&(adcp)->thread, MSG_OK); \
259 osalSysUnlockFromISR(); \
269#define _adc_timeout_isr(adcp) { \
270 osalSysLockFromISR(); \
271 osalThreadResumeI(&(adcp)->thread, MSG_TIMEOUT); \
272 osalSysUnlockFromISR(); \
276#define _adc_reset_i(adcp)
277#define _adc_reset_s(adcp)
278#define _adc_wakeup_isr(adcp)
279#define _adc_timeout_isr(adcp)
294#define _adc_isr_half_code(adcp) { \
295 if ((adcp)->grpp->end_cb != NULL) { \
296 (adcp)->grpp->end_cb(adcp); \
314#define _adc_isr_full_code(adcp) { \
315 if ((adcp)->grpp->circular) { \
317 if ((adcp)->grpp->end_cb != NULL) { \
318 (adcp)->state = ADC_COMPLETE; \
319 (adcp)->grpp->end_cb(adcp); \
320 if ((adcp)->state == ADC_COMPLETE) { \
321 (adcp)->state = ADC_ACTIVE; \
327 adc_lld_stop_conversion(adcp); \
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_READY; \
333 (adcp)->grpp = NULL; \
337 (adcp)->state = ADC_READY; \
338 (adcp)->grpp = NULL; \
340 _adc_wakeup_isr(adcp); \
359#define _adc_isr_error_code(adcp, err) { \
360 adc_lld_stop_conversion(adcp); \
361 if ((adcp)->grpp->error_cb != NULL) { \
362 (adcp)->state = ADC_ERROR; \
363 (adcp)->grpp->error_cb(adcp, err); \
364 if ((adcp)->state == ADC_ERROR) { \
365 (adcp)->state = ADC_READY; \
366 (adcp)->grpp = NULL; \
370 (adcp)->state = ADC_READY; \
371 (adcp)->grpp = NULL; \
373 _adc_timeout_isr(adcp); \
398#if ADC_USE_WAIT == TRUE
404#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.
int32_t msg_t
Type of a message.
void * thread_reference_t
Type of a thread reference.
uint32_t mutex_t
Type of a mutex.
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.