c)寄存器的设置,这些也不困难。下面就让我们一起一口一口的将 S3C2410 的LCD寄存器统统吃掉!首先介绍一下我这块屏,这是日立的一块 TFT 屏,大小为 640X240,可以支持到 16位色。与驱动有关的一张表

图二 LCD屏资料
有了这些信息,让我们看一下 LCD寄存器的设置。
LCD控制器1

- LINECNT---这是一个只读的数据,我们当然没有必要理它
- CLKVAL--- 这可是一个很有用的参数,其实没必要管它后面的计算,我们可以通过实际的测试来得出一个有效的值,对于320x240 的屏一般设置为 7 就可以了,而对于 640x480 的屏,该值可以小一点。对于后面的计算公式及注释(STN: CLKVAL >= 2,TFT: CLKVAL >= 0),我不知道该如何去理解,因为在实际的应用中我点了一块 640X240 的CSTN 屏,当我的 CLKVAL = 1 时才达到了一个最佳的效果,这似乎与说明书相违背,我也解释不清为什么?!
- PNRMODE--- 这个应该不用多做解释,大家一看都明白了,对于 TFT 屏,只能设置成 11,而对于 CSTN 屏,可能需要根据实际屏的信息去设置,我遇到的屏都设置成 10,即 8bit 单扫描模式。对于4bit单扫描、4bit 双扫描、8bit 单扫描的说明在 s3c2410 的手册中有详细的介绍,大家可以去参考一下。
- BPPMODE--- 这个参数更不用多说了吧,就是设置屏的颜色位数喽。
- 这些参数的设置都很简单,我给出我这块屏的定义:
lcdcon1: LCD1_BPP_16T | LCD1_PNR_TFT | LCD1_CLKVAL(1),
- 同时,我也给出一块 CSTN 屏的寄存器参数信息
lcdcon1: LCD1_BPP_12S | LCD1_PNR_8S | LCD1_CLKVAL(9),
LCD控制器2
对于 TFT 屏必须要填,至于什么意思怎么翻译,相信大家都比我的水平强,自己翻译吧。我只说明从 LCD中如何将这个值“扣”出来。
很容易,看一下图二 LCD屏资料,对比一下得出如下信息:
- LCD2_VBPD:
Vertical back porch典型值为 7
- LCD2_VFPD:
Vertical front porch典型值为 4
- LCD2_VSPW:
Vsync Valid width典型值为 2
- 关于 LINEVAL 在程序的后面将会提到,此处不必理会。
- 经过分析,我们知道了如何设置 LCD2:
lcdcon2: LCD2_VBPD(7) | LCD2_VFPD(4) | LCD2_VSPW(2),
- 对于 STN(CSTN)屏,这个寄存器的设置最简单,将 VBPD、VFPD、VSPW 都设置成 Zero 就可以了。即
lcdcon2: LCD2_VBPD(0) | LCD2_VFPD(0) | LCD2_VSPW(0),
LCD控制器3
对于 TFT 屏,很容易将 HBPD 和 HFPD 找出来,如下
- LCD3_HBPD:
Horizontal back porch典型值为 37
- LCD3_HFBD:
Horizontal back porch典型值为 32
- 对于 HOZVAL 同样会在后面提到,此处暂时不管
- 经过分析,我们知道了如何设置 LCD3:
lcdcon3: LCD3_HBPD(37) | LCD3_HFPD(32) ,
- 对于(STN)CSTN屏,我没有很好的理解 WDLY 和 LINEBLANK 的真正涵义,通过改变这两个参数的值,我也没有得到特别明显的差异,我一般设置为:
lcdcon3: LCD3_WDLY_16 | 0x10 ,