From 55252838abc44408a6d21962d3da20c0a044202e Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Fri, 20 Aug 2021 09:51:17 +0000 Subject: [PATCH] Fixed bug #1182. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@14689 27425a3e-05d8-49a3-a47f-9c15f0e5edd8 --- os/hal/ports/STM32/LLD/ADCv3/hal_adc_lld.c | 45 ++++++++++++---------- readme.txt | 2 + 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/os/hal/ports/STM32/LLD/ADCv3/hal_adc_lld.c b/os/hal/ports/STM32/LLD/ADCv3/hal_adc_lld.c index 7b2747cc5..3108f3e3b 100644 --- a/os/hal/ports/STM32/LLD/ADCv3/hal_adc_lld.c +++ b/os/hal/ports/STM32/LLD/ADCv3/hal_adc_lld.c @@ -76,18 +76,21 @@ #define ADC_IER_AWD1IE ADC_IER_AWD1 #endif -#if !defined(ADC_CR_ADVREGEN) -#define ADC_CR_ADVREGEN ADC_CR_ADVREGEN_0 -#endif - -#if !defined(ADC_CR_DEEPPWD) -#define ADC_CR_DEEPPWD ADC_CR_ADVREGEN_1 -#endif - #if !defined(ADC_ISR_ADRDY) #define ADC_ISR_ADRDY ADC_ISR_ADRD #endif +/* The following bits are too different in the various headers, just + redefining those here. Values can be overridden by placing definitions + in hal_lld.h.*/ +#if !defined(STM32_ADC_CR_ADVREGEN) +#define STM32_ADC_CR_ADVREGEN (1U << 28) +#endif + +#if !defined(STM32_ADC_CR_DEEPPWD) +#define STM32_ADC_CR_DEEPPWD (1U << 29) +#endif + /*===========================================================================*/ /* Driver exported variables. */ /*===========================================================================*/ @@ -134,9 +137,9 @@ static uint32_t clkmask; static void adc_lld_vreg_on(ADCDriver *adcp) { adcp->adcm->CR = 0; /* See RM.*/ - adcp->adcm->CR = ADC_CR_ADVREGEN; + adcp->adcm->CR = STM32_ADC_CR_ADVREGEN; #if STM32_ADC_DUAL_MODE - adcp->adcs->CR = ADC_CR_ADVREGEN; + adcp->adcs->CR = STM32_ADC_CR_ADVREGEN; #endif osalSysPolledDelayX(OSAL_US2RTC(STM32_HCLK, 20)); } @@ -149,10 +152,10 @@ static void adc_lld_vreg_on(ADCDriver *adcp) { static void adc_lld_vreg_off(ADCDriver *adcp) { adcp->adcm->CR = 0; /* See RM.*/ - adcp->adcm->CR = ADC_CR_DEEPPWD; + adcp->adcm->CR = STM32_ADC_CR_DEEPPWD; #if STM32_ADC_DUAL_MODE adcp->adcs->CR = 0; - adcp->adcs->CR = ADC_CR_DEEPPWD; + adcp->adcs->CR = STM32_ADC_CR_DEEPPWD; #endif } @@ -163,19 +166,19 @@ static void adc_lld_vreg_off(ADCDriver *adcp) { */ static void adc_lld_calibrate(ADCDriver *adcp) { - osalDbgAssert(adcp->adcm->CR == ADC_CR_ADVREGEN, "invalid register state"); + osalDbgAssert(adcp->adcm->CR == STM32_ADC_CR_ADVREGEN, "invalid register state"); /* Differential calibration for master ADC.*/ - adcp->adcm->CR = ADC_CR_ADVREGEN | ADC_CR_ADCALDIF; - adcp->adcm->CR = ADC_CR_ADVREGEN | ADC_CR_ADCALDIF | ADC_CR_ADCAL; + adcp->adcm->CR = STM32_ADC_CR_ADVREGEN | ADC_CR_ADCALDIF; + adcp->adcm->CR = STM32_ADC_CR_ADVREGEN | ADC_CR_ADCALDIF | ADC_CR_ADCAL; while ((adcp->adcm->CR & ADC_CR_ADCAL) != 0) ; osalSysPolledDelayX(OSAL_US2RTC(STM32_HCLK, 20)); /* Single-ended calibration for master ADC.*/ - adcp->adcm->CR = ADC_CR_ADVREGEN; - adcp->adcm->CR = ADC_CR_ADVREGEN | ADC_CR_ADCAL; + adcp->adcm->CR = STM32_ADC_CR_ADVREGEN; + adcp->adcm->CR = STM32_ADC_CR_ADVREGEN | ADC_CR_ADCAL; while ((adcp->adcm->CR & ADC_CR_ADCAL) != 0) ; @@ -185,16 +188,16 @@ static void adc_lld_calibrate(ADCDriver *adcp) { osalDbgAssert(adcp->adcs->CR == ADC_CR_ADVREGEN, "invalid register state"); /* Differential calibration for slave ADC.*/ - adcp->adcs->CR = ADC_CR_ADVREGEN | ADC_CR_ADCALDIF; - adcp->adcs->CR = ADC_CR_ADVREGEN | ADC_CR_ADCALDIF | ADC_CR_ADCAL; + adcp->adcs->CR = STM32_ADC_CR_ADVREGEN | ADC_CR_ADCALDIF; + adcp->adcs->CR = STM32_ADC_CR_ADVREGEN | ADC_CR_ADCALDIF | ADC_CR_ADCAL; while ((adcp->adcs->CR & ADC_CR_ADCAL) != 0) ; osalSysPolledDelayX(OSAL_US2RTC(STM32_HCLK, 20)); /* Single-ended calibration for slave ADC.*/ - adcp->adcs->CR = ADC_CR_ADVREGEN; - adcp->adcs->CR = ADC_CR_ADVREGEN | ADC_CR_ADCAL; + adcp->adcs->CR = STM32_ADC_CR_ADVREGEN; + adcp->adcs->CR = STM32_ADC_CR_ADVREGEN | ADC_CR_ADCAL; while ((adcp->adcs->CR & ADC_CR_ADCAL) != 0) ; diff --git a/readme.txt b/readme.txt index bf11d85cf..9eaaa1214 100644 --- a/readme.txt +++ b/readme.txt @@ -77,6 +77,8 @@ - NEW: EFL driver and demo for STM32F3xx. - NEW: New unit test subsystem under /os/test. Now it is officially ChibiOS/TEST. +- FIX: Fixed STM32 ADCv3 differences in headers (bug #1182) + (TBP)(backported to 20.3.4). - FIX: Fixed DMAv1 compile fail on STM32L011 (bug #1181) (TBP)(backported to 20.3.4). - FIX: Fixed error in STM32_ADCCLK_MIN for STM32F37x/hal_lld.h (bug #1180)