From 0293e7adc202fcdd65bfdf44d17c29ada5533734 Mon Sep 17 00:00:00 2001 From: Rocco Marco Guglielmi Date: Thu, 29 Dec 2016 01:29:18 +0000 Subject: [PATCH] Fixed Bug #803 git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/stable_16.1.x@9993 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/hal/ports/STM32/LLD/DACv1/dac_lld.c | 21 +++++++++------------ os/hal/ports/STM32/LLD/DACv1/dac_lld.h | 2 +- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/os/hal/ports/STM32/LLD/DACv1/dac_lld.c b/os/hal/ports/STM32/LLD/DACv1/dac_lld.c index 536598c8a..3502f335f 100644 --- a/os/hal/ports/STM32/LLD/DACv1/dac_lld.c +++ b/os/hal/ports/STM32/LLD/DACv1/dac_lld.c @@ -249,24 +249,21 @@ void dac_lld_start(DACDriver *dacp) { channel = 1; } #endif - /* Copying user configuration into cr */ - dacp->params->dac->CR = dacp->config->cr; - /* Enabling DAC in SW triggering mode initially, initializing data to zero.*/ #if STM32_DAC_DUAL_MODE == FALSE dacp->params->dac->CR &= dacp->params->regmask; - dacp->params->dac->CR |= DAC_CR_EN1 << dacp->params->regshift; + dacp->params->dac->CR |= (DAC_CR_EN1 | dacp->config->cr) << dacp->params->regshift; dac_lld_put_channel(dacp, channel, dacp->config->init); #else if ((dacp->config->datamode == DAC_DHRM_12BIT_RIGHT_DUAL) || (dacp->config->datamode == DAC_DHRM_12BIT_LEFT_DUAL) || (dacp->config->datamode == DAC_DHRM_8BIT_RIGHT_DUAL)) { - dacp->params->dac->CR = DAC_CR_EN2 | DAC_CR_EN1; + dacp->params->dac->CR = DAC_CR_EN2 | (dacp->config->cr << 16) | DAC_CR_EN1 | dacp->config->cr; dac_lld_put_channel(dacp, 1U, dacp->config->init); } else { - dacp->params->dac->CR = DAC_CR_EN1; + dacp->params->dac->CR = DAC_CR_EN1 | dacp->config->cr; } dac_lld_put_channel(dacp, channel, dacp->config->init); #endif @@ -492,13 +489,13 @@ void dac_lld_start_conversion(DACDriver *dacp) { /* DAC configuration.*/ #if STM32_DAC_DUAL_MODE == FALSE - cr = DAC_CR_DMAEN1 | (dacp->grpp->trigger << 3) | DAC_CR_TEN1 | DAC_CR_EN1; + cr = DAC_CR_DMAEN1 | (dacp->grpp->trigger << 3) | DAC_CR_TEN1 | DAC_CR_EN1 | dacp->config->cr; dacp->params->dac->CR &= dacp->params->regmask; dacp->params->dac->CR |= cr << dacp->params->regshift; #else dacp->params->dac->CR = 0; - cr = DAC_CR_DMAEN1 | (dacp->grpp->trigger << 3) | DAC_CR_TEN1 | DAC_CR_EN1 - | (dacp->grpp->trigger << 19) | DAC_CR_TEN2 | DAC_CR_EN2; + cr = DAC_CR_DMAEN1 | (dacp->grpp->trigger << 3) | DAC_CR_TEN1 | DAC_CR_EN1 | dacp->config->cr + | (dacp->grpp->trigger << 19) | DAC_CR_TEN2 | DAC_CR_EN2 | (dacp->config->cr << 16); dacp->params->dac->CR = cr; #endif } @@ -521,15 +518,15 @@ void dac_lld_stop_conversion(DACDriver *dacp) { #if STM32_DAC_DUAL_MODE == FALSE dacp->params->dac->CR &= dacp->params->regmask; - dacp->params->dac->CR |= DAC_CR_EN1 << dacp->params->regshift; + dacp->params->dac->CR |= (DAC_CR_EN1 | dacp->config->cr) << dacp->params->regshift; #else if ((dacp->config->datamode == DAC_DHRM_12BIT_RIGHT_DUAL) || (dacp->config->datamode == DAC_DHRM_12BIT_LEFT_DUAL) || (dacp->config->datamode == DAC_DHRM_8BIT_RIGHT_DUAL)) { - dacp->params->dac->CR = DAC_CR_EN2 | DAC_CR_EN1; + dacp->params->dac->CR = DAC_CR_EN2 | (dacp->config->cr << 16) | DAC_CR_EN1 | dacp->config->cr; } else { - dacp->params->dac->CR = DAC_CR_EN1; + dacp->params->dac->CR = DAC_CR_EN1 | dacp->config->cr; } #endif } diff --git a/os/hal/ports/STM32/LLD/DACv1/dac_lld.h b/os/hal/ports/STM32/LLD/DACv1/dac_lld.h index 4d4c30102..2589acb24 100644 --- a/os/hal/ports/STM32/LLD/DACv1/dac_lld.h +++ b/os/hal/ports/STM32/LLD/DACv1/dac_lld.h @@ -374,7 +374,7 @@ typedef struct { /** * @brief DAC control register. */ - uint32_t cr; + uint16_t cr; } DACConfig; /**