diff --git a/demos/STM32/NIL-STM32H755ZI-NUCLEO144/cfg/mcuconf.h b/demos/STM32/NIL-STM32H755ZI-NUCLEO144/cfg/mcuconf.h index 4f7064081..ac77a100d 100644 --- a/demos/STM32/NIL-STM32H755ZI-NUCLEO144/cfg/mcuconf.h +++ b/demos/STM32/NIL-STM32H755ZI-NUCLEO144/cfg/mcuconf.h @@ -224,7 +224,7 @@ * ADC driver system settings. */ #define STM32_ADC_DUAL_MODE FALSE -#define STM32_ADC_COMPACT_SAMPLES FALSE +#define STM32_ADC_SAMPLES_SIZE 16 #define STM32_ADC_USE_ADC12 FALSE #define STM32_ADC_USE_ADC3 FALSE #define STM32_ADC_ADC12_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/demos/STM32/RT-STM32H743ZI_REV_XY-NUCLEO144/cfg/mcuconf.h b/demos/STM32/RT-STM32H743ZI_REV_XY-NUCLEO144/cfg/mcuconf.h index e32c25e4d..a43cbf6d7 100644 --- a/demos/STM32/RT-STM32H743ZI_REV_XY-NUCLEO144/cfg/mcuconf.h +++ b/demos/STM32/RT-STM32H743ZI_REV_XY-NUCLEO144/cfg/mcuconf.h @@ -224,7 +224,7 @@ * ADC driver system settings. */ #define STM32_ADC_DUAL_MODE FALSE -#define STM32_ADC_COMPACT_SAMPLES FALSE +#define STM32_ADC_SAMPLES_SIZE 16 #define STM32_ADC_USE_ADC12 FALSE #define STM32_ADC_USE_ADC3 FALSE #define STM32_ADC_ADC12_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/demos/STM32/RT-STM32H750XB-DISCOVERY/cfg/mcuconf.h b/demos/STM32/RT-STM32H750XB-DISCOVERY/cfg/mcuconf.h index 8eb7e71b8..31aae3f5e 100644 --- a/demos/STM32/RT-STM32H750XB-DISCOVERY/cfg/mcuconf.h +++ b/demos/STM32/RT-STM32H750XB-DISCOVERY/cfg/mcuconf.h @@ -224,7 +224,7 @@ * ADC driver system settings. */ #define STM32_ADC_DUAL_MODE FALSE -#define STM32_ADC_COMPACT_SAMPLES FALSE +#define STM32_ADC_SAMPLES_SIZE 16 #define STM32_ADC_USE_ADC12 FALSE #define STM32_ADC_USE_ADC3 FALSE #define STM32_ADC_ADC12_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/demos/STM32/RT-STM32H755ZI-NUCLEO144/cfg/mcuconf.h b/demos/STM32/RT-STM32H755ZI-NUCLEO144/cfg/mcuconf.h index 21fc7770a..afa70db24 100644 --- a/demos/STM32/RT-STM32H755ZI-NUCLEO144/cfg/mcuconf.h +++ b/demos/STM32/RT-STM32H755ZI-NUCLEO144/cfg/mcuconf.h @@ -224,7 +224,7 @@ * ADC driver system settings. */ #define STM32_ADC_DUAL_MODE FALSE -#define STM32_ADC_COMPACT_SAMPLES FALSE +#define STM32_ADC_SAMPLES_SIZE 16 #define STM32_ADC_USE_ADC12 FALSE #define STM32_ADC_USE_ADC3 FALSE #define STM32_ADC_ADC12_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/os/hal/ports/STM32/LLD/ADCv4/hal_adc_lld.c b/os/hal/ports/STM32/LLD/ADCv4/hal_adc_lld.c index 3810cf393..689db85e5 100644 --- a/os/hal/ports/STM32/LLD/ADCv4/hal_adc_lld.c +++ b/os/hal/ports/STM32/LLD/ADCv4/hal_adc_lld.c @@ -31,34 +31,37 @@ /*===========================================================================*/ #if STM32_ADC_DUAL_MODE == TRUE -#define ADC12_CCR_DUAL 0b00110 // TODO use definitions -#if STM32_ADC_COMPACT_SAMPLES == TRUE +#define ADC12_CCR_DUAL ADC_CCR_DUAL_REG_SIMULT +#if STM32_ADC_SAMPLES_SIZE == 8 /* Compact type dual mode, 2x8-bit.*/ #define ADC12_DMA_SIZE (STM32_DMA_CR_MSIZE_HWORD | STM32_DMA_CR_PSIZE_HWORD) #define ADC3_BDMA_SIZE (STM32_BDMA_CR_MSIZE_BYTE | STM32_BDMA_CR_PSIZE_BYTE) #define ADC_DMA_DAMDF ADC_CCR_DAMDF_BYTE -#else /* STM32_ADC_COMPACT_SAMPLES == FALSE */ +#else /* STM32_ADC_SAMPLES_SIZE == 16 */ /* Large type dual mode, 2x16bit.*/ #define ADC12_DMA_SIZE (STM32_DMA_CR_MSIZE_WORD | STM32_DMA_CR_PSIZE_WORD) #define ADC3_BDMA_SIZE (STM32_BDMA_CR_MSIZE_HWORD | STM32_BDMA_CR_PSIZE_HWORD) #define ADC_DMA_DAMDF ADC_CCR_DAMDF_HWORD -#endif /* !STM32_ADC_COMPACT_SAMPLES */ +#endif /* STM32_ADC_SAMPLES_SIZE == 8 */ #else /* STM32_ADC_DUAL_MODE == FALSE */ -#define ADC12_CCR_DUAL 0b00000 // TODO use definitions -#if STM32_ADC_COMPACT_SAMPLES +#define ADC12_CCR_DUAL ADC_CCR_DUAL_INDEPENDENT +#if STM32_ADC_SAMPLES_SIZE == 8 /* Compact type single mode, 8-bit.*/ #define ADC12_DMA_SIZE (STM32_DMA_CR_MSIZE_BYTE | STM32_DMA_CR_PSIZE_BYTE) #define ADC3_BDMA_SIZE (STM32_BDMA_CR_MSIZE_BYTE | STM32_BDMA_CR_PSIZE_BYTE) #define ADC_DMA_DAMDF ADC_CCR_DAMDF_DISABLED - -#else /* STM32_ADC_COMPACT_SAMPLES == FALSE */ +#elif STM32_ADC_SAMPLES_SIZE == 32 +#define ADC12_DMA_SIZE (STM32_DMA_CR_MSIZE_WORD | STM32_DMA_CR_PSIZE_WORD) +#define ADC3_BDMA_SIZE (STM32_BDMA_CR_MSIZE_WORD | STM32_BDMA_CR_PSIZE_WORD) +#define ADC_DMA_DAMDF ADC_CCR_DAMDF_DISABLED +#else /* STM32_ADC_SAMPLES_SIZE == 16 */ /* Large type single mode, 16-bit.*/ #define ADC12_DMA_SIZE (STM32_DMA_CR_MSIZE_HWORD | STM32_DMA_CR_PSIZE_HWORD) #define ADC3_BDMA_SIZE (STM32_BDMA_CR_MSIZE_HWORD | STM32_BDMA_CR_PSIZE_HWORD) #define ADC_DMA_DAMDF ADC_CCR_DAMDF_DISABLED -#endif /* STM32_ADC_COMPACT_SAMPLES == FALSE */ +#endif /* STM32_ADC_SAMPLES_SIZE == 8 */ #endif /* STM32_ADC_DUAL_MODE == FALSE */ /*===========================================================================*/ @@ -140,7 +143,7 @@ static void adc_lld_analog_on(ADCDriver *adcp) { } /** - * @brief Disables the ADC analog circuit. + * @brief Disables the ADC analog circuit. * * @param[in] adcp pointer to the @p ADCDriver object */ diff --git a/os/hal/ports/STM32/LLD/ADCv4/hal_adc_lld.h b/os/hal/ports/STM32/LLD/ADCv4/hal_adc_lld.h index d23c95045..433f5fbf2 100644 --- a/os/hal/ports/STM32/LLD/ADCv4/hal_adc_lld.h +++ b/os/hal/ports/STM32/LLD/ADCv4/hal_adc_lld.h @@ -197,12 +197,14 @@ #endif /** - * @brief Makes the ADC samples type an 8bits one. - * @note 10, 12, 14 and 16 bits sampling mode must not be used when this - * option is enabled. + * @brief Specifies the ADC samples width. + * @note Must be 8, 16 or 32. + * @note 10, 12, 14 and 16 bits sampling modes must not be used when + * this option is set to 8. + * @note 32 is useful when oversampling is activated. */ -#if !defined(STM32_ADC_COMPACT_SAMPLES) || defined(__DOXYGEN__) -#define STM32_ADC_COMPACT_SAMPLES FALSE +#if !defined(STM32_ADC_SAMPLES_SIZE) || defined(__DOXYGEN__) +#define STM32_ADC_SAMPLES_SIZE 16 #endif /** @@ -372,6 +374,16 @@ #error "Invalid IRQ priority assigned to ADC3" #endif +#if ((STM32_ADC_SAMPLES_SIZE != 8) && \ + (STM32_ADC_SAMPLES_SIZE != 16) && \ + (STM32_ADC_SAMPLES_SIZE != 32)) +#error "STM32_ADC_SAMPLES_SIZE must be 8, 16 or 32" +#endif + +#if (STM32_ADC_SAMPLES_SIZE != 32) && STM32_ADC_DUAL_MODE +#error "STM32_ADC_SAMPLES_SIZE = 32 not compatible with STM32_ADC_DUAL_MODE" +#endif + #if !defined(STM32_ENFORCE_H7_REV_XY) /* ADC clock source checks.*/ #if (STM32_D1HPRE == STM32_D1HPRE_DIV1) @@ -505,10 +517,12 @@ /** * @brief ADC sample data type. */ -#if !STM32_ADC_COMPACT_SAMPLES || defined(__DOXYGEN__) +#if (STM32_ADC_SAMPLES_SIZE == 16) || defined(__DOXYGEN__) typedef uint16_t adcsample_t; -#else +#elif (STM32_ADC_SAMPLES_SIZE == 8) typedef uint8_t adcsample_t; +#elif (STM32_ADC_SAMPLES_SIZE == 32) +typedef uint32_t adcsample_t; #endif /** @@ -716,6 +730,15 @@ typedef union { #define ADC_AWD23_MASK(n) (1U << (n)) /**< @brief AWD2/3 channels mask*/ /** @} */ +/** + * @name Oversampling settings helper macros + * @{ + */ +#define ADC_CFGR2_OVSS_N(n) ((n) << 5U)/**< @brief ovsr right shift */ +#define ADC_CFGR2_OVSR_N(n) ((n) << 16U)/**< @brief oversampling ratio */ +#define ADC_CFGR2_LSHIFT_N(n) ((n) << 28U)/**< @brief ovsr left shift */ + +/** @} */ /*===========================================================================*/ /* External declarations. */ diff --git a/testhal/STM32/multi/ADC/cfg/stm32h743zi_nucleo144/mcuconf.h b/testhal/STM32/multi/ADC/cfg/stm32h743zi_nucleo144/mcuconf.h index 1949934cb..80c66c9b8 100644 --- a/testhal/STM32/multi/ADC/cfg/stm32h743zi_nucleo144/mcuconf.h +++ b/testhal/STM32/multi/ADC/cfg/stm32h743zi_nucleo144/mcuconf.h @@ -224,7 +224,7 @@ * ADC driver system settings. */ #define STM32_ADC_DUAL_MODE FALSE -#define STM32_ADC_COMPACT_SAMPLES FALSE +#define STM32_ADC_SAMPLES_SIZE 16 #define STM32_ADC_USE_ADC12 TRUE #define STM32_ADC_USE_ADC3 TRUE #define STM32_ADC_ADC12_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/testhal/STM32/multi/DAC/cfg/stm32h743_nucleo144/mcuconf.h b/testhal/STM32/multi/DAC/cfg/stm32h743_nucleo144/mcuconf.h index 423dbb597..82d6689c0 100644 --- a/testhal/STM32/multi/DAC/cfg/stm32h743_nucleo144/mcuconf.h +++ b/testhal/STM32/multi/DAC/cfg/stm32h743_nucleo144/mcuconf.h @@ -224,7 +224,7 @@ * ADC driver system settings. */ #define STM32_ADC_DUAL_MODE FALSE -#define STM32_ADC_COMPACT_SAMPLES FALSE +#define STM32_ADC_SAMPLES_SIZE 16 #define STM32_ADC_USE_ADC12 FALSE #define STM32_ADC_USE_ADC3 FALSE #define STM32_ADC_ADC12_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/testhal/STM32/multi/SPI/cfg/stm32h743_nucleo144/mcuconf.h b/testhal/STM32/multi/SPI/cfg/stm32h743_nucleo144/mcuconf.h index 85f70ff66..e39568f05 100644 --- a/testhal/STM32/multi/SPI/cfg/stm32h743_nucleo144/mcuconf.h +++ b/testhal/STM32/multi/SPI/cfg/stm32h743_nucleo144/mcuconf.h @@ -224,7 +224,7 @@ * ADC driver system settings. */ #define STM32_ADC_DUAL_MODE FALSE -#define STM32_ADC_COMPACT_SAMPLES FALSE +#define STM32_ADC_SAMPLES_SIZE 16 #define STM32_ADC_USE_ADC12 TRUE #define STM32_ADC_USE_ADC3 FALSE #define STM32_ADC_ADC12_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/testhal/STM32/multi/SPI/cfg/stm32h755_nucleo144/mcuconf.h b/testhal/STM32/multi/SPI/cfg/stm32h755_nucleo144/mcuconf.h index 4064e4467..713dae546 100644 --- a/testhal/STM32/multi/SPI/cfg/stm32h755_nucleo144/mcuconf.h +++ b/testhal/STM32/multi/SPI/cfg/stm32h755_nucleo144/mcuconf.h @@ -224,7 +224,7 @@ * ADC driver system settings. */ #define STM32_ADC_DUAL_MODE FALSE -#define STM32_ADC_COMPACT_SAMPLES FALSE +#define STM32_ADC_SAMPLES_SIZE 16 #define STM32_ADC_USE_ADC12 FALSE #define STM32_ADC_USE_ADC3 FALSE #define STM32_ADC_ADC12_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/testhal/STM32/multi/USB_CDC/cfg/stm32h743_nucleo144/mcuconf.h b/testhal/STM32/multi/USB_CDC/cfg/stm32h743_nucleo144/mcuconf.h index a23a8429f..7c85d0d64 100644 --- a/testhal/STM32/multi/USB_CDC/cfg/stm32h743_nucleo144/mcuconf.h +++ b/testhal/STM32/multi/USB_CDC/cfg/stm32h743_nucleo144/mcuconf.h @@ -224,7 +224,7 @@ * ADC driver system settings. */ #define STM32_ADC_DUAL_MODE FALSE -#define STM32_ADC_COMPACT_SAMPLES FALSE +#define STM32_ADC_SAMPLES_SIZE 16 #define STM32_ADC_USE_ADC12 TRUE #define STM32_ADC_USE_ADC3 FALSE #define STM32_ADC_ADC12_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/tools/ftl/processors/conf/mcuconf_stm32h743xx/mcuconf.h.ftl b/tools/ftl/processors/conf/mcuconf_stm32h743xx/mcuconf.h.ftl index 19bcf71e5..af4874ebf 100644 --- a/tools/ftl/processors/conf/mcuconf_stm32h743xx/mcuconf.h.ftl +++ b/tools/ftl/processors/conf/mcuconf_stm32h743xx/mcuconf.h.ftl @@ -235,7 +235,7 @@ * ADC driver system settings. */ #define STM32_ADC_DUAL_MODE ${doc.STM32_ADC_DUAL_MODE!"FALSE"} -#define STM32_ADC_COMPACT_SAMPLES ${doc.STM32_ADC_COMPACT_SAMPLES!"FALSE"} +#define STM32_ADC_SAMPLES_SIZE ${doc.STM32_ADC_SAMPLES_SIZE!"16"} #define STM32_ADC_USE_ADC12 ${doc.STM32_ADC_USE_ADC12!"TRUE"} #define STM32_ADC_USE_ADC3 ${doc.STM32_ADC_USE_ADC3!"FALSE"} #define STM32_ADC_ADC12_DMA_STREAM ${doc.STM32_ADC_ADC12_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"}