aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal/ports
diff options
context:
space:
mode:
authorRocco Marco Guglielmi <roccomarco.guglielmi@live.com>2016-12-29 01:29:12 +0000
committerRocco Marco Guglielmi <roccomarco.guglielmi@live.com>2016-12-29 01:29:12 +0000
commitd70abc826891a6d02a1d6c558b93d1a1757f352e (patch)
tree1bf83057cf8a15576a46dee4fc41d9216df03d15 /os/hal/ports
parentc6c56485d519d67db370ea1c3c247dc562e3d0d3 (diff)
downloadChibiOS-d70abc826891a6d02a1d6c558b93d1a1757f352e.tar.gz
ChibiOS-d70abc826891a6d02a1d6c558b93d1a1757f352e.tar.bz2
ChibiOS-d70abc826891a6d02a1d6c558b93d1a1757f352e.zip
Fixed Bug #803
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9992 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/hal/ports')
-rw-r--r--os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.c21
-rw-r--r--os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.h2
2 files changed, 10 insertions, 13 deletions
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 57c041064..ec6111fd6 100644
--- a/os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.c
+++ b/os/hal/ports/STM32/LLD/DACv1/hal_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/hal_dac_lld.h b/os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.h
index e1f7c2dec..e062a1faf 100644
--- a/os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.h
+++ b/os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.h
@@ -374,7 +374,7 @@ typedef struct {
/**
* @brief DAC control register.
*/
- uint32_t cr;
+ uint16_t cr;
} DACConfig;
/**