需求 stm32 使用 dma2d 来加速显示
解决 DMA2D 的优点 主要就是图像中的局部矩形区域的硬件数据传输。比 DMA 的好处,就是局部矩形区域中,换行的时候,自动计算地址,并转到局部区域第二行的首地址。
其他的就是颜色格式转换和透明度混合。
DMA2D 加速 lcd 显示 DMA2D 加速 LCD 显示的前提是,LCD 的驱动是硬件驱动,比如说,使用 FMC 或者 LTDC 之类的硬件驱动 LCD,程序只需要向地址写入数据,就可以显示。
能够加速的主要是: 图像数据,直线,清屏等。主要需要实现的其实就是两个函数: Dma2dCopy, Dma2dFill.
// fill color void Dma2dFill(void * dest, uint32_t width, uint32_t height, uint32_t line_offset, uint32_t color, uint32_t pixel_format) { DMA2D->CR = DMA2D_R2M;//0x00030000UL | (1 << 9); DMA2D->OCOLR = color; DMA2D->OMAR = (uint32_t)dest; DMA2D->OOR = line_offset; DMA2D->OPFCCR = pixel_format; //LTDC_PIXEL_FORMAT_RGB565; DMA2D->NLR = (uint32_t)(width << 16) | (uint16_t)height; DMA2D->CR |= DMA2D_CR_START; while (DMA2D->CR & DMA2D_CR_START) {} } // copy color data void Dma2dCopy(void * dest, const void * src, uint32_t width, uint32_t height, uint32_t dest_line_offset, uint32_t src_line_offset, uint32_t pixel_format) { DMA2D->CR = DMA2D_M2M;//0x00000000UL | (1 << 9); DMA2D->FGMAR = (uint32_t)src; DMA2D->OMAR = (uint32_t)dest; DMA2D->FGOR = src_line_offset; DMA2D->OOR = dest_line_offset; DMA2D->FGPFCCR = pixel_format; //LTDC_PIXEL_FORMAT_RGB565; DMA2D->OPFCCR = pixel_format; //LTDC_PIXEL_FORMAT_RGB565; DMA2D->NLR = (uint32_t)(width << 16) | (uint16_t)height; DMA2D->CR |= DMA2D_CR_START; while (DMA2D->CR & DMA2D_CR_START) {} } DMA2D 加速显存 主要是用在实现各种 gui 的接口函数,实现中用于加速内存复制和颜色混合。...