summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorNick Brassel <nick@tzarc.org>2020-07-16 16:39:49 +1000
committerJames Young <18669334+noroadsleft@users.noreply.github.com>2020-08-29 14:30:02 -0700
commitc6b7a0d386c347f20117943831a0215659d37c47 (patch)
tree0b53a602c61b58842dba0f9dc3080371bfe1c027 /drivers
parent8a4a0c25fdb2c4d0ac3ac8fd5f6ba14b56f4cd28 (diff)
Add support for DMAMUX-capable MCU configuration with WS2812 PWM driver. (#9471)
Diffstat (limited to 'drivers')
-rw-r--r--drivers/chibios/ws2812_pwm.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/chibios/ws2812_pwm.c b/drivers/chibios/ws2812_pwm.c
index 7113db11e0..d93fa24735 100644
--- a/drivers/chibios/ws2812_pwm.c
+++ b/drivers/chibios/ws2812_pwm.c
@@ -23,6 +23,9 @@
#ifndef WS2812_DMA_CHANNEL
# define WS2812_DMA_CHANNEL 2 // DMA Channel for TIMx_UP
#endif
+#if (STM32_DMA_SUPPORTS_DMAMUX == TRUE) && !defined(WS2812_DMAMUX_ID)
+# error "please consult your MCU's datasheet and specify in your config.h: #define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM?_UP"
+#endif
// Push Pull or Open Drain Configuration
// Default Push Pull
@@ -184,6 +187,11 @@ void ws2812_init(void) {
dmaStreamSetMode(WS2812_DMA_STREAM, STM32_DMA_CR_CHSEL(WS2812_DMA_CHANNEL) | STM32_DMA_CR_DIR_M2P | STM32_DMA_CR_PSIZE_WORD | STM32_DMA_CR_MSIZE_WORD | STM32_DMA_CR_MINC | STM32_DMA_CR_CIRC | STM32_DMA_CR_PL(3));
// M2P: Memory 2 Periph; PL: Priority Level
+#if (STM32_DMA_SUPPORTS_DMAMUX == TRUE)
+ // If the MCU has a DMAMUX we need to assign the correct resource
+ dmaSetRequestSource(WS2812_DMA_STREAM, WS2812_DMAMUX_ID);
+#endif
+
// Start DMA
dmaStreamEnable(WS2812_DMA_STREAM);