@@ -351,6 +351,49 @@ static const uint8_t dma_irqn[NSTREAM] = {
351351 DMA1_Channel4_5_6_7_IRQn ,
352352};
353353
354+
355+ #elif defined(STM32L4 ) && defined(DMAMUX1 )
356+
357+ // newer L4+ series parts have a DMAMUX unit
358+ #define NCONTROLLERS (2)
359+ #define NSTREAMS_PER_CONTROLLER (7)
360+ #define NSTREAM (NCONTROLLERS * NSTREAMS_PER_CONTROLLER)
361+
362+ #define DMA_SUB_INSTANCE_AS_UINT8 (dma_request ) (dma_request)
363+
364+ #define DMA1_ENABLE_MASK (0x007f) // Bits in dma_enable_mask corresponding to DMA1
365+ #define DMA2_ENABLE_MASK (0x3f80) // Bits in dma_enable_mask corresponding to DMA2
366+
367+ // DMA1 streams
368+ const dma_descr_t dma_SPI_1_RX = { DMA1_Channel1 , DMA_REQUEST_SPI1_RX , dma_id_0 , & dma_init_struct_spi_i2c };
369+ const dma_descr_t dma_SPI_1_TX = { DMA1_Channel2 , DMA_REQUEST_SPI1_TX , dma_id_1 , & dma_init_struct_spi_i2c };
370+ const dma_descr_t dma_SPI_2_RX = { DMA1_Channel3 , DMA_REQUEST_SPI2_RX , dma_id_2 , & dma_init_struct_spi_i2c };
371+ const dma_descr_t dma_SPI_2_TX = { DMA1_Channel4 , DMA_REQUEST_SPI2_TX , dma_id_3 , & dma_init_struct_spi_i2c };
372+ const dma_descr_t dma_I2C_2_RX = { DMA1_Channel5 , DMA_REQUEST_I2C2_RX , dma_id_4 , & dma_init_struct_spi_i2c };
373+ const dma_descr_t dma_I2C_2_TX = { DMA1_Channel6 , DMA_REQUEST_I2C2_TX , dma_id_5 , & dma_init_struct_spi_i2c };
374+ const dma_descr_t dma_I2C_1_RX = { DMA1_Channel5 , DMA_REQUEST_I2C1_RX , dma_id_4 , & dma_init_struct_spi_i2c };
375+ const dma_descr_t dma_I2C_1_TX = { DMA1_Channel6 , DMA_REQUEST_I2C1_TX , dma_id_5 , & dma_init_struct_spi_i2c };
376+
377+ static const uint8_t dma_irqn [NSTREAM ] = {
378+ DMA1_Channel1_IRQn ,
379+ DMA1_Channel2_IRQn ,
380+ DMA1_Channel3_IRQn ,
381+ DMA1_Channel4_IRQn ,
382+ DMA1_Channel5_IRQn ,
383+ DMA1_Channel6_IRQn ,
384+ DMA1_Channel7_IRQn ,
385+ DMA2_Channel1_IRQn ,
386+ DMA2_Channel2_IRQn ,
387+ DMA2_Channel3_IRQn ,
388+ DMA2_Channel4_IRQn ,
389+ DMA2_Channel5_IRQn ,
390+ DMA2_Channel6_IRQn ,
391+ DMA2_Channel7_IRQn ,
392+ };
393+
394+ // chip has some special DMA between SDMCC and system
395+ #undef ENABLE_SDIO
396+
354397#elif defined(STM32L4 )
355398
356399#define NCONTROLLERS (2)
@@ -460,6 +503,7 @@ static const uint8_t dma_irqn[NSTREAM] = {
460503 DMA2_Channel7_IRQn ,
461504};
462505
506+
463507#elif defined(STM32H7 )
464508
465509#define NCONTROLLERS (2)
@@ -1044,7 +1088,11 @@ static void dma_idle_handler(uint32_t tick) {
10441088 }
10451089}
10461090
1047- #if defined(STM32F0 ) || defined(STM32L0 ) || defined(STM32L4 )
1091+ #if defined(STM32L4 ) && defined(DMAMUX1 )
1092+
1093+ // not required on L4+?
1094+
1095+ #elif defined(STM32F0 ) || defined(STM32L0 ) || defined(STM32L4 )
10481096
10491097void dma_nohal_init (const dma_descr_t * descr , uint32_t config ) {
10501098 DMA_Channel_TypeDef * dma = descr -> instance ;
0 commit comments