aboutsummaryrefslogtreecommitdiffstats
path: root/src/stm32/stm32h7_adc.c
diff options
context:
space:
mode:
authorAlex Maclean <monkeh@monkeh.net>2023-12-15 22:49:07 +0000
committerKevinOConnor <kevin@koconnor.net>2023-12-21 20:58:57 -0500
commit147492b25357e486bea35fbeb57405dcc47e53aa (patch)
treee14737af2648e07166075e2de727ea726e64f261 /src/stm32/stm32h7_adc.c
parent71ab6240f2dd8132ab29d9251690b3f8b6da0517 (diff)
downloadkutter-147492b25357e486bea35fbeb57405dcc47e53aa.tar.gz
kutter-147492b25357e486bea35fbeb57405dcc47e53aa.tar.xz
kutter-147492b25357e486bea35fbeb57405dcc47e53aa.zip
stm32: Fix ADC for STM32G4
At least STM32G4 requires four ADC clock cycles between hardware clearing ADCCAL and setting ADEN or the write disappears. Make a tenacious write attempt. Signed-off-by: Alex Maclean <monkeh@monkeh.net>
Diffstat (limited to 'src/stm32/stm32h7_adc.c')
-rw-r--r--src/stm32/stm32h7_adc.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/stm32/stm32h7_adc.c b/src/stm32/stm32h7_adc.c
index 57d4b15c..e9dc8f84 100644
--- a/src/stm32/stm32h7_adc.c
+++ b/src/stm32/stm32h7_adc.c
@@ -240,9 +240,10 @@ gpio_adc_setup(uint32_t pin)
// Enable ADC
adc->ISR = ADC_ISR_ADRDY;
adc->ISR; // Dummy read to make sure write is flushed
- adc->CR |= ADC_CR_ADEN;
+ while (!(adc->CR & ADC_CR_ADEN))
+ adc->CR |= ADC_CR_ADEN;
while (!(adc->ISR & ADC_ISR_ADRDY))
- ;
+ ;
// Set ADC clock cycles sample time for every channel
uint32_t av = (aticks | (aticks << 3) | (aticks << 6)