mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
87 lines
2.3 KiB
C
87 lines
2.3 KiB
C
/*
|
|
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "hal/adc_types.h"
|
|
#include "hal/adc_hal_common.h"
|
|
#include "soc/soc_caps.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
typedef struct sens_dev_t *adc_oneshot_soc_handle_t;
|
|
|
|
typedef struct adc_oneshot_hal_cfg_t {
|
|
adc_unit_t unit; ///< ADC unit
|
|
adc_hal_work_mode_t work_mode; ///< ADC work mode
|
|
} adc_oneshot_hal_cfg_t;
|
|
|
|
/**
|
|
* ADC channel configuration
|
|
*/
|
|
typedef struct adc_oneshot_hal_chan_cfg_t {
|
|
adc_atten_t atten; ///< ADC attenuation
|
|
adc_bitwidth_t bitwidth; ///< ADC conversion result bits
|
|
} adc_oneshot_hal_chan_cfg_t;
|
|
|
|
/**
|
|
* Context of the ADC unit, should be maintained by both the driver and the HAL.
|
|
*/
|
|
typedef struct adc_oneshot_hal_ctx_t {
|
|
/* This should be configured by driver in initialisation, dou't touch again */
|
|
adc_oneshot_soc_handle_t dev; ///< ADC SoC layer handle
|
|
|
|
/* These should be malloced by the driver first */
|
|
adc_unit_t unit; ///< ADC unit
|
|
adc_hal_work_mode_t work_mode; ///< ADC work mode
|
|
adc_oneshot_hal_chan_cfg_t chan_configs[SOC_ADC_MAX_CHANNEL_NUM]; ///< ADC configurations per channel
|
|
} adc_oneshot_hal_ctx_t;
|
|
|
|
/**
|
|
* Initialise the context
|
|
*
|
|
* @param hal ADC Oneshot Hal context
|
|
* @param config ADC Oneshot Hal init config
|
|
*/
|
|
void adc_oneshot_hal_init(adc_oneshot_hal_ctx_t *hal, const adc_oneshot_hal_cfg_t *config);
|
|
|
|
/**
|
|
* Prepare ADC Oneshot hal context
|
|
*
|
|
* @param hal ADC Oneshot Hal context
|
|
* @param config ADC Oneshot Hal configuration
|
|
* @param chan ADC Channel
|
|
*/
|
|
void adc_oneshot_hal_channel_config(adc_oneshot_hal_ctx_t *hal, const adc_oneshot_hal_chan_cfg_t *config, adc_channel_t chan);
|
|
|
|
/**
|
|
* Set ADC Oneshot mode required registers
|
|
*
|
|
* @param hal ADC Oneshot Hal context
|
|
* @param channel ADC Channel
|
|
*/
|
|
void adc_oneshot_hal_setup(adc_oneshot_hal_ctx_t *hal, adc_channel_t channel);
|
|
|
|
/**
|
|
* Start ADC conversion in Oneshot mode and get the raw result
|
|
*
|
|
* @param hal ADC Oneshot Hal context
|
|
* @param[out] out_raw ADC oneshot conversion raw result
|
|
*
|
|
* @return
|
|
* - true: ADC raw result is valid
|
|
* - false: ADC raw result is invalid
|
|
*/
|
|
bool adc_oneshot_hal_convert(adc_oneshot_hal_ctx_t *hal, int *out_raw);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|