前言
在一些图形界面应用中,系统架构会时常考虑使用 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的字节序要求。
关键字:FSMC接口 LCD屏
引用地址:
使用FSMC接口来驱动8080接口LCD屏的问题
推荐阅读最新更新时间:2024-11-11 15:59
[ARM应用]不改变内核代码,解决LCD屏自动并闭
可以在应用程序中实现,不要去改动内核驱动,编一小程序: #include stdio.h #include fcntl.h #include sys/ioctl.h void keep_LCD_screen(void) { int fd; fd = open( /dev/tty0 , O_RDWR); write(fd, \033 , 8); close(fd); } int main(void) { keep_LCD_screen(); return 0; } 将这一应用程序编译生成可执行文件,假如命名为 LCD_screen ,将 LCD_screen 下载到开发板
[单片机]
AMOLED将是未来显示屏面板主流方案?LCD路在何方?
据 IHS Markit 调研发现,未来 LCD 面板的产业将会越来越不景气,而AMOLED则将反客为主。 IHS Markit预估,未来几年TFT面板产值将是逐年下滑的走势。 反观AMOLED面板,不仅同尺寸产品价格远高于LCD面板,而且应用、出货量持续成长,带动产值稳定成长,2019年产值将达251.53亿美元,在整体平面显示面板产值占比达到22.98%。 IHS Markit预期,到了2025年AMOLED面板将占平面显示面板产值比重40%。 IHS Markit统计指出,2019年平面显示器总产值将达到1,100亿美元,其中TFT LCD将达到832.75亿美元,AMOLED将达到251.53亿美元。 TF
[嵌入式]
LCD液晶显示屏显示字符左右移动的程序
lcd_1602 指令汇总 0x28 设置 162 显示, 57 点阵, 4 位数据接口 0x38 设置 162 显示, 57 点阵, 8 位数据接口 0x01 清屏 , 光标复位到地址 00H 位置 0x02 光标归原点, DDRAM 中内容不变,地址计数器 AC=0; (此时地址为 0x80 ) 0x0F 开显示,显示光标,光标闪烁 0x0e 开显示,显示光标,光标不闪烁 0x0c 开显示,不显示光标 0x08 只开显示 0x06 地址加一,当写入数据的时候光标右移设定显示屏或光标移动方向指令 0x18 字符全部左移一格,但光标不动 0x1c 字符全部右移一格,但光标不动 0x10 光标左移 1 格,且 AC 值减 1 0x1
[单片机]
使用MSP430G2 LaunchPad开发板连接LCD液晶显示屏的方法
本篇文章是我们学习使用Energia IDE开发环境编程MSP430G2 LaunchPad的教程系列中的第三篇教程。在上一篇教程中,我们学习了如何控制MSP430G2 LaunchPad开发板上的数字输入和输出引脚。在本教程中,我们将学习如何将LCD与开发板连接,以便我们可以显示一些有用的信息。 我们在这个项目中使用的LCD是最常用的16×2点阵式液晶显示器,也就是所谓的字符显示器。我们大多数人都会通过公共PCO或其他电子项目来接触到这一点。像这样的显示对于我们将来的教程中显示数据和其他调试信息将非常方便。由于提供了库,将该LCD与MSP430连接起来非常简单。所以让我们开始学习吧! 所需材料 ● 德州仪器的MS
[单片机]
51单片机控制LCD12864液晶屏显示图形菜单
想了很久,每次做菜单都受限于12864字符模式的各种限制,比如字体大小,不能显示图标等等,没有任何效果,这次就来个彻底的解脱,写一个单函数就能完成所有功能的函数,只需要2个图片就能完成任意菜单内容的菜单,可以有2的8次方=256个选择结果,应该能满足所有的要求了吧?菜单的内容就是图片的内容,因此可以显示任意大小的图形文字混合的菜单条目,比如使用字符模式,一屏只能显示4行菜单(64/16=4),且只能显示汉字和字符等,显示位置等等的都受限,而这个方法可以显示比如12*12(64/12=5行)的字符,8*8(64/8=8行)的字符,甚至不是字符,可以是图标+文字+任意其他的图像,只要是图片能显示的,都可以。。哈哈,比较复杂,现在只写了一
[单片机]
51单片机——LCD1602液晶屏 C语言入门编程
LCD1602: 1602液晶也叫1602字符型液晶,它能显示2行字符信息,每行又能显示16个字符。它是一种专门用来显示字母、数字、符号的点阵型液晶模块。它是由若 干个5x7的点阵字符位组成,每个点阵字符位都可以用显示一个字符, 每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能很好的显示图片。 字符代码0x00~0x0F为用户自定义的字符图形RAM(对于5X8点阵的字符,可以存放8组,5X10点阵的字符,存放4组),就是CGRAM了。0x20~0x7F为标准的ASCII码,0xA0~0xFF为日文字符和希腊文字符,其余字符码(0x10~0x1F及0x80~0x9F)没有定义。写入
[单片机]
MSP430G2553 LCD1602 IIC 显示屏 PCF8574
地址0x27。硬件IIC效果: 软件IIC在MSP430F149的效果:
[单片机]
iPhone SE 3推迟至2024年发布:LCD屏、约6英寸
今 天,业内人士Ross Young爆料,iPhone SE 3推迟到2024年发布,屏幕是LCD,尺寸在5.7-6.1英寸之间。 此前苹果曾在iPhone XR、iPhone 11上使用了LCD屏,以iPhone XR为例,其屏幕尺寸为6.1英寸,形态为刘海。 之前有爆料称iPhone 14系列可能会采用挖孔屏,如果iPhone SE 3 2024年发布的话,那么不排除会采用挖孔屏的可能。 另外,由于LCD屏下指纹技术尚未量产商用,而且其屏下指纹技术体验不及OLED屏幕指纹,因此苹果iPhone SE 3上使用大尺寸LCD屏幕的话,那么指纹识别要么放到侧边,要么会像iPhone XR那样使用Face ID替
[手机便携]