s3c2410下lcd驱动程序移植及gui程序编写

上传人:xzh****18 文档编号:46612362 上传时间:2018-06-27 格式:PDF 页数:16 大小:520.73KB
返回 下载 相关 举报
s3c2410下lcd驱动程序移植及gui程序编写_第1页
第1页 / 共16页
s3c2410下lcd驱动程序移植及gui程序编写_第2页
第2页 / 共16页
s3c2410下lcd驱动程序移植及gui程序编写_第3页
第3页 / 共16页
s3c2410下lcd驱动程序移植及gui程序编写_第4页
第4页 / 共16页
s3c2410下lcd驱动程序移植及gui程序编写_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《s3c2410下lcd驱动程序移植及gui程序编写》由会员分享,可在线阅读,更多相关《s3c2410下lcd驱动程序移植及gui程序编写(16页珍藏版)》请在金锄头文库上搜索。

1、S3C2410 下 LCD 驱动程序移植及 GUI 程序编写 write by llg S3C2410 下 LCD 驱动程序移植 S3C2410 下 LCD 驱动程序移植 及 GUI 程序编写 及 GUI 程序编写 Write by llg 著作权所有:刘利国 Write by llg 著作权所有:刘利国 如转载请告知作者 如转载请告知作者 laoliulaoliu-laoliulaoliu- 并注明出处 并注明出处 www.laoliu-www.laoliu- 1. 为了不让大家觉枯燥,让朋友们更好的理解,我以一个实例来叙述 S3C2410 下一个驱动 程序的编写(本文的初始化源码以华恒公司

2、提供的 s3c2410fb.c 为基础)及简单的 GUI 程序的编写。 2. 拿到一块 LCD,首先要将 LCD 的各个控制线与 S3C2410 的 LCD 控制信号相接,当然, 电源也一定要接入了,否则不亮可别找我。另外需要注意以下几点: 1) 背光:对于大部分的彩色 LCD 一定要接背光,我们才能看到屏上的内容; 2) 控制信号:不同的 LCD 厂商对于控制信号有不同的叫法,S3C2410 芯片手册也给 出了一个信号的多个名称(图一) ,这就要看你们硬件工程师的功底了, 图一图一 S3C2410 手册上给出的控制信号的名称及解释手册上给出的控制信号的名称及解释 这里我做一个简单的介绍: ?

3、 VFRAME:LCD 控制器和 LCD 驱动器之间的帧同步信号。该信号告诉 LCD 屏的新的一帧开始了。LCD 控制器在一个完整帧显示完成后立即插入一个 VFRAME 信号,开始新一帧的显示; ? VLINE:LCD 控制器和 LCD 驱动器之间的线同步脉冲信号,该信号用于 LCD 驱动器将水平线(行)移位寄存器的内容传送给 LCD 屏显示。LCD 控制器在 整个水平线(整行)数据移入 LCD 驱动器后,插入一个 VLINE 信号; ? VCLK:LCD 控制器和 LCD 驱动器之间的像素时钟信号,由 LCD 控制器送出 的数据在 VCLK 的上升沿处送出,在 VCLK 的下降沿处被 LCD

4、 驱动器采样; ? VM:LCD 驱动器的 AC 信号。VM 信号被 LCD 驱动器用于改变行和列的电压 极性,从而控制像素点的显示或熄灭。VM 信号可以与每个帧同步,也可以与 可变数量的 VLINE 信号同步。 3) 数据线:也就是我们说的 RGB 信号线,S3C2410 芯片手册上都有详细的说明,由 于篇幅关系,在此不一一摘录,不过需要与硬件工程是配合的是他采用了哪种接线 方法,24 位 16 位或其它。对于 16 位 TFT 屏又有两种方式,在写驱动前你要清楚- 1 -QQ:313638714 http:/S3C2410 下 LCD 驱动程序移植及 GUI 程序编写 write by l

