注:以下内容学习于韦东山老师arm裸机第一期视频教程
参考文章http://www.cnblogs.com/shangdawei/p/4760933.html
一.LCD硬件原理
1.1 LCD可以看作是一个电子枪一边移动一边发出颜色
1.1.1 电子枪如何移动?
LCD上有一条CLK信号线,每来一个CLK电子枪就会移动一个像素
1.1.2 颜色如何确定?
颜色有RGB三组信号线来确定
1.1.3 电子枪如何得知应跳到下一行?
HSYNC信号线
1.1.4 电子枪扫描完最后一行后如何得知回到原点?
VSYNC信号线
1.1.5 RGB线上的数据从哪里来?
来自于一段内存(frame buffer)
1.2 JZ2440LCD接口原理图如下
![](https://i-blog.csdnimg.cn/blog_migrate/56178d87fdd2c472c2e3b0d9e39354a7.png)
其中VLINE信号线代表了HSYNC信号
VFRAME信号线代表了VSYNC信号
RGB信号线来传输数据(R0-R5,G0-G6,B0-B5,565格式,即一个像素使用16位来表示,16bpp(bit per pixel))
注意LCD上有8根R,8根G,8根B数据线,可以表示24bpp,但是只接到开发板上16条线
1.3 LCD显示配置图如下
![](https://i-blog.csdnimg.cn/blog_migrate/4582f220b1b2ed2157bc68fc599ea5e6.png)
HFP->一行中最后一个信号发出之后需要经过多久才会接受HSYNC信号,即代表右边的黑框
HBP->HSYNC信号接受之后需要经过多久才会发出一行中第一个像素的信号,即代表左边的黑框
VFP->最后一行中的最后一个信号发出之后需要经过多久才会接受VSYNC信号,即代表下边的黑框
VBP->VSYNC信号接受之后需要经过多久才会发出第一行的第一个像素的信号,即上边的黑框
二.LCD控制器
2.1 LCD控制器的作用
2.1.1 从内存(frame buffer)中取出像素的数据,(我们需要将framebuffer的地址告诉控制器,bpp,分辨率)
2.1.2 配合其他信号一起将数据发送给LCD(将LCD的时序设置给LCD控制器,设置引脚的极性)
2.2 LCD控制器结构图如下
LCDDMA会从内存中取出数据,然后发送到VD[23:0]引脚上去
我们同时需要设置寄存器来控制LCD控制器来让他发出合适的时序
因此,我们只需要将数据填写到frame buffer中去即可,硬件会自动帮助我们将数据刷到LCD中去
2.3 frambuffer数据格式的设置
如下图:
对于16bpp的数据格式
当BSWP = 0, HWSWP = 0,0地址的高16位存放第一个数据,低16位存放第二个数据,4地址的高16位存放第三个数据,低16位存放第四个数据
当BSWP = 0, HWSWP = 1,0地址的低16位存放第一个数据,高16位存放第二个数据,4地址的低16位存放第三个数据,高16位存放第四个数据
显然第二种情况更容易操作,我们使用第2种情况
2.4 设置数据的传输引脚(16位数据通过VD[23:0]的哪几条来传输数据)
如下图:
对于16位数据,565或者5551
在画原理图时需要根据这个图来进行线的连接
对于565格式:8条红数据,8条绿数据,8条蓝数据,但是分别只用了高5条,高6条,高5条
2.5 2440时序图如下:
我们需要根据LCD的数据手册来设置这个时序图
三.调色板的概念
当使用16