stm32g0: adc: only clear desired flags in ADC_ISR

Verified against RM0444rev5.

Fixes: https://github.com/libopencm3/libopencm3/issues/1443

Signed-off-by: Karl Palsson <karlp@tweak.net.au>
This commit is contained in:
Karl Palsson
2022-10-27 21:56:50 +00:00
parent 5db7e87e6e
commit 0b414ff649

View File

@@ -160,24 +160,24 @@ void adc_set_regular_sequence(uint32_t adc, uint8_t length, uint8_t channel[])
/* Setup scandir, if needed, waiting for configuration be applied.. */
if (stepdn && (!(ADC_CFGR1(adc) & ADC_CFGR1_SCANDIR))) {
ADC_ISR(adc) &= ~ADC_ISR_CCRDY;
ADC_ISR(adc) = ADC_ISR_CCRDY;
ADC_CFGR1(adc) |= ADC_CFGR1_SCANDIR;
while (!(ADC_ISR(adc) & ADC_ISR_CCRDY));
} else if (stepup && ((ADC_CFGR1(adc) & ADC_CFGR1_SCANDIR))) {
ADC_ISR(adc) &= ~ADC_ISR_CCRDY;
ADC_ISR(adc) = ADC_ISR_CCRDY;
ADC_CFGR1(adc) &= ~ADC_CFGR1_SCANDIR;
while (!(ADC_ISR(adc) & ADC_ISR_CCRDY));
}
/* Setup ADC in simple, not configurable, mode, if needed. */
if ((ADC_CFGR1(adc) & ADC_CFGR1_CHSELRMOD)) {
ADC_ISR(adc) &= ~ADC_ISR_CCRDY;
ADC_ISR(adc) = ADC_ISR_CCRDY;
ADC_CFGR1(adc) &= ~ADC_CFGR1_CHSELRMOD;
while (!(ADC_ISR(adc) & ADC_ISR_CCRDY));
}
if (ADC_CHSELR(adc) != reg32) {
ADC_ISR(adc) &= ~ADC_ISR_CCRDY;
ADC_ISR(adc) = ADC_ISR_CCRDY;
ADC_CHSELR(adc) = reg32;
while (!(ADC_ISR(adc) & ADC_ISR_CCRDY));
}