Mercurial > ecos
changeset 3154:0161bba6d2a7
* src/adc_stm32.c:
* src/adc1.inl:
* src/adc3.inl:
Peripheral clocks are enable / disable using new
CYGHWR_HAL_STM32_CLOCK_DISABLE / CYGHWR_HAL_STM32_CLOCK_ENABLE
macro supplied from the variant HAL. In addition, make sure timer
clock is enable.
| author | jlarmour |
|---|---|
| date | Fri, 13 Apr 2012 17:55:39 +0000 |
| parents | bf98691daa6d |
| children | 9cff5928a4e2 |
| files | packages/devs/adc/cortexm/stm32/current/ChangeLog packages/devs/adc/cortexm/stm32/current/src/adc1.inl packages/devs/adc/cortexm/stm32/current/src/adc3.inl packages/devs/adc/cortexm/stm32/current/src/adc_stm32.c |
| diffstat | 4 files changed, 25 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/packages/devs/adc/cortexm/stm32/current/ChangeLog +++ b/packages/devs/adc/cortexm/stm32/current/ChangeLog @@ -1,3 +1,13 @@ +2012-04-13 Christophe Coutand <ecos@hotmail.co.uk> + + * src/adc_stm32.c: + * src/adc1.inl: + * src/adc3.inl: + Peripheral clocks are enable / disable using new + CYGHWR_HAL_STM32_CLOCK_DISABLE / CYGHWR_HAL_STM32_CLOCK_ENABLE + macro supplied from the variant HAL. In addition, make sure timer + clock is enable. + 2011-05-02 Christophe Coutand <ecos@hotmail.co.uk> * cdl/adc_stm32.cdl:
--- a/packages/devs/adc/cortexm/stm32/current/src/adc1.inl +++ b/packages/devs/adc/cortexm/stm32/current/src/adc1.inl @@ -82,6 +82,8 @@ static const stm32_adc_setup stm32_adc_s .pins = stm32_adc_pins1, .extsel = 4, .sample_time = CYGNUM_DEVS_ADC_CORTEXM_STM32_ADC1_SAMPLE_TIME, + .adc_clkena = CYGHWR_HAL_STM32_ADC1_CLOCK, + .tim_clkena = CYGHWR_HAL_STM32_TIM3_CLOCK, }; // ADC DMA buffer
--- a/packages/devs/adc/cortexm/stm32/current/src/adc3.inl +++ b/packages/devs/adc/cortexm/stm32/current/src/adc3.inl @@ -80,6 +80,8 @@ static const stm32_adc_setup stm32_adc_s .pins = stm32_adc_pins3, .extsel = 4, .sample_time = CYGNUM_DEVS_ADC_CORTEXM_STM32_ADC3_SAMPLE_TIME, + .adc_clkena = CYGHWR_HAL_STM32_ADC3_CLOCK, + .tim_clkena = CYGHWR_HAL_STM32_TIM8_CLOCK, }; // ADC DMA buffer
--- a/packages/devs/adc/cortexm/stm32/current/src/adc_stm32.c +++ b/packages/devs/adc/cortexm/stm32/current/src/adc_stm32.c @@ -85,6 +85,8 @@ typedef struct stm32_adc_setup { const cyg_uint32 *pins; // ADC associated GPIO pins cyg_uint8 extsel; // ADC EXTSEL value (timer event) cyg_uint32 sample_time; // ADC sampling time in us + cyg_uint32 adc_clkena; // ADC clock enable + cyg_uint32 tim_clkena; // Timer clock enable } stm32_adc_setup; //----------------------------------------------------------------------------- @@ -361,7 +363,7 @@ stm32_dma_isr(cyg_vector_t vector, cyg_a cyg_adc_channel **chan = info->chan; cyg_uint32 isr; cyg_uint32 res = CYG_ISR_HANDLED; - + HAL_READ_UINT32(info->setup->dma_base + CYGHWR_HAL_STM32_DMA_ISR, isr); if (!(isr & CYGHWR_HAL_STM32_DMA_ISR_MASK(info->setup->dma_channel))) return 0; @@ -446,13 +448,14 @@ stm32_adc_init_device(cyg_adc_device *de cyg_uint64 tmp; cyg_uint32 cycles; cyg_uint32 smpr; - cyg_uint32 rcc_base = CYGHWR_HAL_STM32_RCC; - cyg_uint32 reg_data; int i; - + static const cyg_uint32 cycles_table[] = { 15, 75, 135, 285, 415, 555, 715, 2395 }; - + + CYGHWR_HAL_STM32_CLOCK_ENABLE( info->setup->adc_clkena ); + CYGHWR_HAL_STM32_CLOCK_ENABLE( info->setup->tim_clkena ); + // Make sure ADC is powered on cr = CYGHWR_HAL_STM32_ADC_CR2_ADON; HAL_WRITE_UINT32(info->setup->adc_base + CYGHWR_HAL_STM32_ADC_CR2, cr); @@ -493,16 +496,14 @@ stm32_adc_init_device(cyg_adc_device *de // Enable generation of TRGO event cr = CYGHWR_HAL_STM32_TIM_CR2_MMS_UPDATE; HAL_WRITE_UINT32(info->setup->tim_base + CYGHWR_HAL_STM32_TIM_CR2, cr); - + // Setup DMA channel // Ensure that the DMA clocks are enabled. - HAL_READ_UINT32 (rcc_base + CYGHWR_HAL_STM32_RCC_AHBENR, reg_data); if (info->setup->dma_base == CYGHWR_HAL_STM32_DMA1) - reg_data |= CYGHWR_HAL_STM32_RCC_AHBENR_DMA1; + CYGHWR_HAL_STM32_CLOCK_ENABLE( CYGHWR_HAL_STM32_DMA1_CLOCK ); else - reg_data |= CYGHWR_HAL_STM32_RCC_AHBENR_DMA2; - HAL_WRITE_UINT32 (rcc_base + CYGHWR_HAL_STM32_RCC_AHBENR, reg_data); + CYGHWR_HAL_STM32_CLOCK_ENABLE( CYGHWR_HAL_STM32_DMA2_CLOCK ); HAL_WRITE_UINT32(info->setup->dma_base + CYGHWR_HAL_STM32_DMA_CPAR(info->setup->dma_channel),
