1、LCD控制器的功能
(1)取数据:把framebuffer的地址告诉LCD控制器。另外需要把framebuffer中对应每个像素的数据格式告诉控制器,例如bpp(Bits Per Pixels),分辨率等
(2)发数据:把时序告诉LCD控制器,设置引脚的极性(是高电平有效还是低电平有效)
2、LCD控制器框图
(1)图中的LCDCDMA是从framebuffer取数据的模块,我们都知道DMA是不用在CPU的参与下就能直接操作内存的。
(2)我们通过设置REGBANK中寄存器,然后通过TIMEGEN就能产生各种时序了,例如我们上一篇文章提到的CLK、Hsync、Vsync等
3、TFT LCD控制器的操作
我们这款芯片支持两种类型的LCD,分别是TFT和STN,我们一般用TFT,所以这里也以TFT类型的LCD为例。
(1)
当使用16BPP的时候,通过设置BSWP和HWSWP的值,可以得到地址000H的高16位还是低16位表示第一个像素。
上面的16为数据通过哪个引脚传送数据,设置硬件的时候可以由下面的图看出来,5:6:5 = R:G:B
(2)24BPP的情况
我们可以看到高一字节的数据是没有用到的,也就是浪费掉的,所以叫Dummy Bit
(3)
另外还有一种8BPP的显示格式。这个格式会涉及到调色板的概念
(3)调色板的概念
假如LCD的数据位为16位,那么framebuffer应该每个像素占据16bit,但是为了节省空间,我们用了8bit表示一个像素,这时候就需要引入调色板才能正确传输16位的数据给LCD的数据线。
调色板其实就是一片内存,这里面每一格存放16bit的数据。当LCD控制器从framebuffer中去处8bit的数据后,不是直接传给LCD的数据线,而是用这个8bit作为索引,从调色板中取出16bit的数据,然后发给LCD。
所以我们可以说8BPP格式时,framebuffer中存放的是伪彩色,16BPP或者24BPP格式时,framebuffer中存放的才是真彩色。如果以后用了8BPP格式,首先要设置调色板。