aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGiovanni Di Sirio <gdisirio@gmail.com>2018-11-15 17:04:05 +0000
committerGiovanni Di Sirio <gdisirio@gmail.com>2018-11-15 17:04:05 +0000
commitdb6f9df412a254fc12cee430830d8e79e7f36409 (patch)
treeb36b058ef636c3d02f8d5cf77c08b83193f9529a
parentc0da3c4f42dd944a30199744679442cf2ef7b633 (diff)
downloadChibiOS-db6f9df412a254fc12cee430830d8e79e7f36409.tar.gz
ChibiOS-db6f9df412a254fc12cee430830d8e79e7f36409.tar.bz2
ChibiOS-db6f9df412a254fc12cee430830d8e79e7f36409.zip
DAC driver now working with L4+.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@12431 110e8d01-0319-4d1e-a829-52ad28d1bb01
-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.h6
-rw-r--r--testhal/STM32/multi/DAC/debug/STM32-DAC (Select ELF file)(OpenOCD, Just Run).launch2
3 files changed, 15 insertions, 14 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 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;
/**
diff --git a/testhal/STM32/multi/DAC/debug/STM32-DAC (Select ELF file)(OpenOCD, Just Run).launch b/testhal/STM32/multi/DAC/debug/STM32-DAC (Select ELF file)(OpenOCD, Just Run).launch
index a07f9791d..e389bd7b5 100644
--- a/testhal/STM32/multi/DAC/debug/STM32-DAC (Select ELF file)(OpenOCD, Just Run).launch
+++ b/testhal/STM32/multi/DAC/debug/STM32-DAC (Select ELF file)(OpenOCD, Just Run).launch
@@ -33,7 +33,7 @@
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/>
<stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_REGISTER_GROUPS" value=""/>
-<stringAttribute key="org.eclipse.cdt.launch.FORMAT" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;contentList&gt;&lt;content id=&quot;xPSR-(format)&quot; val=&quot;4&quot;/&gt;&lt;/contentList&gt;"/>
+<stringAttribute key="org.eclipse.cdt.launch.FORMAT" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;contentList&gt;&lt;content id=&quot;CR-dac-params-dacp-dac_lld_start_conversion-(format)&quot; val=&quot;4&quot;/&gt;&lt;content id=&quot;xPSR-(format)&quot; val=&quot;4&quot;/&gt;&lt;/contentList&gt;"/>
<stringAttribute key="org.eclipse.cdt.launch.GLOBAL_VARIABLES" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;globalVariableList/&gt;&#10;"/>
<stringAttribute key="org.eclipse.cdt.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;memoryBlockExpressionList&gt;&#10;&lt;memoryBlockExpressionItem&gt;&#10;&lt;expression text=&quot;0x40021004&quot;/&gt;&#10;&lt;/memoryBlockExpressionItem&gt;&#10;&lt;/memoryBlockExpressionList&gt;&#10;"/>
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="${selected_resource_loc}"/>