5、lg 是 5:6:5 还是 5:5:5:I,这些与驱动的编写都有关系 4) 要注意一下 LCD 的电源电压,对于手持设备来说一般都为 5V 或 3.3V,或同时支 持 5V 和 3.3V,如果 LCD 的需要的电源电压是 5V,那就要注意了,S3C2410 的逻 辑输出电压只有 3.3V,此时一定要让你们的硬件工程师帮忙把 S3C2410 的逻辑输 出电压提高到 5V,否则你可能能将屏点亮,但显示的图像要等到太阳从西边出来 的那一天才能正常,呵呵,我可吃过苦头的哦! 5) 3.3V 逻辑电压转变成 5V 逻辑电压电路图(此图由华恒公司提供) 6) 最后还有一个问题,有些 LCD 屏还需要一颗伴

6、侣芯片,就是 S3C2410 手册中的那 颗 LPC3600。这可能在 LCD 的手册中都有论述吧,我没有遇到过这样的屏,所以 也不是很清楚。 那么是不是所有的屏与 S3C2410 相接都需要那个讨厌的家伙呢?这 是好多人(包括我)在最开始都会有的疑问,不过现在的大部分 LCD 屏应该都不 需要这个讨厌的家伙了,屏的控制信号直接与 S3C2410 的控制信号相接就可以了, 至少我还没有遇到过。 7) 还得提醒大家一下,S3C2410 到 LCD 屏的连线千万千万别超过 0.5 米,否则会给你 带来麻烦,我也是吃过苦头的,LCD 屏上面的部分显示任何信息都是正确的,而只 有屏的底部会有时正确有时

7、错误,折腾了好一阵,才知道是连线太长的缘故! 3. 好了,在硬件工程师的帮助下,硬件接好了,那就该我们做软件的干活了,编写驱动吧 1) 让我们首先看一下 RGB 数据结构的定义 在 s3c2410fb.c 中找到如下信息 这是对 16 位色的 RGB 颜色进行定义,R:G:B:I = 5:6:5:0,即我们常说的 565 显示方式。呵呵,为了让有些朋友更好的理解,我多罗嗦几句,我们随便写一 个 16 位数据的颜色数据(为了分析的方便,我把它写成二进制) RGB = 10101101 10111001 根据上面的结构定义我们来分析一下 RGB 各是多少(因为没有透明色,我们不去 分析) - 2

8、-QQ:313638714 http:/S3C2410 下 LCD 驱动程序移植及 GUI 程序编写 write by llg a) blue: offset: 0, length: 5 偏移量为 0,长度为 5,我们从那个 RGB 中提取出 来便是“11001” b) green:offset: 5, length: 6 偏移量为 5,长度为 6,我们从那个 RGB 中提取出 来便是 101 101 c) red: offset: 11, length: 5 偏移量为 11, 长度为 5, 我们从那个 RGB 中提取出 来便是 10101 d) 我们得到了一个 RGB 值为 13:45:20

9、0,就是这个颜色 e) 那么反过来,有了 RGB 的值我们该如何,因为 RGB 的有效位数都不足一个字 节(8 位) ,那我们只能忍痛割爱了,舍弃掉低位数据,代码如下 记住,这段代码在 GUI 程序中是有用的 2) 对于 8 位色(256 色)的数据结构定义 这是原程序中给出的定义,我感觉有些错误,我认为应该为 R:G:B = 3:3:2 因为没有亲自去调适, 所以没有什么发言权, 希望做过这方面的朋友给我一个答案。 3) 对于 CSTN 屏,一般都能达到 12 位色(4096 色)的,S3C2410 这颗芯片也是支持 的,但是在软件方面要做的工作比较大,因为从原有的代码,我们找不到任何 12

