前言
在一些图形界面应用中,系统架构会时常考虑使用 fsmc接口来驱动 8080接口的 lcd屏。在 mcu渲染完成,将framebuffer发送到 lcd时,有可能会遇到存儲大小端的问题。stm32mcu都采用 armcortex内核,内存使用小端格式。而 intel 8080接口的 lcd在传输 rgb数据时,使用的是大端格式。mcu在传输 rgb数据时,字节序有可能不匹配。在图形界面应用中,像素格式一般会使用 rgb888或 rgb565。而在使用 fsmc接口驱动 8bit位宽的 lcd时,很可能会使用 rgb565格式。本文中会介绍两种方法来处理8bit8080接口 rgb565格式图像数据字节序问题。
图像数据字节序
8bit8080 lcd在接收 rgb565数据时,会将第一个字节解析为{r4-r0,g5-g3}, 第二个字节解析为{g2-g0,b4-b0},并按这个顺序接收所有数据,如下图:
而在 mcu内存中,数据按小端格式存放,rgb565数据存放的字节序如下:
如果不做调整直接将 rgb数据发给 lcd,mcu会先发送 byte0,再发送 byte 1,这样 lcd显示的内容就会错乱。对比上面两张图可以看出,只需将内存中 byte0与 byte1字节位置对调(byteswap),就能满足 lcd接口的字节序要求。可以直接使用 cpu进行 byteswap,但这会消耗过多 cpu算力,同时也会占用更多内存。这里我们将使用硬件进行 byteswap.
dma2d 进行byteswap
dma2d是 st为图形应用专门设计并优化的2d加速引擎,拥有丰富的功能。其字节序重排功能包含了red blueswap以及 byteswap特性。red blueswap特性在 l4和 l4+系列 mcu都支持,而 byteswap仅在l4+系列有支持。在 l4+系列上,通过配置 dma2d_opfccr寄存器的 sb位,即可使能 byteswap功能,在 dma2d的outputfifo中完成字节序调整,如下图:
因此在图形界面应用中,需要 byteswap时,可以考虑用 dma2d来传输 rgb数据给 lcd。
gpdma 进行byteswap
在新推出的 u5系列芯片上,集成了 gpdma模块。这是新的通用dma模块,能在传输数据的同时,还有丰富的数据处理能力。在初始化gpdma时,通过配置源和目的数据位宽为 dma_src_datawidth_word,在数据处理中配置 dataexchange为 dma_exchange_dest_byte,如下面代码,也能实现byteswap功能。
这样,在图形应用中,既能使用 dma2d加速渲染过程,也能使用 gpdma的数据处理能力。通过 gpdma直接向fsmc接口输出 byteswap后的 rgb565格式的图形数据给lcd。
小结
在驱动 8位 8080接口 lcd时,需要注意图像数据字节序问题。使用 rgb565格式时,可以使用 dma2d或 gpdma来传输图像数据,同时对图像数据做 byteswap调整,满足lcd的字节序要求。
500天不卡顿,荣耀V9这次吹的有点大!
视觉光源在新能源行业中的应用
高性能数字音频传输的接口标准与系统设计并对其测试
光伏电站的发电原理及组成
苍穹数码亮相中国测绘地理信息大会,荣获重磅奖项!
使用FSMC接口来驱动8080接口LCD屏的问题
横格式分样器的使用中需要注意的事项有哪些
AR隐形眼镜不再只是想象,它真的被创造出来了
java内存溢出的几种原因和解决办法
Uber被芝加哥市政府施压起诉,原因是用户数据遭到泄露
企业急于部署5G 或将自建专网弥补不足
德国初创企业推出的翻译软件DeepL在翻译水平上让不少用户惊艳
RER-USBFHD01M应用产品特点
2023年11月全球半导体行业总销售额480亿美元
5G+AGV搬运机器人助力车间实现智能化、自动化
EB1US-00000S-020BA传感器在工业的应用
公网,私网,内网,外网的区别
TMC5041电机驱动芯片概述/特点/参数/应用
旺宏:市场消化库存较预期久 明年上半年景气恐不会变好
华工科技携手武船重工揭榜国家级智能制造示范工厂!