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:
@@ -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.. */
|
/* Setup scandir, if needed, waiting for configuration be applied.. */
|
||||||
if (stepdn && (!(ADC_CFGR1(adc) & ADC_CFGR1_SCANDIR))) {
|
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;
|
ADC_CFGR1(adc) |= ADC_CFGR1_SCANDIR;
|
||||||
while (!(ADC_ISR(adc) & ADC_ISR_CCRDY));
|
while (!(ADC_ISR(adc) & ADC_ISR_CCRDY));
|
||||||
} else if (stepup && ((ADC_CFGR1(adc) & ADC_CFGR1_SCANDIR))) {
|
} 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;
|
ADC_CFGR1(adc) &= ~ADC_CFGR1_SCANDIR;
|
||||||
while (!(ADC_ISR(adc) & ADC_ISR_CCRDY));
|
while (!(ADC_ISR(adc) & ADC_ISR_CCRDY));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Setup ADC in simple, not configurable, mode, if needed. */
|
/* Setup ADC in simple, not configurable, mode, if needed. */
|
||||||
if ((ADC_CFGR1(adc) & ADC_CFGR1_CHSELRMOD)) {
|
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;
|
ADC_CFGR1(adc) &= ~ADC_CFGR1_CHSELRMOD;
|
||||||
while (!(ADC_ISR(adc) & ADC_ISR_CCRDY));
|
while (!(ADC_ISR(adc) & ADC_ISR_CCRDY));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ADC_CHSELR(adc) != reg32) {
|
if (ADC_CHSELR(adc) != reg32) {
|
||||||
ADC_ISR(adc) &= ~ADC_ISR_CCRDY;
|
ADC_ISR(adc) = ADC_ISR_CCRDY;
|
||||||
ADC_CHSELR(adc) = reg32;
|
ADC_CHSELR(adc) = reg32;
|
||||||
while (!(ADC_ISR(adc) & ADC_ISR_CCRDY));
|
while (!(ADC_ISR(adc) & ADC_ISR_CCRDY));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user