git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/stable_20.3.x@14690 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
Giovanni Di Sirio 2021-08-20 09:51:27 +00:00
parent ddbe838af2
commit 3ec11659ad
2 changed files with 25 additions and 21 deletions

View File

@ -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)
;

View File

@ -82,6 +82,7 @@
- NEW: Improved boost settings for STM32G4.
- NEW: Files mcuconf.h for STM32F746, F767, L432, L452, L476, L496 received
the missing setting STM32_WSPI_QUADSPI1_PRESCALER_VALUE.
- FIX: Fixed STM32 ADCv3 differences in headers (bug #1182).
- FIX: Fixed DMAv1 compile fail on STM32L011 (bug #1181).
- FIX: Fixed error in STM32_ADCCLK_MIN for STM32F37x/hal_lld.h (bug #1180).
- FIX: Fixed direct calls to RT in STM32 RTCv2 and RTCv3 (bug #1179).