请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32H7 LTDC与DMA2D外设 (一)

[复制链接]
STMCU小助手 发布时间:2021-12-25 22:00
LTDC外设可以看成是一种M2LCD的的DMA,LTDC的初始化结构体中有一段映射地址,这个地址一般为片外RAM,也可以片内。程序修改这个RAM对应地址段的值,就会体现在屏幕上。就好比一个大数组,每个元素对应LCD的一个像素色。例如RGB888,那么每个像素点,有三个色,各占8bit,一个字节。一个像素点24bit,3字节。开辟一个这样的数组,与LTDC的起始地址段共地址,那么修改这个数组的元素值,就会体现在LCD屏幕上。这样就实现了屏幕显示。
- b6 o1 ^5 s8 }3 U6 n7 S
5 A  U6 M3 r' Y" y
3 J9 W1 K' r: v) W% z1 ~4 A& V# Q. s3 q, r- b2 k
        DMA2D就直接是一种DMA了,加上了2D,不知道这个2D是 to display的意思还是2D图像的意思。不管怎么说,就是一种专门给图形显示加速的DMA无疑了。DMA2D可以混合两张图片,然后给LCD显示。其实我原来一直没有搞懂,这个混合怎么用。如果想混合,我需要3个GRAM空间。LTDC那个不能动,需要另外两个GRAM作为DMA2D的输入。由DMA2D完成混合之后,搬移到LTDC的GRAM上,实现显示。看到很多人实际的代码中,其实是只有两个GRAM,LTDC的GRAM和另外一片GRAM空间,由这俩空间混合后,搬移到LTDC的GRAM上。有点像a=a+b的意思。其实我一直觉得这样不好的原因并不是3片空间太浪费,主要是想不明白,LTDC的空间被修改之后,下一次往上附加或者混合别的内容,会不会有残留。举个例子,我想让一个图片移动。那么如果直接混合到LTDC的内存上,那么它就会把LTDC原来的信息覆盖,图片移走之后,虽然可以擦除图片痕迹,但LTDC怎么恢复之前的信息呢?这些需要再想想。因为即便有无数个GRAM空间,总有需要混合和覆盖的问题,都需要解决。除非每个GRAM的信息都能独立被保存,实时被刷新。以便重新覆盖有移动的地方的内存空位。这样代价会不会太大?有几个图层就需要几个刷新的线程,不断的更新。不断的混合。如果只是直接修改LTDC的存储还可以少点内存。如果每个图层用独立的GRAM空间,那就热闹了,得多大的RAM啊?
$ \) y/ K/ T4 m1 W% g  O) }( r+ Y' @7 G* q

: R, s, L. j! ~3 J5 {
& d& Q; \" ^, [( Q) f/ p2 r5 b; }7 A8 k+ V0 Z
收藏 评论0 发布时间:2021-12-25 22:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版