mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
135 lines
4.8 KiB
C
135 lines
4.8 KiB
C
/*
|
|
* SPDX-FileCopyrightText: 2020-2022 Espressif Systems (Shanghai) CO LTD
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <stdint.h>
|
|
#include "sdkconfig.h"
|
|
#include "esp_adc/adc_cali.h"
|
|
#include "adc_cali_schemes.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#if ADC_CALI_SCHEME_CURVE_FITTING_SUPPORTED
|
|
/*---------------------------------------------------------------
|
|
Curve Fitting Calibration Scheme
|
|
---------------------------------------------------------------*/
|
|
typedef struct {
|
|
adc_unit_t unit_id; ///< ADC unit
|
|
adc_channel_t chan; ///< ADC channel, for chips with SOC_ADC_CALIB_CHAN_COMPENS_SUPPORTED, calibration can be per channel
|
|
adc_atten_t atten; ///< ADC attenuation
|
|
adc_bitwidth_t bitwidth; ///< ADC raw output bitwidth
|
|
} adc_cali_curve_fitting_config_t;
|
|
|
|
/**
|
|
* @brief Create a Curve Fitting calibration scheme
|
|
*
|
|
* After creating, you'll get a handle to this scheme. Then you can use the driver APIS in `esp_adc/adc_cali.h` to do the
|
|
* ADC calibration via the handle you get.
|
|
*
|
|
* @param[in] config Initial configurations
|
|
* @param[out] handle ADC calibration handle
|
|
*
|
|
* @return
|
|
* - ESP_OK: On success
|
|
* - ESP_ERR_INVALID_ARG: Invalid argument
|
|
* - ESP_ERR_NO_MEM: No enough memory
|
|
* - ESP_ERR_NOT_SUPPORTED: Scheme required eFuse bits not burnt
|
|
*/
|
|
esp_err_t adc_cali_create_scheme_curve_fitting(const adc_cali_curve_fitting_config_t *config, adc_cali_handle_t *ret_handle);
|
|
|
|
/**
|
|
* @brief Delete the Curve Fitting calibration scheme handle
|
|
*
|
|
* @param[in] handle ADC calibration handle
|
|
*
|
|
* @return
|
|
* - ESP_OK: On success
|
|
* - ESP_ERR_INVALID_ARG: Invalid argument
|
|
*/
|
|
esp_err_t adc_cali_delete_scheme_curve_fitting(adc_cali_handle_t handle);
|
|
#endif // #if ADC_CALI_SCHEME_CURVE_FITTING_SUPPORTED
|
|
|
|
#if ADC_CALI_SCHEME_LINE_FITTING_SUPPORTED
|
|
/*---------------------------------------------------------------
|
|
Line Fitting Calibration Scheme
|
|
---------------------------------------------------------------*/
|
|
/**
|
|
* @brief Type of calibration value used in line fitting scheme characterization
|
|
*/
|
|
typedef enum {
|
|
ADC_CALI_LINE_FITTING_EFUSE_VAL_EFUSE_VREF = 0, ///< Characterization based on reference voltage stored in eFuse
|
|
ADC_CALI_LINE_FITTING_EFUSE_VAL_EFUSE_TP = 1, ///< Characterization based on Two Point values stored in eFuse
|
|
ADC_CALI_LINE_FITTING_EFUSE_VAL_DEFAULT_VREF = 2, ///< Characterization based on default reference voltage
|
|
} adc_cali_line_fitting_efuse_val_t;
|
|
|
|
typedef struct {
|
|
adc_unit_t unit_id; ///< ADC unit
|
|
adc_atten_t atten; ///< ADC attenuation
|
|
adc_bitwidth_t bitwidth; ///< ADC raw output bitwidth
|
|
#if CONFIG_IDF_TARGET_ESP32
|
|
/**
|
|
* @brief Default ADC reference voltage in mV.
|
|
*
|
|
* Use this when the ADC calibration value is `ADC_CALI_LINE_FITTING_EFUSE_VAL_DEFAULT_VREF`.
|
|
* If others, driver will use the calibration code burnt in the eFuse for calibration.
|
|
*/
|
|
uint32_t default_vref;
|
|
#endif
|
|
} adc_cali_line_fitting_config_t;
|
|
|
|
/**
|
|
* @brief Create a Line Fitting calibration scheme
|
|
*
|
|
* After creating, you'll get a handle to this scheme. Then you can use the driver APIS in `esp_adc/adc_cali.h` to do the
|
|
* ADC calibration via the handle you get.
|
|
*
|
|
* @param[in] config Initial configurations
|
|
* @param[out] handle ADC calibration handle
|
|
*
|
|
* @return
|
|
* - ESP_OK: On success
|
|
* - ESP_ERR_INVALID_ARG: Invalid argument
|
|
* - ESP_ERR_NO_MEM: No enough memory
|
|
* - ESP_ERR_NOT_SUPPORTED: Scheme required eFuse bits not burnt
|
|
*/
|
|
esp_err_t adc_cali_create_scheme_line_fitting(const adc_cali_line_fitting_config_t *config, adc_cali_handle_t *ret_handle);
|
|
|
|
/**
|
|
* @brief Delete the Line Fitting calibration scheme handle
|
|
*
|
|
* @param[in] handle ADC calibration handle
|
|
*
|
|
* @return
|
|
* - ESP_OK: On success
|
|
* - ESP_ERR_INVALID_ARG: Invalid argument
|
|
*/
|
|
esp_err_t adc_cali_delete_scheme_line_fitting(adc_cali_handle_t handle);
|
|
|
|
#if CONFIG_IDF_TARGET_ESP32
|
|
/**
|
|
* @brief Helper function to quickly check the ADC calibration code burnt on your eFuse
|
|
*
|
|
* @note If `cali_val` equals to `ESP_ADC_CALI_VAL_DEFAULT_VREF`, please set the `default_vref`
|
|
* when creating this scheme (See `ESP_ADC_CALI_SCHEME_VER_LINE_FITTING_init_t`)
|
|
*
|
|
* @param[out] cali_val See `esp_adc_cali_value_t`
|
|
*
|
|
* @return
|
|
* - ESP_OK: On success
|
|
* - ESP_ERR_INVALID_ARG: Invalid argument
|
|
* - ESP_ERR_NOT_SUPPORTED: Scheme required eFuse bits not burnt
|
|
*/
|
|
esp_err_t adc_cali_scheme_line_fitting_check_efuse(adc_cali_line_fitting_efuse_val_t *cali_val);
|
|
#endif // CONFIG_IDF_TARGET_ESP32
|
|
#endif // #if ADC_CALI_SCHEME_LINE_FITTING_SUPPORTED
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|