mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-02 12:14:32 +02:00
adc: replace assert with esp check
This commit is contained in:
@@ -55,33 +55,36 @@ typedef struct {
|
|||||||
} efuse_data;
|
} efuse_data;
|
||||||
} adc_calib_parsed_info;
|
} adc_calib_parsed_info;
|
||||||
|
|
||||||
static bool prepare_calib_data_for(int version_num, adc_unit_t adc_num, adc_atten_t atten, adc_calib_parsed_info *parsed_data_storage)
|
static esp_err_t prepare_calib_data_for(int version_num, adc_unit_t adc_num, adc_atten_t atten, adc_calib_parsed_info *parsed_data_storage)
|
||||||
{
|
{
|
||||||
assert(version_num == 1);
|
assert(version_num == 1);
|
||||||
|
esp_err_t ret;
|
||||||
|
|
||||||
parsed_data_storage->version_num = version_num;
|
parsed_data_storage->version_num = version_num;
|
||||||
parsed_data_storage->adc_num = adc_num;
|
parsed_data_storage->adc_num = adc_num;
|
||||||
parsed_data_storage->atten_level = atten;
|
parsed_data_storage->atten_level = atten;
|
||||||
// V1 we don't have calibration data for ADC2, using the efuse data of ADC1
|
// V1 we don't have calibration data for ADC2, using the efuse data of ADC1
|
||||||
uint32_t voltage, digi;
|
uint32_t voltage, digi;
|
||||||
esp_err_t ret = esp_efuse_rtc_calib_get_cal_voltage(version_num, atten, &digi, &voltage);
|
ret = esp_efuse_rtc_calib_get_cal_voltage(version_num, atten, &digi, &voltage);
|
||||||
assert(ret == ESP_OK);
|
if (ret != ESP_OK) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
parsed_data_storage->efuse_data.ver1.voltage = voltage;
|
parsed_data_storage->efuse_data.ver1.voltage = voltage;
|
||||||
parsed_data_storage->efuse_data.ver1.digi = digi;
|
parsed_data_storage->efuse_data.ver1.digi = digi;
|
||||||
return true;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------- Characterization Functions ----------------------- */
|
/* ----------------------- Characterization Functions ----------------------- */
|
||||||
/*
|
/*
|
||||||
* Estimate the (assumed) linear relationship btwn the measured raw value and the voltage
|
* Estimate the (assumed) linear relationship btwn the measured raw value and the voltage
|
||||||
* with the previously done measurement when the chip was manufactured.
|
* with the previously done measurement when the chip was manufactured.
|
||||||
* */
|
*/
|
||||||
static bool calculate_characterization_coefficients(const adc_calib_parsed_info *parsed_data, esp_adc_cal_characteristics_t *chars)
|
static void calculate_characterization_coefficients(const adc_calib_parsed_info *parsed_data, esp_adc_cal_characteristics_t *chars)
|
||||||
{
|
{
|
||||||
ESP_LOGD(LOG_TAG, "Calib V1, Cal Voltage = %d, Digi out = %d\n", parsed_data->efuse_data.ver1.voltage, parsed_data->efuse_data.ver1.digi);
|
ESP_LOGD(LOG_TAG, "Calib V1, Cal Voltage = %d, Digi out = %d\n", parsed_data->efuse_data.ver1.voltage, parsed_data->efuse_data.ver1.digi);
|
||||||
|
|
||||||
chars->coeff_a = coeff_a_scaling * parsed_data->efuse_data.ver1.voltage / parsed_data->efuse_data.ver1.digi;
|
chars->coeff_a = coeff_a_scaling * parsed_data->efuse_data.ver1.voltage / parsed_data->efuse_data.ver1.digi;
|
||||||
chars->coeff_b = 0;
|
chars->coeff_b = 0;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------- Public API ------------------------------------- */
|
/* ------------------------- Public API ------------------------------------- */
|
||||||
@@ -104,12 +107,13 @@ esp_adc_cal_value_t esp_adc_cal_characterize(adc_unit_t adc_num,
|
|||||||
uint32_t default_vref,
|
uint32_t default_vref,
|
||||||
esp_adc_cal_characteristics_t *chars)
|
esp_adc_cal_characteristics_t *chars)
|
||||||
{
|
{
|
||||||
bool res;
|
esp_err_t ret;
|
||||||
adc_calib_parsed_info efuse_parsed_data = {0};
|
adc_calib_parsed_info efuse_parsed_data = {0};
|
||||||
// Check parameters
|
// Check parameters
|
||||||
ADC_CALIB_CHECK(adc_num == ADC_UNIT_1 || adc_num == ADC_UNIT_2, "Invalid unit num", ESP_ADC_CAL_VAL_NOT_SUPPORTED);
|
ADC_CALIB_CHECK(adc_num == ADC_UNIT_1 || adc_num == ADC_UNIT_2, "Invalid unit num", ESP_ADC_CAL_VAL_NOT_SUPPORTED);
|
||||||
ADC_CALIB_CHECK(chars != NULL, "Invalid characteristic", ESP_ADC_CAL_VAL_NOT_SUPPORTED);
|
ADC_CALIB_CHECK(chars != NULL, "Invalid characteristic", ESP_ADC_CAL_VAL_NOT_SUPPORTED);
|
||||||
ADC_CALIB_CHECK(bit_width == ADC_WIDTH_BIT_12, "Invalid bit_width", ESP_ADC_CAL_VAL_NOT_SUPPORTED);
|
ADC_CALIB_CHECK(bit_width == ADC_WIDTH_BIT_12, "Invalid bit_width", ESP_ADC_CAL_VAL_NOT_SUPPORTED);
|
||||||
|
ADC_CALIB_CHECK(atten < 4, "Invalid attenuation", ESP_ADC_CAL_VAL_NOT_SUPPORTED);
|
||||||
|
|
||||||
int version_num = esp_efuse_rtc_calib_get_ver();
|
int version_num = esp_efuse_rtc_calib_get_ver();
|
||||||
ADC_CALIB_CHECK(version_num == 1, "No calibration efuse burnt", ESP_ADC_CAL_VAL_NOT_SUPPORTED);
|
ADC_CALIB_CHECK(version_num == 1, "No calibration efuse burnt", ESP_ADC_CAL_VAL_NOT_SUPPORTED);
|
||||||
@@ -117,10 +121,12 @@ esp_adc_cal_value_t esp_adc_cal_characterize(adc_unit_t adc_num,
|
|||||||
memset(chars, 0, sizeof(esp_adc_cal_characteristics_t));
|
memset(chars, 0, sizeof(esp_adc_cal_characteristics_t));
|
||||||
|
|
||||||
// make sure adc is calibrated.
|
// make sure adc is calibrated.
|
||||||
res = prepare_calib_data_for(version_num, adc_num, atten, &efuse_parsed_data);
|
ret = prepare_calib_data_for(version_num, adc_num, atten, &efuse_parsed_data);
|
||||||
assert(res);
|
if (ret != ESP_OK) {
|
||||||
res = calculate_characterization_coefficients(&efuse_parsed_data, chars);
|
abort();
|
||||||
assert(res);
|
}
|
||||||
|
|
||||||
|
calculate_characterization_coefficients(&efuse_parsed_data, chars);
|
||||||
ESP_LOGD(LOG_TAG, "adc%d (atten leven %d) calibration done: A:%d B:%d\n", adc_num, atten, chars->coeff_a, chars->coeff_b);
|
ESP_LOGD(LOG_TAG, "adc%d (atten leven %d) calibration done: A:%d B:%d\n", adc_num, atten, chars->coeff_a, chars->coeff_b);
|
||||||
|
|
||||||
// Initialize remaining fields
|
// Initialize remaining fields
|
||||||
|
Reference in New Issue
Block a user