Add support for DMAMUX-capable MCU configuration with WS2812 PWM driver. (#9471)
This commit is contained in:
		
							parent
							
								
									8a4a0c25fd
								
							
						
					
					
						commit
						c6b7a0d386
					
				
					 2 changed files with 10 additions and 1 deletions
				
			
		| 
						 | 
					@ -92,6 +92,7 @@ Configure the hardware via your config.h:
 | 
				
			||||||
#define WS2812_PWM_PAL_MODE 2  // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 2
 | 
					#define WS2812_PWM_PAL_MODE 2  // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 2
 | 
				
			||||||
#define WS2812_DMA_STREAM STM32_DMA1_STREAM2  // DMA Stream for TIMx_UP, see the respective reference manual for the appropriate values for your MCU.
 | 
					#define WS2812_DMA_STREAM STM32_DMA1_STREAM2  // DMA Stream for TIMx_UP, see the respective reference manual for the appropriate values for your MCU.
 | 
				
			||||||
#define WS2812_DMA_CHANNEL 2  // DMA Channel for TIMx_UP, see the respective reference manual for the appropriate values for your MCU.
 | 
					#define WS2812_DMA_CHANNEL 2  // DMA Channel for TIMx_UP, see the respective reference manual for the appropriate values for your MCU.
 | 
				
			||||||
 | 
					#define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM2_UP // DMAMUX configuration for TIMx_UP -- only required if your MCU has a DMAMUX peripheral, see the respective reference manual for the appropriate values for your MCU.
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
You must also turn on the PWM feature in your halconf.h and mcuconf.h
 | 
					You must also turn on the PWM feature in your halconf.h and mcuconf.h
 | 
				
			||||||
| 
						 | 
					@ -117,5 +118,5 @@ Note: This only applies to STM32 boards.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 To configure the `RGB_DI_PIN` to open drain configuration add this to your config.h file: 
 | 
					 To configure the `RGB_DI_PIN` to open drain configuration add this to your config.h file: 
 | 
				
			||||||
```c
 | 
					```c
 | 
				
			||||||
 #define WS2812_EXTERNAL_PULLUP 
 | 
					#define WS2812_EXTERNAL_PULLUP
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,6 +23,9 @@
 | 
				
			||||||
#ifndef WS2812_DMA_CHANNEL
 | 
					#ifndef WS2812_DMA_CHANNEL
 | 
				
			||||||
#    define WS2812_DMA_CHANNEL 2  // DMA Channel for TIMx_UP
 | 
					#    define WS2812_DMA_CHANNEL 2  // DMA Channel for TIMx_UP
 | 
				
			||||||
#endif
 | 
					#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
 | 
					// Push Pull or Open Drain Configuration
 | 
				
			||||||
// Default Push Pull
 | 
					// 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));
 | 
					    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
 | 
					    // 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
 | 
					    // Start DMA
 | 
				
			||||||
    dmaStreamEnable(WS2812_DMA_STREAM);
 | 
					    dmaStreamEnable(WS2812_DMA_STREAM);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue