From db6f9df412a254fc12cee430830d8e79e7f36409 Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Thu, 15 Nov 2018 17:04:05 +0000 Subject: DAC driver now working with L4+. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@12431 110e8d01-0319-4d1e-a829-52ad28d1bb01 --- os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.c | 21 ++++++++------------- os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.h | 6 ++++++ 2 files changed, 14 insertions(+), 13 deletions(-) (limited to 'os/hal/ports/STM32/LLD/DACv1') diff --git a/os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.c b/os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.c index d71882b26..0b2f5d2af 100644 --- a/os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.c +++ b/os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.c @@ -89,6 +89,7 @@ static const dacparams_t dma1_ch1_params = { .regmask = 0xFFFF0000U, #if STM32_DMA_SUPPORTS_DMAMUX .dma = STM32_DMA_STREAM(STM32_DAC_DAC1_CH1_DMA_CHANNEL), + .peripheral = STM32_DMAMUX1_DAC1_CH1, #else .dma = STM32_DMA_STREAM(STM32_DAC_DAC1_CH1_DMA_STREAM), #endif @@ -109,6 +110,7 @@ static const dacparams_t dma1_ch2_params = { .regmask = 0x0000FFFFU, #if STM32_DMA_SUPPORTS_DMAMUX .dma = STM32_DMA_STREAM(STM32_DAC_DAC1_CH2_DMA_CHANNEL), + .peripheral = STM32_DMAMUX1_DAC1_CH2, #else .dma = STM32_DMA_STREAM(STM32_DAC_DAC1_CH2_DMA_STREAM), #endif @@ -129,6 +131,7 @@ static const dacparams_t dma2_ch1_params = { .regmask = 0xFFFF0000U, #if STM32_DMA_SUPPORTS_DMAMUX .dma = STM32_DMA_STREAM(STM32_DAC_DAC2_CH1_DMA_CHANNEL), + .peripheral = STM32_DMAMUX1_DAC2_CH1, #else .dma = STM32_DMA_STREAM(STM32_DAC_DAC2_CH1_DMA_STREAM), #endif @@ -149,6 +152,7 @@ static const dacparams_t dma1_ch2_params = { .regmask = 0x0000FFFFU, #if STM32_DMA_SUPPORTS_DMAMUX .dma = STM32_DMA_STREAM(STM32_DAC_DAC2_CH2_DMA_CHANNEL), + .peripheral = STM32_DMAMUX1_DAC2_CH2, #else .dma = STM32_DMA_STREAM(STM32_DAC_DAC2_CH2_DMA_STREAM), #endif @@ -243,18 +247,12 @@ void dac_lld_start(DACDriver *dacp) { #if STM32_DAC_USE_DAC1_CH1 if (&DACD1 == dacp) { rccEnableDAC1(true); -#if STM32_DMA_SUPPORTS_DMAMUX - dmaSetRequestSource(dacp->params->dma, STM32_DMAMUX1_DAC1_CH1); -#endif } #endif #if STM32_DAC_USE_DAC1_CH2 if (&DACD2 == dacp) { rccEnableDAC1(true); -#if STM32_DMA_SUPPORTS_DMAMUX - dmaSetRequestSource(dacp->params->dma, STM32_DMAMUX1_DAC1_CH2); -#endif channel = 1; } #endif @@ -262,18 +260,12 @@ void dac_lld_start(DACDriver *dacp) { #if STM32_DAC_USE_DAC2_CH1 if (&DACD3 == dacp) { rccEnableDAC2(true); -#if STM32_DMA_SUPPORTS_DMAMUX - dmaSetRequestSource(dacp->params->dma, STM32_DMAMUX1_DAC2_CH1); -#endif } #endif #if STM32_DAC_USE_DAC2_CH2 if (&DACD4 == dacp) { rccEnableDAC2(true); -#if STM32_DMA_SUPPORTS_DMAMUX - dmaSetRequestSource(dacp->params->dma, STM32_DMAMUX1_DAC2_CH2); -#endif channel = 1; } #endif @@ -445,8 +437,11 @@ void dac_lld_start_conversion(DACDriver *dacp) { (stm32_dmaisr_t)dac_lld_serve_tx_interrupt, (void *)dacp); osalDbgAssert(!b, "stream already allocated"); +#if STM32_DMA_SUPPORTS_DMAMUX + dmaSetRequestSource(dacp->params->dma, dacp->params->peripheral); +#endif - /* DMA settings depend on the chosed DAC mode.*/ + /* DMA settings depend on the chosen DAC mode.*/ switch (dacp->config->datamode) { /* Sets the DAC data register */ case DAC_DHRM_12BIT_RIGHT: diff --git a/os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.h b/os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.h index e5500a8f3..a3d29956a 100644 --- a/os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.h +++ b/os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.h @@ -318,6 +318,12 @@ typedef struct { * @brief DMA channel IRQ priority. */ uint32_t dmairqprio; +#if (STM32_DMA_SUPPORTS_DMAMUX == TRUE) || defined(__DOXYGEN__) + /** + * @brief DMAMUX peripheral selector. + */ + uint32_t peripheral; +#endif } dacparams_t; /** -- cgit v1.2.3