目录
5、存储器到存储器模式, 带颜色格式转换和混合,前景色是固定的
DMA2D 是专门用于 LCD 加速的,特别是刷单色屏,刷图片,刷 Alpah(透明) 混合效果全靠它,而且可以大大降低 CPU 利用率。
特别注意,大家只需对 HAL 库提供的 DMA2D 操作 API 有个了解即可,实际工程中,并不使用这些API, 我们需要使用更加高效的寄存器直接操作, 在下一章节会为大家说明。
一、DMA2D基础
DMA2D 主要实现了两个功能,一个是 DMA 数据传输功能,另一个是 2D 图形加速功能。
- DMA 数据传输
主要是两种方式, 一个是寄存器到存储器,另一个是存储器到存储器。 通过 DMA 可以大大降低 CPU的利用率。
- 2D 图形加速功能
支持硬件的颜色格式转换和 Alpha 混合效果。
二、DMA2D硬件框图
三、工作模式
1、寄存器到存储器模式
这个模式主要用于清屏, 也即是将显示屏清为单色效果。
2、存储器到存储器模式
这个模式用于从一个存储器复制一块数据到另一个存储器,比如将摄像头 OV7670 的输出图像复制到LCD 显存就可以采用这种方式。
3、存储器到存储器模式, 带颜色格式转换
这个模式比模式 2 多了一个颜色格式转换,比如我们要显示一幅 RGB888 颜色格式的位图到 RGB565颜色格式的显示屏, 就需要用到这个模式, 只需输入端配置为 RGB888, 输出端配置 RGB565 即可。位图颜色格式转换后会显示到显示屏上。
4、存储器到存储器模式, 带颜色格式转换和混合
这个模式比模式 3 多了一个混合操作, 通过混合,可以将两种效果进行混合显示。
5、存储器到存储器模式, 带颜色格式转换和混合,前景色是固定的
同模式 4, 只是前景色的颜色值是固定的。
四、颜色配置
1、前景层和背景层的输入以及颜色格式转换
前景层和背景层是指的用户绘制图形时的前景色和背景色,比如我们显示汉字, 字体会有一个颜色,也就是前景色, 还有一个背景色。 又比如我们绘制两幅图片,想将两幅图片混合,那就可以将一幅图片作为前景层,另一个幅图片作为背景层。
DMA2D 支持的输入颜色格式如下, 前景层和背景层一样:
前 8 种颜色格式在第 40 章的第 2 小节开头有介绍,这里把后3种做个说明:
L4 (4-bit luminance or CLUT):4 位颜色格式, 实际上仅仅是 4 位索引值,范围 0–15,而每个索引值的具体颜色值在查色表 CLUT 里面存储。
A4 和 A8:A4 和 A8 用于特定的 Alpha 模式,既不存储颜色信息,也没有索引值。
2、DMA2D 输出颜色格式
DMA2D 支持的输出颜色格式如下:
五、DMA2D配置
其中模式可以选择多种,颜色也可以选择输入与输出。
static void LCDF4_InitDMA2D(void)
{
/* 使能DMA2D时钟 */
__HAL_RCC_DMA2D_CLK_ENABLE();
/* 配置默认模式 */
hdma2d.Init.Mode = DMA2D_R2M;
hdma2d.Init.ColorMode = DMA2D_INPUT_RGB565;
hdma2d.Init.OutputOffset = 0x0;
hdma2d.Instance = DMA2D;
if (HAL_DMA2D_Init(&hdma2d) != HAL_OK)
{
Error_Handler(__FILE__, __LINE__);
}
}