From f1d50d24be2aa4ad435f63dcd91e57c3646ed183 Mon Sep 17 00:00:00 2001 From: Karl Palsson Date: Thu, 5 Nov 2015 23:24:02 +0000 Subject: [PATCH] stm32: adc-v2: pull up more common functionality More easy bit on/off settings. Every piece that gets pulled up here becomes automatically available for l0/l4 when they land --- .../libopencm3/stm32/common/adc_common_v2.h | 5 ++ include/libopencm3/stm32/f0/adc.h | 5 -- include/libopencm3/stm32/f3/adc.h | 5 -- lib/stm32/common/adc_common_v2.c | 50 ++++++++++++++ lib/stm32/f0/adc.c | 60 ---------------- lib/stm32/f3/adc.c | 69 ------------------- 6 files changed, 55 insertions(+), 139 deletions(-) diff --git a/include/libopencm3/stm32/common/adc_common_v2.h b/include/libopencm3/stm32/common/adc_common_v2.h index 4c3a9cb7..41930b2e 100644 --- a/include/libopencm3/stm32/common/adc_common_v2.h +++ b/include/libopencm3/stm32/common/adc_common_v2.h @@ -185,6 +185,11 @@ void adc_enable_temperature_sensor(void); void adc_disable_temperature_sensor(void); void adc_enable_vrefint(void); void adc_disable_vrefint(void); +void adc_set_resolution(uint32_t adc, uint16_t resolution); +void adc_set_left_aligned(uint32_t adc); +void adc_set_right_aligned(uint32_t adc); +void adc_enable_dma(uint32_t adc); +void adc_disable_dma(uint32_t adc); END_DECLS diff --git a/include/libopencm3/stm32/f0/adc.h b/include/libopencm3/stm32/f0/adc.h index b1c43a0b..123376de 100644 --- a/include/libopencm3/stm32/f0/adc.h +++ b/include/libopencm3/stm32/f0/adc.h @@ -190,11 +190,6 @@ void adc_disable_eoc_interrupt(uint32_t adc); void adc_set_clk_source(uint32_t adc, uint32_t source); void adc_set_regular_sequence(uint32_t adc, uint8_t length, uint8_t channel[]); void adc_set_sample_time_on_all_channels(uint32_t adc, uint8_t time); -void adc_set_resolution(uint32_t adc, uint16_t resolution); -void adc_set_left_aligned(uint32_t adc); -void adc_set_right_aligned(uint32_t adc); -void adc_enable_dma(uint32_t adc); -void adc_disable_dma(uint32_t adc); void adc_enable_vbat_sensor(void); void adc_disable_vbat_sensor(void); void adc_calibrate_start(uint32_t adc); diff --git a/include/libopencm3/stm32/f3/adc.h b/include/libopencm3/stm32/f3/adc.h index 9e363d87..cc9797ab 100644 --- a/include/libopencm3/stm32/f3/adc.h +++ b/include/libopencm3/stm32/f3/adc.h @@ -603,10 +603,6 @@ void adc_start_conversion_regular(uint32_t adc); void adc_start_conversion_injected(uint32_t adc); void adc_disable_external_trigger_regular(uint32_t adc); void adc_disable_external_trigger_injected(uint32_t adc); -void adc_set_left_aligned(uint32_t adc); -void adc_set_right_aligned(uint32_t adc); -void adc_enable_dma(uint32_t adc); -void adc_disable_dma(uint32_t adc); void adc_set_sample_time(uint32_t adc, uint8_t channel, uint8_t time); void adc_set_sample_time_on_all_channels(uint32_t adc, uint8_t time); void adc_set_watchdog_high_threshold(uint32_t adc, uint8_t threshold); @@ -627,7 +623,6 @@ void adc_enable_external_trigger_regular(uint32_t adc, uint32_t trigger, uint32_t polarity); void adc_enable_external_trigger_injected(uint32_t adc, uint32_t trigger, uint32_t polarity); -void adc_set_resolution(uint32_t adc, uint16_t resolution); void adc_enable_overrun_interrupt(uint32_t adc); void adc_disable_overrun_interrupt(uint32_t adc); bool adc_get_overrun_flag(uint32_t adc); diff --git a/lib/stm32/common/adc_common_v2.c b/lib/stm32/common/adc_common_v2.c index cae5dd01..3c84e0a4 100644 --- a/lib/stm32/common/adc_common_v2.c +++ b/lib/stm32/common/adc_common_v2.c @@ -138,6 +138,56 @@ void adc_set_single_conversion_mode(uint32_t adc) ADC_CFGR1(adc) &= ~ADC_CFGR1_CONT; } +/** @brief ADC Set Resolution + * + * ADC Resolution can be reduced from 12 bits to 10, 8 or 6 bits for a + * corresponding reduction in conversion time. + * + * @param[in] adc Unsigned int32. ADC base address (@ref adc_reg_base) + * @param[in] resolution Unsigned int16. Resolution value (@ref adc_api_res) + */ +void adc_set_resolution(uint32_t adc, uint16_t resolution) +{ + ADC_CFGR1(adc) = (ADC_CFGR1(adc) & ~ADC_CFGR1_RES_MASK) | resolution; +} + +/** @brief ADC Set the Data as Left Aligned + * + * @param[in] adc Unsigned int32. ADC base address (@ref adc_reg_base) + */ +void adc_set_left_aligned(uint32_t adc) +{ + ADC_CFGR1(adc) |= ADC_CFGR1_ALIGN; +} + +/** @brief ADC Set the Data as Right Aligned + * + * @param[in] adc Unsigned int32. ADC base address (@ref adc_reg_base) + */ +void adc_set_right_aligned(uint32_t adc) +{ + ADC_CFGR1(adc) &= ~ADC_CFGR1_ALIGN; +} + +/** @brief ADC Enable DMA Transfers + * + * @param[in] adc Unsigned int32. ADC base address (@ref adc_reg_base) + */ +void adc_enable_dma(uint32_t adc) +{ + ADC_CFGR1(adc) |= ADC_CFGR1_DMAEN; +} + +/** @brief ADC Disable DMA Transfers + * + * @param[in] adc Unsigned int32. ADC base address (@ref adc_reg_base) + */ +void adc_disable_dma(uint32_t adc) +{ + ADC_CFGR1(adc) &= ~ADC_CFGR1_DMAEN; +} + + /** * Enable the temperature sensor (only) * The channel this is available on is unfortunately not diff --git a/lib/stm32/f0/adc.c b/lib/stm32/f0/adc.c index a34fe25b..7b247a04 100644 --- a/lib/stm32/f0/adc.c +++ b/lib/stm32/f0/adc.c @@ -512,66 +512,6 @@ void adc_set_sample_time_on_all_channels(uint32_t adc, uint8_t time) ADC_SMPR(adc) = time & ADC_SMPR_SMP; } -/*---------------------------------------------------------------------------*/ -/** @brief ADC Set Resolution - * - * ADC Resolution can be reduced from 12 bits to 10, 8 or 6 bits for a - * corresponding reduction in conversion time. - * - * @param[in] adc Unsigned int32. ADC base address (@ref adc_reg_base) - * @param[in] resolution Unsigned int16. Resolution value (@ref adc_api_res) - */ - -void adc_set_resolution(uint32_t adc, uint16_t resolution) -{ - ADC_CFGR1(adc) = (ADC_CFGR1(adc) & ~ADC_CFGR1_RES_MASK) | resolution; -} - -/*---------------------------------------------------------------------------*/ -/** @brief ADC Set the Data as Left Aligned - * - * @param[in] adc Unsigned int32. ADC base address (@ref adc_reg_base) - */ - -void adc_set_left_aligned(uint32_t adc) -{ - ADC_CFGR1(adc) |= ADC_CFGR1_ALIGN; -} - -/*---------------------------------------------------------------------------*/ -/** @brief ADC Set the Data as Right Aligned - * - * @param[in] adc Unsigned int32. ADC base address (@ref adc_reg_base) - */ - -void adc_set_right_aligned(uint32_t adc) -{ - ADC_CFGR1(adc) &= ~ADC_CFGR1_ALIGN; -} - -/*---------------------------------------------------------------------------*/ -/** @brief ADC Enable DMA Transfers - * - * @param[in] adc Unsigned int32. ADC base address (@ref adc_reg_base) - */ - -void adc_enable_dma(uint32_t adc) -{ - ADC_CFGR1(adc) |= ADC_CFGR1_DMAEN; -} - -/*---------------------------------------------------------------------------*/ -/** @brief ADC Disable DMA Transfers - * - * @param[in] adc Unsigned int32. ADC base address (@ref adc_reg_base) - */ - -void adc_disable_dma(uint32_t adc) -{ - ADC_CFGR1(adc) &= ~ADC_CFGR1_DMAEN; -} - - /*---------------------------------------------------------------------------*/ /** @brief ADC Enable The VBat Sensor * diff --git a/lib/stm32/f3/adc.c b/lib/stm32/f3/adc.c index 39408532..9568ad09 100644 --- a/lib/stm32/f3/adc.c +++ b/lib/stm32/f3/adc.c @@ -492,55 +492,6 @@ void adc_start_conversion_injected(uint32_t adc) while (ADC_CR(adc) & ADC_CR_JADSTART); } -/*---------------------------------------------------------------------------*/ -/** @brief ADC Set the Data as Left Aligned - * - * @param[in] adc Unsigned int32. ADC block register address base @ref - * adc_reg_base - */ - -void adc_set_left_aligned(uint32_t adc) -{ - ADC_CFGR1(adc) |= ADC_CFGR1_ALIGN; -} - -/*---------------------------------------------------------------------------*/ -/** @brief ADC Set the Data as Right Aligned - * - * @param[in] adc Unsigned int32. ADC block register address base @ref - * adc_reg_base - */ - -void adc_set_right_aligned(uint32_t adc) -{ - ADC_CFGR1(adc) &= ~ADC_CFGR1_ALIGN; -} - -/*---------------------------------------------------------------------------*/ -/** @brief ADC Enable DMA Transfers - * - * @param[in] adc Unsigned int32. ADC block register address base - * @ref adc_reg_base - */ - -void adc_enable_dma(uint32_t adc) -{ - ADC_CFGR1(adc) |= ADC_CFGR1_DMAEN; -} - -/*---------------------------------------------------------------------------*/ -/** @brief ADC Disable DMA Transfers - * - * @param[in] adc Unsigned int32. ADC block register address base - * @ref adc_reg_base - */ - -void adc_disable_dma(uint32_t adc) -{ - ADC_CFGR1(adc) &= ~ADC_CFGR1_DMAEN; -} - - /*---------------------------------------------------------------------------*/ /** @brief ADC Set the Sample Time for a Single Channel * @@ -966,26 +917,6 @@ void adc_disable_external_trigger_injected(uint32_t adc) ADC_JSQR(adc) &= ~ADC_JSQR_JEXTEN_MASK; } -/*---------------------------------------------------------------------------*/ -/** @brief ADC Set Resolution - * - * ADC Resolution can be reduced from 12 bits to 10, 8 or 6 bits for a - * corresponding reduction in conversion time (resolution + 3 ADC clock cycles). - * - * @param[in] adc Unsigned int32. ADC block register address base @ref - * adc_reg_base - * @param[in] resolution Unsigned int8. Resolution value @ref adc_cr1_res - */ - -void adc_set_resolution(uint32_t adc, uint16_t resolution) -{ - uint32_t reg32 = ADC_CFGR1(adc); - - reg32 &= ~ADC_CFGR1_RES_MASK; - reg32 |= resolution; - ADC_CFGR1(adc) = reg32; -} - /*---------------------------------------------------------------------------*/ /** @brief ADC Enable the Overrun Interrupt *