Если по критерию максимальной скорости отрисовки, разумеется DMA2D предпочтительней. Что за разные способы?
Кстати, вот это устройство тоже рисует картинки DMA2D.
Код:
/* заполнение прямоугольного буфера цветом */
static void
dma2d_fillrect(
PACKEDCOLOR_T * buffer,
uint_fast16_t dx,
uint_fast16_t dy,
PACKEDCOLOR_T color
)
{
#if defined (DMA2D) && LCDMODE_LTDC && ! LCDMODE_LTDC_L8
// just writes the color defined in the DMA2D_OCOLR register
// to the area located at the address pointed by the DMA2D_OMAR
// and defined in the DMA2D_NLR and DMA2D_OOR.
arm_hardware_invalidate((uintptr_t) buffer, (uint_fast32_t) dx * dy * sizeof (* buffer));
DMA2D->OMAR = (uintptr_t) buffer;
DMA2D->OOR = (DMA2D->OOR & ~ (DMA2D_OOR_LO)) |
(0 < DMA2D_OOR_LO_Pos) |
0;
DMA2D->NLR = (DMA2D->NLR & ~ (DMA2D_NLR_NL | DMA2D_NLR_PL)) |
(dy << DMA2D_NLR_NL_Pos) |
(dx << DMA2D_NLR_PL_Pos) |
0;
DMA2D->OCOLR =
color |
0;
DMA2D->OPFCCR = (DMA2D->OPFCCR & ~ (DMA2D_OPFCCR_CM)) |
DMA2D_OPFCCR_CM_VALUE | /* Color mode - framebuffer pixel format */
0;
/* set AXI master timer */
DMA2D->AMTCR = (DMA2D->AMTCR & ~ (DMA2D_AMTCR_DT | DMA2D_AMTCR_EN)) |
(DMA2D_AMTCR_DT_VALUE << DMA2D_AMTCR_DT_Pos) |
1 * DMA2D_AMTCR_EN |
0;
/* запустить операцию */
DMA2D->CR = (DMA2D->CR & ~ (DMA2D_CR_MODE)) |
3 * DMA2D_CR_MODE_0 | // 11: Register-to-memory (no FG nor BG, only output stage active)
1 * DMA2D_CR_START |
0;
/* ожидаем выполнения операции */
while ((DMA2D->CR & DMA2D_CR_START) != 0)
;
#endif /* defined (DMA2D) && LCDMODE_LTDC */
}
Дисплей на 429 disco умеет раьотать в командном и RGB режиме. В RGB избражение по паралельной шине из памяти процессора и строчные/кадровые синхроимпульсы выдает процессор. В SPI изображение строится в памяти дисплейного контроллера. Кстати, аппаратного ускорения заполнения области контроллер ILI9341 не предлагает. Соответственно, указав зону заполнения начинаем выдавать (например) 16-битные пиксели на максимально допустимой скорости 10 мегабит. Что позволяет предсказать меньшую скорость чем при работе с памятью процессора. Но работа LTDC на 429 уменьшает скорость вычислений.