aboutsummaryrefslogtreecommitdiffstats
path: root/src/stm32f4/adc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/stm32f4/adc.c')
-rw-r--r--src/stm32f4/adc.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/stm32f4/adc.c b/src/stm32f4/adc.c
index 00eac8f0..07d03003 100644
--- a/src/stm32f4/adc.c
+++ b/src/stm32f4/adc.c
@@ -34,15 +34,17 @@ gpio_adc_setup(uint32_t pin)
}
// Enable the ADC
- enable_pclock(ADC1_BASE);
- uint32_t aticks = 3; // 56 adc cycles
- ADC1->SMPR1 = (aticks | (aticks << 3) | (aticks << 6) | (aticks << 9)
- | (aticks << 12) | (aticks << 15) | (aticks << 18)
- | (aticks << 21) | (aticks << 24));
- ADC1->SMPR2 = (aticks | (aticks << 3) | (aticks << 6) | (aticks << 9)
- | (aticks << 12) | (aticks << 15) | (aticks << 18)
- | (aticks << 21) | (aticks << 24) | (aticks << 27));
- ADC1->CR2 = ADC_CR2_ADON;
+ if (!is_enabled_pclock(ADC1_BASE)) {
+ enable_pclock(ADC1_BASE);
+ uint32_t aticks = 3; // 56 adc cycles
+ ADC1->SMPR1 = (aticks | (aticks << 3) | (aticks << 6) | (aticks << 9)
+ | (aticks << 12) | (aticks << 15) | (aticks << 18)
+ | (aticks << 21) | (aticks << 24));
+ ADC1->SMPR2 = (aticks | (aticks << 3) | (aticks << 6) | (aticks << 9)
+ | (aticks << 12) | (aticks << 15) | (aticks << 18)
+ | (aticks << 21) | (aticks << 24) | (aticks << 27));
+ ADC1->CR2 = ADC_CR2_ADON;
+ }
gpio_peripheral(pin, GPIO_ANALOG, 0);