mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-03 00:21:44 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.5 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"
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3
 | 
						|
#define ESP_ADC_CAL_CURVE_FITTING_SUPPORTED    1
 | 
						|
 | 
						|
#define COEFF_GROUP_NUM    4
 | 
						|
#define TERM_MAX           5
 | 
						|
#endif
 | 
						|
 | 
						|
#if ESP_ADC_CAL_CURVE_FITTING_SUPPORTED
 | 
						|
/**
 | 
						|
 * Calculation parameters used for curve fitting calibration algorithm error
 | 
						|
 *
 | 
						|
 * @note For atten0 ~ 2, error = (K0 * X^0) + (K1 * X^1) + (K2 * X^2); For atten3, error = (K0 * X^0) + (K1 * X^1)  + (K2 * X^2) + (K3 * X^3) + (K4 * X^4);
 | 
						|
 *       Where X is the `v_cali_input`.
 | 
						|
 */
 | 
						|
typedef struct {
 | 
						|
    uint64_t v_cali_input;                                      //Input to calculate the error
 | 
						|
    uint8_t  term_num;                                          //Term number of the algorithm formula
 | 
						|
    const uint64_t (*coeff)[COEFF_GROUP_NUM][TERM_MAX][2];      //Coeff of each term. See `adc_error_coef_atten` for details (and the magic number 2)
 | 
						|
    const int32_t (*sign)[COEFF_GROUP_NUM][TERM_MAX];           //Sign of each term
 | 
						|
} esp_adc_error_calc_param_t;
 | 
						|
 | 
						|
/**
 | 
						|
 * Calculate the curve fitting error
 | 
						|
 *
 | 
						|
 * @param param   see `esp_adc_error_calc_param_t`
 | 
						|
 * @param atten   ADC attenuation
 | 
						|
 */
 | 
						|
int32_t esp_adc_cal_get_reading_error(const esp_adc_error_calc_param_t *param, uint8_t atten);
 | 
						|
 | 
						|
#endif  //#if ESP_ADC_CAL_CURVE_FITTING_SUPPORTED
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 |