10、 位色显示的迹象,另外 Linux 本身好像也不支持 12 位色的,如果你要作的事情比 较简单,那你就自己写代码吧。我在此给出 12 位色的数据结构定义 - 3 -QQ:313638714 http:/S3C2410 下 LCD 驱动程序移植及 GUI 程序编写 write by llg 但是要完成 12 位色 CSTN 屏驱动程序的编写还有一些工作要做,稍后我会适当的 向大家介绍。 4) 接着看下面的代码,其中要修改的部分已经用绿色标出,下面分别进行介绍。 a) 颜色位数 bpp:16 如果你的 LCD 屏是 TFT 的,那一般都可以达到 16 位色或 24 位色,这也要看 硬件怎么连接了,

11、根据情况进行设置即可; 如果你的 LCD 屏是 CSTN 的,按照常规 LCD 手册的介绍,一般都可以支持到 8 位色 (256 色) , 而实际的 CSTN 屏的显示效果都可以达到 12 位色 (4096 色) , 那可有很大的区别的,如果你要选择便宜的屏又要丰富的颜色,那就费点劲, 完成 12 位色的驱动。 b) LCD 屏的宽度和高度 xres: 240 yres: 320 这个就不用多说了,你的屏的分辨率是多少就设置成多少呗。 c) 寄存器的设置,这些也不困难。下面就让我们一起一口一口的将 S3C2410 的 LCD 寄存器统统吃掉! ? 首先介绍一下我这块屏,这是日立的一块 TFT

12、屏,大小为 640X240,可 以支持到 16 位色。 ? 与驱动有关的一张表 - 4 -QQ:313638714 http:/S3C2410 下 LCD 驱动程序移植及 GUI 程序编写 write by llg 图二图二 LCD 屏资料屏资料 有了这些信息,让我们看一下 LCD 寄存器的设置。 ? LCD 控制器 1 ? LINECNT 这是一个只读的数据,我们当然没有必要理它 ? CLKVAL 这可是一个很有用的参数, 其实没必要管它后面 的计算,我们可以通过实际的测试来得出一个有效的值,对于- 5 -QQ:313638714 http:/S3C2410 下 LCD 驱动程序移植及 GU

13、I 程序编写 write by llg 320x240 的屏一般设置为 7 就可以了,而对于 640x480 的屏,该值可 以小一点。对于后面的计算公式及注释(STN: CLKVAL = 2,TFT: CLKVAL = 0),我不知道该如何去理解,因为在实际的应用中我点了 一块 640X240 的 CSTN 屏,当我的 CLKVAL = 1 时才达到了一个最佳的 效果,这似乎与说明书相违背,我也解释不清为什么?! ? PNRMODE 这个应该不用多做解释,大家一看都明白了,对 于 TFT 屏,只能设置成 11,而对于 CSTN 屏,可能需要根据实际屏的 信息去设置, 我遇到的屏都设置成 10,

14、 即 8bit 单扫描模式。 对于 4bit 单扫描、4bit 双扫描、8bit 单扫描的说明在 s3c2410 的手册中有详 细的介绍,大家可以去参考一下。 ? BPPMODE 这个参数更不用多说了吧,就是设置屏的颜色 位数喽。 ? 这些参数的设置都很简单,我给出我这块屏的定义: ? 同时,我也给出一块 CSTN 屏的寄存器参数信息 ? CD 控制器 2 L对于 TFT 屏必须要填,至于什么意思怎么翻译,相信大家都比我的水平rch 典型值为 7 ? h 典型值为 4 ? 典型值为 2 ? 会提到,此处不必理会。 强,自己翻译吧。我只说明从 LCD 中如何将这个值“扣”出来。 很容易,看一下图二图二 LCD 屏资料,屏资料,对比一下得出如下信息: ? LCD2_VBPD: Vertical back po LCD2_VFPD: Vertical front porc LCD2_VSPW: Vsync Valid width 关于 LINEVAL 在程序的后面将 ? 经过分析,我们知道了如何设置 LCD2: ? 对于 STN (CSTN) 屏, 这个寄存器的设置最简单, 将 VBPD、 VFPD、 VS

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号