Skip to main content
TDJ
Senior III
February 21, 2021
Solved

DMA2D_IRQHandler does not get called upon transfer complete

  • February 21, 2021
  • 1 reply
  • 800 views

I have migrated code working fine on STM32F767 to STM32H7A3.

The strange thing is DMA2D_IRQHandler does not get called upon memory-to-memory transfer complete. I call HAL_DMA2D_Start_IT() function, it returns no error, it does what it should, I can even call it subsequently but DMA2D_IRQHandler is not fired.

What could be the reason? Below is what I have checked, all settings seem to be OK.

I am puzzled.

uint32_t isr = hdma2d.Instance->ISR;           //  interrupt status register [0]

uint32_t ifcr = hdma2d.Instance->IFCR;         //  interrupt flag clear register [0]

uint32_t cr = hdma2d.Instance->CR;             // control register [8961]

uint32_t v1 = __NVIC_GetVector(DMA2D_IRQn);    // [134227345]

auto v2 = DMA2D_IRQHandler;                    // [134227345]

uint32_t e = __NVIC_GetEnableIRQ(DMA2D_IRQn);  // [1]

This topic has been closed for replies.
Best answer by TDJ

OK, I have figured this out finally.

HAL_DMA2D_Start_IT() function was called from timer event handler and transfer complete event was triggered before timer event handler finished. Both nested events (timer and dma2d) had the same priority.

Lowering timer event priority by 1 solved the problem!

1 reply

TDJ
TDJAuthorBest answer
Senior III
February 23, 2021

OK, I have figured this out finally.

HAL_DMA2D_Start_IT() function was called from timer event handler and transfer complete event was triggered before timer event handler finished. Both nested events (timer and dma2d) had the same priority.

Lowering timer event priority by 1 solved the problem!