1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-23 16:25:31 +03:00

Merge pull request #10226 from jflyper/bfdev-g4-fix-adc-deinit-bug

[G4][ADC] Batch call DeInit() for all used devices
This commit is contained in:
Michael Keller 2020-10-05 00:28:22 +13:00 committed by GitHub
commit db72f19894
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -205,11 +205,7 @@ void adcInitDevice(adcDevice_t *adcdev, int channelCount)
hadc->Instance = adcdev->ADCx; hadc->Instance = adcdev->ADCx;
if (HAL_ADC_DeInit(hadc) != HAL_OK) // DeInit is done in adcInit().
{
// ADC de-initialization Error
handleError();
}
hadc->Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV4; hadc->Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV4;
hadc->Init.Resolution = ADC_RESOLUTION_12B; hadc->Init.Resolution = ADC_RESOLUTION_12B;
@ -231,19 +227,6 @@ void adcInitDevice(adcDevice_t *adcdev, int channelCount)
handleError(); handleError();
} }
// Configure the ADC multi-mode
ADC_MultiModeTypeDef multimode = { 0 };
multimode.Mode = ADC_MODE_INDEPENDENT;
if (HAL_ADCEx_MultiModeConfigChannel(hadc, &multimode) != HAL_OK) {
handleError();
}
ADC_AnalogWDGConfTypeDef AnalogWDGConfig = { 0 };
AnalogWDGConfig.Channel = ADC_CHANNEL_1;
if (HAL_ADC_AnalogWDGConfig(hadc, &AnalogWDGConfig) != HAL_OK) {
handleError();
}
if (HAL_ADCEx_Calibration_Start(hadc, ADC_SINGLE_ENDED) != HAL_OK) { if (HAL_ADCEx_Calibration_Start(hadc, ADC_SINGLE_ENDED) != HAL_OK) {
handleError(); handleError();
} }
@ -358,6 +341,24 @@ void adcInit(const adcConfig_t *config)
} }
} }
// DeInit ADCx with inputs
// We have to batch call DeInit() for all devices as DeInit() initializes ADCx_COMMON register.
for (int dev = 0; dev < ADCDEV_COUNT; dev++) {
adcDevice_t *adc = &adcDevice[dev];
if (!(adc->ADCx && adc->channelBits)) {
continue;
}
adc->ADCHandle.Instance = adc->ADCx;
if (HAL_ADC_DeInit(&adc->ADCHandle) != HAL_OK) {
// ADC de-initialization Error
handleError();
}
}
// Configure ADCx with inputs // Configure ADCx with inputs
int dmaBufferIndex = 0; int dmaBufferIndex = 0;