2d加速 stm32_【STM32H7教程】第55章 STM32H7的图形加速器DMA2D的基础知识和HAL库API...

本文深入解析STM32H7的DMA2D(DMA2D),它是专为LCD加速设计的硬件模块,支持多种工作模式和颜色格式转换。介绍了DMA2D的基础知识、HAL库API的使用,并提供配置实例,展示了其在清屏、图像复制、颜色格式转换和混合显示等场景的应用。
摘要由CSDN通过智能技术生成

第55章       STM32H7的图形加速器DMA2D的基础知识和HAL库API

本章节为大家讲解DMA2D,实际项目中显示屏的加速全靠它了,而且性能也比较给力。

55.1 初学者重要提示

55.2 DMA2D基础知识

55.3 DMA2D的HAL库用法

55.4 源文件stm32h7xx_hal_dma2d.c

55.5 总结

55.1 初学者重要提示

DMA2D是专门用于LCD加速的,特别是刷单色屏,刷图片,刷Alpah(透明)混合效果全靠它,而且可以大大降低CPU利用率。

测评STM32H7的LTDC+DMA2D性能,100Hz以上无压力,刷800*480图片和色块仅需2.6ms一张:http://www.armbbs.cn/forum.php?mod=viewthread&tid=91489 。

H7的DMA2D与F429的DMA2D最大区别是支持了ARGB和ABGR互转,而且支持H7的硬解JEPG输出格式YCbCr转RGB,方便LCD显示。

特别注意,大家只需对HAL库提供的DMA2D操作API有个了解即可,实际工程中,并不使用这些API,我们需要使用更加高效的寄存器直接操作,在下一章节会为大家说明。

55.2 DMA2D基础知识

DMA2D主要实现了两个功能,一个是DMA数据传输功能,另一个是2D图形加速功能。

DMA数据传输

主要是两种方式,一个是寄存器到存储器,另一个是存储器到存储器。通过DMA可以大大降低CPU的利用率。

2D图形加速功能

支持硬件的颜色格式转换和Alpha混合效果。

55.2.1 DMA2D硬件框图

认识一个外设,最好的方式就是看它的框图,方便我们快速地了解DMA2D的基本功能,然后再看手册了解细节。框图如下所示:

通过这个框图,我们可以得到如下信息:

dma2d_aclk

AXI 总线时钟输入。

dma2d_gbl_it

DMA2D全局中断输出。

dma2d_clut_trg

CLUT传输完成信号输出,可以触发MDMA。

dma2d_tc_trg

传输完成信号输出,可以触发MDMA。

dma2d_tw_trg

传输watermark信号输出,可以触发MDMA。

将这个硬件框图简化一下,就是下面这样:

下面按照简化的硬件框图,对每个部分做个说明。

55.2.2 DMA2D工作模式

DMA2D支持的工作模式如下:

模式1:寄存器到存储器模式

这个模式主要用于清屏,也即是将显示屏清为单色效果。

模式2:存储器到存储器模式

这个模式用于从一个存储器复制一块数据到另一个存储器,比如将摄像头OV7670的输出图像复制到LCD显存就可以采用这种方式。

模式3:存储器到存储器模式,带颜色格式转换

这个模式比模式2多了一个颜色格式转换,比如我们要显示一幅RGB888颜色格式的位图到RGB565颜色格式的显示屏,就需要用到这个模式,只需输入端配置为RGB888,输出端配置RGB565即可。位图颜色格式转换后会显示到显示屏上。

模式4:存储器到存储器模式,带颜色格式转换和混合

这个模式比模式3多了一个混合操作,通过混合,可以将两种效果进行混合显示。

模式5:存储器到存储器模式,带颜色格式转换和混合,前景色是固定的

同模式4,只是前景色的颜色值是固定的。

55.2.3 前景层和背景层的输入以及颜色格式转换

前景层和背景层是指的用户绘制图形时的前景色和背景色,比如我们显示汉字,字体会有一个颜色,也就是前景色,还有一个背景色。又比如我们绘制两幅图片,想将两幅图片混合,那就可以将一幅图片作为前景层,另一个幅图片作为背景层。

DMA2D支持的输入颜色格式如下,前景层和背景层一样:

前8种颜色格式在第50章的第2小节开头有介绍,这里把后四种做个说明:

L4 (4-bit luminance or CLUT)

4位颜色格式,实际上仅仅是4位索引值,范围0–15,而每个索引值的具体颜色值在查色表CLUT里面存储。

A4和A8

A4和A8用于特定的Alpha模式,既不存储颜色信息,也没有索引值。

YCbCr

这个是H7的硬件JPEG输出的颜色格式,后面JPEG章节为大家专门做讲解。

这里特别注意一点,输入颜色格式的Alpha值是可以设置的,而且颜色格式里面的R通道和B通道可以交换位置。

55.2.4 前景层和背景层混合

DMA2D混合器用于混合前景色和背景色,这个功能不需要任何配置,仅需要通过DMA2D_CR寄存器使能即可。混合公式如下:

55.2.5 DMA2D输出颜色格式

DMA2D支持的输出颜色格式如下:

这里特别注意一点,输出颜色格式的Alpha值是可以设置的,而且颜色格式里面的R通道和B通道可以交换位置。

55.3 DMA2D的HAL库用法

DMA2D的HAL库用法其实就是几个结构体变量成员的配置和使用,然后配置时钟,并根据需要配置NVIC、中断。下面我们逐一展开为大家做个说明。

55.3.1 DMA2D寄存器结构体DMA2D_TypeDef

DMA2D相关的寄存器是通过HAL库中的结构体DMA2D_TypeDef定义的,在stm32h743xx.h中可以找到它们的具体定义:

typedef struct{

__IO uint32_t CR;/*!< DMA2D Control Register, Address offset: 0x00*/__IO uint32_t ISR;/*!< DMA2D Interrupt Status Register, Address offset: 0x04*/__IO uint32_t IFCR;/*!< DMA2D Interrupt Flag Clear Register, Address offset: 0x08*/__IO uint32_t FGMAR;/*!< DMA2D Foreground Memory Address Register, Address offset: 0x0C*/__IO uint32_t FGOR;/*!< DMA2D Foreground Offset Register, Address offset: 0x10*/__IO uint32_t BGMAR;/*!< DMA2D Background Memory Address Register, Address offset: 0x14*/__IO uint32_t BGOR;/*!< DMA2D Background Offset Register, Address offset: 0x18*/__IO uint32_t FGPFCCR;/*!< DMA2D Foreground PFC Control Register, Address offset: 0x1C*/__IO uint32_t FGCOLR;/*!< DMA2D Foreground Color Register, Address offset: 0x20*/__IO uint32_t BGPFCCR;/*!< DMA2D Background PFC Control Register, Address offset: 0x24*/__IO uint32_t BGCOLR;/*!< DMA2D Background Color Register, Address offset: 0x28*/__IO uint32_t FGCMAR;/*!< DMA2D Foreground CLUT Memory Address Register, Address offset: 0x2C*/__IO uint32_t BGCMAR;/*!< DMA2D Background CLUT Memory Address Register, Address offset: 0x30*/__IO uint32_t OPFCCR;/*!< DMA2D Output PFC Control Register, Address offset: 0x34*/__IO u

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值