cancel
Showing results for 
Search instead for 
Did you mean: 

DMA2D_IRQHandler does not get called upon transfer complete

TDJ
Senior III

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]

1 ACCEPTED SOLUTION

Accepted Solutions
TDJ
Senior III

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!

View solution in original post

1 REPLY 1
TDJ
Senior III

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!