Real context - STM32429 + LTCD + DMA2D + SDRAM.
NO SPI, NO I2C to lcd, I mean, no controller for the LCD.
Only the LTCD will have this function.
Reference.
History or story. Let’s get to the facts.
After a long time away from the graphics, I find myself interacting with lib lvgl again.
Fact is, when I had this contact it was between version 5.x and or 6.x, and now in 7.61 everything has changed.
Exploring the directories I came across “lvgl / src / lv_gpu / lv_gpu_stm32_dma2d.c‘ e ’.h”.
In lv_conf.h I have “#define LV_USE_GPU_STM32_DMA2D 1”
In the example “lv_port_stm32f429_disco” in “tft.c” in the function “void tft_init (void)”, there are these settings:
#if TFT_EXT_FB! = 0
SDRAM_Init ();
#endif
LCD_Config ();
DMA_Config ();
disp_drv.buffer = & buf;
disp_drv.flush_cb = tft_flush;
disp_drv.monitor_cb = monitor_cb;
lv_disp_drv_register (& disp_drv);
Here comes the question where and how to use it:
To use the GPU the following callbacks can be used:
• lv_gpu_stm32_dma2d_fill fill an area in memory with colors.
• lv_gpu_stm32_dma2d_blend blend two memory buffers using opacity.
• dma2d_wait if any GPU function return while the GPU is still working LVGL will use this function when required the be sure GPU rendereing is ready.
•
Since they are linked in “#define LV_USE_GPU_STM32_DMA2D 1” and /lvgl/src/lv_gpu/lv_gpu_stm32_dma2d.c, as written above?
And how to use:
/ * Example for 3) * /
static lv_disp_buf_t draw_buf_dsc_3;
static lv_color_t draw_buf_3_1 [LV_HOR_RES_MAX * LV_VER_RES_MAX]; / * A screen sized buffer * /
static lv_color_t draw_buf_3_1 [LV_HOR_RES_MAX * LV_VER_RES_MAX]; / * An other screen sized buffer * /
lv_disp_buf_init (& draw_buf_dsc_3, draw_buf_3_1, draw_buf_3_2, LV_HOR_RES_MAX * LV_VER_RES_MAX); / * Initialize the display buffer * /
LTDC start and configure with 02 layers. ? Or!
I assign layer 01 address - 0xDxxxxxxx
I assign address of layer 02 - 0xDx2xxxxx
FMC
…………….
…………….
Start and setup EXT_SDRAM? Or!
…………….
…………….
DMA2D — internal in lvgl?
How to use?
???
???
The reason for these questions, they come from an email conversation with https://www.youtube.com/c/NuttXChannel/videos , who is one of the countless contributors to nuttx.
So, as soon as I can understand on a bare-metal level, I will try to reproduce at the NUTTX level, even because there in the “nuttx” a lot has changed too.
Example, lvgl was ported approximately between 2016-2017 to nuttx, I don’t really remember.
Furthermore, approximately between 2018-2019 the framebuffer was also expanded with the help of MARCO https://groups.google.com/forum/#!msg/nuttx/ASeHEiwKjjA/tyc034VaBAAJ, comprising DMA2D, Overlay and much more…
However, at the moment, I need to understand how to interact with stm32f429 and lvgl in the most direct way possible.
The question is:
Could someone provide an example code STM32429 + LTCD + DMA2D + SDRAM in bare metal style?
The hits and misses will also be described here, as they become a source of what “not to do” and “what to do”
If the maintainers can set a minimum example, it will be of great help.
Thank you very much in advance
Ilb - Bravo_Romeu / Romeu_Juliet
Online translation