adc: replace assert with esp check

This commit is contained in:
Armando
2021-01-22 17:19:02 +08:00
committed by bot
parent 271c97149d
commit 5798c22a5c

View File

@@ -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