From 3cc94a962116a7529d8555bbf774cc5e31f9f1a7 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sat, 13 Oct 2012 09:24:17 +0000 Subject: [PATCH] Fixed bug 3575297. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@4750 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/hal/platforms/STM32F2xx/adc_lld.c | 6 ++++-- os/hal/platforms/STM32F4xx/adc_lld.c | 6 ++++-- readme.txt | 2 ++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/os/hal/platforms/STM32F2xx/adc_lld.c b/os/hal/platforms/STM32F2xx/adc_lld.c index fd91ba76a..6d889d4c5 100644 --- a/os/hal/platforms/STM32F2xx/adc_lld.c +++ b/os/hal/platforms/STM32F2xx/adc_lld.c @@ -174,8 +174,6 @@ CH_IRQ_HANDLER(ADC1_2_3_IRQHandler) { */ void adc_lld_init(void) { - ADC->CCR = STM32_ADC_ADCPRE; - #if STM32_ADC_USE_ADC1 /* Driver initialization.*/ adcObjectInit(&ADCD1); @@ -270,6 +268,10 @@ void adc_lld_start(ADCDriver *adcp) { } #endif /* STM32_ADC_USE_ADC3 */ + /* This is a common register but apparently it requires that at least one + of the ADCs is clocked in order to allow writing, see bug 3575297.*/ + ADC->CCR = STM32_ADC_ADCPRE << 16; + /* ADC initial setup, starting the analog part here in order to reduce the latency when starting a conversion.*/ adcp->adc->CR1 = 0; diff --git a/os/hal/platforms/STM32F4xx/adc_lld.c b/os/hal/platforms/STM32F4xx/adc_lld.c index bf0788dea..9f447f9a6 100644 --- a/os/hal/platforms/STM32F4xx/adc_lld.c +++ b/os/hal/platforms/STM32F4xx/adc_lld.c @@ -174,8 +174,6 @@ CH_IRQ_HANDLER(ADC1_2_3_IRQHandler) { */ void adc_lld_init(void) { - ADC->CCR = STM32_ADC_ADCPRE; - #if STM32_ADC_USE_ADC1 /* Driver initialization.*/ adcObjectInit(&ADCD1); @@ -270,6 +268,10 @@ void adc_lld_start(ADCDriver *adcp) { } #endif /* STM32_ADC_USE_ADC3 */ + /* This is a common register but apparently it requires that at least one + of the ADCs is clocked in order to allow writing, see bug 3575297.*/ + ADC->CCR = STM32_ADC_ADCPRE << 16; + /* ADC initial setup, starting the analog part here in order to reduce the latency when starting a conversion.*/ adcp->adc->CR1 = 0; diff --git a/readme.txt b/readme.txt index 37aaa7d02..f1a7289da 100644 --- a/readme.txt +++ b/readme.txt @@ -83,6 +83,8 @@ ***************************************************************************** *** 2.5.1 *** +- FIX: Fixed STM32F4 ADC prescaler incorrectly initialized (bug 3575297) + (backported to 2.4.3). - FIX: Fixed RCC_APB2ENR_IOPEEN undeclared on STM32F10X_LD_VL devices (bug 3575098)(backported to 2.4.3). - FIX: Fixed misplaced declarations in lwip_bindings sys_arch.c (bug 3571053)