1.时钟信号.
LCD一般需要三个时序信号:VSYNC、HSYNC和VCLK。
s3c2440处理LCD的时钟源是HCLK,每个lcd都需要有一个合适的vclk(像素时钟信号,具体查手册得之)。通过寄存器LCDCON1中的CLKVAL可以调整VCLK频率大小,对应关系如下:VCLK=HCLK÷[(CLKVAL+1)×2]。所以相应操作是先阅读相应《TFT屏手册》得到合适的vclk后再根据芯片HCLK得到CLKVAL的值写入寄存器中。LCD具体需要的其他时钟信号在下面控制寄存器中说明。
2.内存分布:
LCD显示可看成是在内存中先虚拟排列一个矩阵再通过LCDWCDMA拿到VD上,扫描到屏幕上去。
而s3c2440支持1-24BPP。对于本文的16BPP来说,每个像素点用16位来存储颜色显示。对于RGB比为5:6:5的16PBB来说,其内存分布如下图:
由于是32位ARM芯片故数据存储由1个CPU地址(CPU可识别的地址)存储2个像素数据,即4个存储地址对应2个像素数据。如存储地址(000H-003H)存储P1和P2,但CPU识别000H。比如定义一个int变量(4字节),一个存储地址存储一个字节,故此变量要用4个存储地址存放。但是变量地址只有一个就是4个地址中的最低位地址。故BSWP和HWSWP用来控制4个存储地址如何存放2个像素点,VD是如何取数据显示到屏幕,具体控制如上图所示。最后的打印是一行上为P1,P2,P3,P4,P5,P6。
在这里解释一下字,字节,位。一般位是最小单位,一个字节等于8个位,而CPU一次能处理位数则是字。32位CPU一次能处理32位数据,即4个字节(对应4个存储地址),故一个字为4个字节。
其在VD上的显示如图所示。VD是s3c2440显示lcd的数据口,共24位。由于16BPP是16位,故没有用满。
最后如下图显示到屏幕上。
3.LCD的控制寄存器。
LCDCON1寄存器:
CLKVAL :决定VCLK的分频 比(上面已经提到过)。LCD控制器输出的VCLK是直接由系统总线(AHB)
出的VCLK在5~10MHz之间。
MMODE :VM信号的触发模式(仅对STN屏有效,对TFT屏无意义。)PNRMODE :选择当前的显示模式,
对于TFT屏而言,应选择[11],即TFT LCD panel。
BPPMODE :选择色彩模式,对于真彩显示而言,选择16bpp(64K色)即可满足要求。
设置时序:
先看时序图:
其中VSYNC是帧同步信号,VSYNC每发出1个脉冲,都意味着新的1屏视频资料开始发送。而HSYNC为行同步 信号,每个HSYNC脉冲都表明新的1行视频资料开始发送。而VDEN则用来标明视频资料的有效,VCLK是用来锁存视频资料的像数时钟。
在HSYNC信号先后会有水平同步信号前肩(HFPD)和水平同步信号后肩(HBPD)出现,在VSYNC信号先后会有垂直同步信号前肩(VFPD)和垂直同步信号后肩(VBPD)出现,在这些信号时序内,不会有有效像素信号出现,另外HSYNC和VSYNC信号有效时,其电平要保持一定的时间,它们分别叫做水平同步信号脉宽HSPW和垂直同步信号脉宽VSPW,这段时间也不能有像素信号。因此计算行频和场频时,一定要包括这些信号。HBPD、HFPD和HSPW的单位是一个VCLK的时间,而VSPW、VFPD和VBPD的单位是扫描一行所用的时间.。
在s3c2440中,所有的这些信号(VSPW、VFPD、VBPD、LINEVAL、HBPD、HFPD、HSPW和HOZVAL)都是实际值减1的结果。这些值是通过寄存器LCDCON2、LCDCON3和LCDCON4来配置,只要把这些值配置成与所要驱动的LCD中相关内容的数据一致即可。例如,我们所要显示的LCD屏大小为320×240,因此HOZVAL=320-1,LINEVAL=240-1。水平同步信号的脉宽、前肩和后肩分别为30、20和38,则HSPW=30-1,HFPD=20-1,HBPD=38-1;垂直同步信号的脉宽、前肩和后肩分别为3、12和15,则VSPW=3-1,VFPD=12-1,VBPD=15-1。
其他设置
在有些情况下,s3c2440的LCD时钟信号的默认极性与所控制的LCD时钟信号的极性相反,这时可以通过寄存器LCDCON5的相关位来改变某些时钟信号的极性。
LCDCON5寄存器:
VSTATUS :当前VSYNC信号扫描状态,指明当前VSYNC同步信号处于何种扫描阶段。
对于16bpp的 64K色显示模式,该设置位无意义。
INVVDEN、INVPWREN、INVLEND:是否翻转这些信号,一般为正常,不需要翻转。
FrameBuffer(显示缓冲区)的管理不同,必要时需要通过调整 BSWP 和 HWSWP 来适应GUI。
待续。。。