lvgl / lv_port_stm32h745i_disco

LVGL ported to STM32H745I DISCO
MIT License
14 stars 4 forks source link

DMA2D use for flush operation #1

Closed dozack closed 2 years ago

dozack commented 2 years ago

Not really an issue, but i wanted to discuss DMA2D usage for disp_flush() operation. In some older example repositories, i found comment, that you use DMA2Stream0 for it in order to save DMA2D for lvgl internal procedures enabled by

#define LV_USE_GPU_STM32_DMA2D 1

I followed that recommendation and still use regular DMA for disp_flush() even though i have seen DMA2D usage in multiple examples.

So I wanted to ask, what lvgl is really using DMA2D for and if its really safe to also use it for disp_flush() operation (and with interrupts, i am not very happy with polling style apps but i understand these are just examples).

Thank you.

https://github.com/lvgl/lv_port_stm32h745i_disco/blob/88e342bb24e9f84e4f9183d0e6ebbae13506f170/CM7/Core/Src/Lvgl_Porting/lvgl_port_lcd.c#L160

https://github.com/lvgl/lv_port_stm32h745i_disco/blob/88e342bb24e9f84e4f9183d0e6ebbae13506f170/CM7/lv_conf.h#L139

ahmetalperenbulut commented 2 years ago

Hello dear dozack,

Actually LVGL use DMA2D with polling mechanism to fill buffer, blend a map and copy a map. STM32H7 is not multicore therefore lvgl is not working when we are using DMA2D with polling mechanism. So using DMA2D with polling mechanism in disp_flush is safe.

If you want to use DMA2D with interrupts, you must use semaphore/mutex mechanism.

Thanks.

dozack commented 2 years ago

Thanks for response, thats what i wanted to know. I will close the issue now.