aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/stm32/dma.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/ports/stm32/dma.c b/ports/stm32/dma.c
index 7ea2eaa3b..35cfba162 100644
--- a/ports/stm32/dma.c
+++ b/ports/stm32/dma.c
@@ -498,6 +498,14 @@ void dma_init(DMA_HandleTypeDef *dma, const dma_descr_t *dma_descr, void *data){
dma_enable_clock(dma_id);
+ #if defined(STM32L4)
+ // Always reset and configure the L4 DMA peripheral
+ // (dma->State is set to HAL_DMA_STATE_RESET by memset above)
+ // TODO: understand how L4 DMA works so this is not needed
+ HAL_DMA_DeInit(dma);
+ HAL_DMA_Init(dma);
+ HAL_NVIC_SetPriority(dma_irqn[dma_id], IRQ_PRI_DMA, IRQ_SUBPRI_DMA);
+ #else
// if this stream was previously configured for this channel/request then we
// can skip most of the initialisation
uint8_t sub_inst = DMA_SUB_INSTANCE_AS_UINT8(dma_descr->sub_instance);
@@ -518,6 +526,7 @@ void dma_init(DMA_HandleTypeDef *dma, const dma_descr_t *dma_descr, void *data){
DMA_CalcBaseAndBitshift(dma);
#endif
}
+ #endif
HAL_NVIC_EnableIRQ(dma_irqn[dma_id]);
}