RA8875相信大家都熟悉吧?我们很多工程师都热衷于STM32+RA8875+emWin做界面显示,去年瑞佑又推出了同系列新产品RA8876/RA8877。
图形LCD控制器的系统主构架是:FPGA+DDR2+Nand-Flash,FPGA里面还跑了个8051,因为要做指令缓冲、FAT32文件系统、Nand-Flash驱动程序,这三样东西没有C语言单靠FPGA是没法实现的,其实这个图形LCD控制器和RA8875/RA8876最大的不同就在这3个地方,可以说在某些方面是RA8875/RA8876的升级版!当然成本也比RA8875/RA8876高出了一些,毕竟我们没有能力去做流片或者邦定,但是使用起来却及其简单、方便!还是先上图:
图形LCD控制器框架图:
其中I2C控制器是接外部RTC时钟芯片和触摸屏芯片用的,PWM控制器和蜂鸣器控制器其实就是1个I/O输出。
LCD控制器的Nand-Flash可以储存字库和图片,支持FAT32文件系统管理,通过N-LINK下载线连接电脑USB,就可以和U盘一模一样使用(使用系统自带驱动,写速度是3.2Mbytes/S,读速度是5.6Mbytes/S)
不会有人想拿来当U盘用吧?还是SLC颗粒的,哈哈。。。
这个是用图形LCD控制器做好的GUI2VGA图形卡:
两个2.54简牛插座一个是SPI接口的,另一个是Intel 8080接口的,VGA插座旁边那个是PS/2键盘和鼠标接口,因为市面上大部分USB鼠标和键盘都兼容PS/2,所以索性做成了USB插座;再过去那个4脚2.54排针是触摸屏插座,可以接15寸以上的4线电阻触摸屏都没问题,因为触摸屏程序是经过优化的,误差和跳动非常小!鼠标、键盘、触摸屏的触发事件是通过指令回传给CPU;屏幕上有鼠标光标显示,像电脑鼠标一样。
对于具备2D图形加速和指令缓冲功能的LCD控制器来说,其实用SPI接口发送指令显示图形、文字、图片就足够了,没必要用Intel 8080总线,麻烦而且显示速度基本一样,因为不管是自己做的图形库还是emWin,写像素操作都是非常少的,更何况20MHz的SPI接口写像素速度并不会慢。
特征:
1) 硬件2D图形加速协处理器,快速执行绘图、显示功能。
2) Nand-Flash作为字库和图片的储存器(结合N-LINK下载线和U盘一模一样使用),字库/图片随便用,非常方便。
3) 双显存自动管理设计,避免屏幕更新时出现”拉窗帘”现象。
4) 24位色(RGB888)显示,网络素材直接用,画面绝不失真。
5) 基于FAT/FAT32文件系统管理字库和图片,支持多级文件夹(子目录),在字库和图片数量非常多时,管理非常方便。
6) 可自行制作字库,支持多种字库工具生成的字库。
7) 字库显示编码格式支持ASCII、GB2312、GBK、BIG5、UNICODE(等宽/非等宽)。
8) 只支持16bbp(RGB565)/24bbp(RGB888)的BMP格式位图,可实现图片裁剪、透明显示。
9) 支持画点、线、圆、矩形和多边形等常用GUI功能。
10) 支持SPI(串行) 或者Intel8080(并行)通信接口。
11) 经优化的高精度四线电阻触摸屏支持。
12) 支持PS/2鼠标和PS/2键盘。
13) 支持4×6矩阵键盘。
14) RTC时钟显示。
15) 16级背光亮度调节。
16) 支持文本光标。
17) 带蜂鸣器。
注意了,以下功能是没有图形加速的:字体放大/缩小、字体旋转、图片放大/缩小、图片旋转、图片半透明显示、图层半透明叠加、图层淡入淡出;因为若要实现这些功能, FPGA成本可能要翻倍!
以下是1024×768分辨率下点亮32寸VGA显示器的效果:
除了EDIT控件以外,其他地方都贴了24位色的BMP图片,以下是这个界面的测试情况:
除了EDIT控件和下拉列表控件以外,其他地方都贴了24位色的BMP图片,以下是这个界面的测试情况:
现在的STM32F207VET6是裸跑emWin的,如果改成跑操作系统,加上其他任务的执行时间,STM32F207VET6的耗时势必也会增加;比如,假如其他任务的执行时间总共是100ms,那么STM32F207VET6的耗时将是229ms,图形LCD控制器的耗时还是272ms;假如其他任务的执行时间总共是200ms,那么STM32F207VET6的耗时将是329ms,图形LCD控制器的耗时将会和STM32F207VET6一样都是329ms。
在这里分析一下指令缓冲机制对整个显示系统的影响:
若显示设备使用的是传统TFT液晶屏时,CPU除了要运行用户程序之外还需要负责液晶图形绘制工作,“程序执行“和“图形绘制”只能是先后关系而不能并行执行,但如果“图形绘制”使用的是DMA机制,“程序执行“和“ 图形绘制”有时是并行执行,有时是先后执行:
若显示设备使用的是图形LCD控制器时,CPU在执行液晶图形绘制时是把所有的绘图操作在极短的时间内通过指令传输给图形LCD控制器,然后接着运行用户程序;这样在CPU运行用户程序的同时,图形LCD控制器也在执行绘图操作,所以“程序执行“和“ 图形绘制”是并行执行的:
指令缓冲还有个好处是提高图形LCD控制器的显示速度,比如用户CPU发了一条显示矩形的指令给LCD控制器,LCD控制器总要检查矩形有没有超出显示区吧?这个工作LCD控制器可以在DMA等待时间去处理,对显示时间没有影响;但如果没有指令缓冲机制的话,这些工作是要花显示时间的!
图形LCD控制器还有一个比RA8875/RA8876好的地方就是能实现文字剪切显示:
不要以为文字剪切显示是个简单的事情,用逻辑来实现并不那么简单,也许瑞佑觉得这个功能不重要所以没在RA8875/RA8876上实现,但在emWin应用中如果没有文字剪切显示的话就没法做移动窗口了!
最后做个列表对RA8876、SSD1963和图形LCD控制器做个比较:
功 能 |
RA8876 |
图形LCD控制器 |
SSD1963 |
MCU接口 |
8080/6800/I2C/SPI |
8080/SPI |
8080/6800 |
最大分辨率 |
多显存 |
双显存 |
单显存 |
显存区 |
多显存区,用户随意切换和操作各个显存区;可实现混合透明、画中画等 |
双显存区,操作区和显示区自动切换管理 |
单显存区 |
BTE区块传输引擎 |
显存/区域拷贝、光栅操作、混合透明、淡入淡出、画中画等 |
显存/区域拷贝 |
不支持 |
外部ROM |
SPI-Flash |
Nand-Flash |
不支持 |
外部ROM访问接口 |
不支持 |
USB(U盘模式) |
不支持 |
字库 |
SPI字库芯片 |
自己制作BIN字库 |
不支持 |
图片 |
BMP位图 |
BMP位图 |
不支持 |
2D图形加速协处理器 |
画点、线、曲线、椭圆、三角形、矩形、圆角矩形、区域填充 |
画点、线、椭圆、矩形、区域填充 |
不支持 |
指令缓存 |
不支持 |
支持 |
不支持 |
PS/2设备 |
不支持 |
PS/2鼠标、PS/2键盘 |
不支持 |
矩阵键盘 |
5×5矩阵键盘 |
4×6矩阵键盘 |
不支持 |
触摸屏 |
4线电阻 |
4线电阻(外接控制器IC) |
不支持 |
光标 |
4个图形光标 |
1个文本光标,1个图形光标 |
不支持 |
PWM |
2路 |
1路 |
不支持 |
RTC实时时钟 |
不支持 |
支持(外接RTC时钟IC) |
不支持 |
待机模式 |
支持 |
不支持 |
不支持 |