1、LCD控制器
1) 显示控制器主要负责从内存中或者FIFO通道中获取图像/视频数据,以一定的方式叠加、混合,将最终的图像送出到外部液晶显示器去显示,并具有0、1、2层的FIFO输入接口及一个外部FIFO输出接口。
2) 什么是LCD控制器
LCD控制器同LCD驱动器是有着本质区别的。简单来说LCD控制器在嵌入式系统中的功能如同显卡在计算机中所起到的作用。LCD控制器负责把显存(可能是内存中的指定域)中的LCD图形数据传输到LCD驱动器(LCD driver)上,并产生必须的LCD控制信号,从而控制和完成图形的显示,翻转,叠加,缩放等一系列复杂的图形显示功能。LCD驱动器则只负责把CPU发送的图像数据在LCD显示出来,不会对图像做任何的处理。
3) 为什么要使用LCD控制器
LCD控制器可以兼容各种各样的CPU接口
LCD控制器可以兼容各种各样的LCD模块的接口
硬件完成复杂图像显示功能(缩放,翻转,叠加,动态等等)
满足高分辨率的显示需求
2、帧率与刷新率区别
帧数(帧率),就是画面改变的速度,只要显卡够强,帧数就能很高,只要帧数高画面就流畅。理论上,每一帧都是不同的画面。60fps就是每秒钟显卡生成60张画面图片。
刷新率,顾名思义,就是显卡将显示信号输出刷新的速度。60赫兹(hertz)就是每秒钟显卡向显示器输出60次信号。
假设帧数是刷新率的1/2,那么意思就是显卡每两次向显示器输出的画面是用一幅画面。相反,如果帧数是刷新率的2倍,那么画面每改变两次,其中只有1次是被显卡发送并在显示器上显示的。 所以高于刷新率的帧数都是无效帧数,对画面效果没有任何提升,反而可能导致画面异常。
3、LCD控制器与显卡、LCD驱动芯片的区别
独立显卡,就是个GPU模组加自己相应的外设,具备独立显存(RAM)。
集成显卡,是GPU与CPU共用内存。
MCU中的LCD控制器与CPU公用内存。
4、LCD控制与刷新率、帧率的关系
依照刷新率的速度,每刷一次,显示数据都需要从内存中读取数据输出给LCD显示。在这个情况之下,帧率跟刷新率就应该一样的了,即只要改变LCD控制器所指向内存范围内的内容,就可以以刷新率的速度(帧率)输出。当然这个内存关系非常密切,如果内存速度(总线频率)跟不上,而LCD配置的刷新率太快,也就是出现了内存带宽不够的现象,导致显示闪或者抖动的现象(特别是下半屏)。
另:内存带宽的计算公式:带宽=总线宽度×总线频率×一个时钟周期内交换的数据包个数
5、显卡、LCD驱动芯片与刷新率和帧率的关系
显卡或者驱动芯片例如SSD1963、ILI9341,他们内置有framebuffer(SRAM),刷新率就是显卡将显存输出给显示器显示,或者驱动芯片将framebuffer的内容输出给显示器显示。帧率就是CPU对framebuffer/显存的改变速率。
6 号外: S3C2410的LCD控制器的特性
LCD的数据buffer和Scrolling实现说明
很多人可能都会问驱动LCD的数据应该放在什么地方,是怎么被搬运过去的。其实很简单,S3C2410的LCD控制模块自带了DMA控制器,我们只要在SDRAM里面开一块空间,然后设定要DMA的起始地址(LCDSADDR1寄存器)和结束地址LCDSADDR2)就OK了。(实际上,应该说 大部分的带有LCD控制器的MCU,都是采用类似的方式)
不过S3C2410的寄存器提供了一种滚动的显示模式,这个主要是靠LCDSADDR3寄存器实现的。理解起来可能有些麻烦,我们可以这样想象:滚动显示的含义就好比是我们拿着一个放大镜在大地图上移动,而放大镜下方的图像就是我们应该显示的东西。假设LCD的大小还是240X320的,我们在SDRAM中开了一个480X640个象素的缓冲区,相当于四倍图像的大小。那么如果我们要截取一块240X320方形画面,就要在取完一行的数据(PAGEWIDTH=240)以后跳过OFFSIZE(此处240)个象素(对于16bit)再取数据,得到的才是大画面里对应的下一行数据。
总而言之,滚动显示是一种用空间来换取软件效率的方法。需要注意的是,OFFSIZE和PAGEWIDTH的值必须和LCD的大小已经缓冲区的实际尺寸对应上,
不然屏幕就乱闪了;另外,LCDSADDR2指向的是整个大缓冲区之后的第一个地址。