S3C2410 LCD 驱动程序移植及GUI程序编写
2012-10-14
刘利国
标签: S3C2410

3.好了,在硬件工程师的帮助下,硬件接好了,那就该我们做软件的干活了,编写驱动吧

1)

让我们首先看一下 RGB数据结构的定义

在 s3c2410fb.c 中找到如下信息

static struct s3c2410fb_rgb xxx_tft_rgb_16 = {

red:{offset:11, length:5,},

green: {offset:5, length:6,},

blue: {offset:0, length:5,},

transp: {offset:0, length:0,},

};

这是对 16 位色的 RGB 颜色进行定义,R:G:B:I = 5:6:5:0,即我们常说的565 显示方式。呵呵,为了让有些朋友更好的理解,我多罗嗦几句,我们随便写一个 16 位数据的颜色数据(为了分析的方便,我把它写成二进制)

RGB = 10101101 10111001

根据上面的结构定义我们来分析一下 RGB 各是多少(因为没有透明色,我们不去分析)

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:200,就是这个颜色

e)那么反过来,有了 RGB的值我们该如何,因为 RGB 的有效位数都不足一个字节(8 位),那我们只能忍痛割爱了,舍弃掉低位数据,代码如下

r=(rDat&0xF8);

g=(gDat&0xFC);

b=(bDat&0xF8);

hight=r|(g>>5);

low=(g<<3)|(b>>3);

color=(hight<<8)|low;

记住,这段代码在 GUI 程序中是有用的

2) 对于 8 位色(256 色)的数据结构定义

static struct s3c2410fb_rgb rgb_8 = {

red:{offset:0, length:4,},

green: {offset:0, length:4,},

blue: {offset:0, length:4,},

transp: {offset:0, length:0,},

};

这是原程序中给出的定义,我感觉有些错误,我认为应该为 R:G:B = 3:3:2

static struct s3c2410fb_rgb rgb_8 = {

red:{offset:5, length:3,},

green: {offset:2, length:3,},

blue: {offset:0, length:2,},

transp: {offset:0, length:0,},

};

因为没有亲自去调试,所以没有什么发言权,希望做过这方面的朋友给我一个答案。

3)

对于 CSTN 屏,一般都能达到 12 位色(4096 色)的,S3C2410 这颗芯片也是支持的,但是在软件方面要做的工作比较大,因为从原有的代码,我们找不到任何 12位色显示的迹象,另外 Linux 本身好像也不支持 12 位色的,如果你要作的事情比较简单,那你就自己写代码吧。我在此给出 12位色的数据结构定义

static struct s3c2410fb_rgb xxx_stn_rgb_12 = {

red:{offset:8, length:4,},

green: {offset:4, length:4,},

blue: {offset:0, length:4,},

transp: {offset:0, length:0,},

};

但是要完成 12 位色 CSTN 屏驱动程序的编写还有一些工作要做,稍后我会适当的向大家介绍。

4)

接着看下面的代码,其中要修改的部分已经用绿色标出,下面分别进行介绍。

a)颜色位数

bpp:16

如果你的 LCD 屏是 TFT 的,那一般都可以达到 16 位色或 24 位色,这也要看硬件怎么连接了,根据情况进行设置即可;

如果你的 LCD屏是 CSTN的,按照常规 LCD手册的介绍,一般都可以支持到8 位色(256色),而实际的 CSTN屏的显示效果都可以达到 12 位色(4096色),那可有很大的区别的,如果你要选择便宜的屏又要丰富的颜色,那就费点劲,完成 12 位色的驱动。

b)LCD屏的宽度和高度

xres: 240

yres: 320

这个就不用多说了,你的屏的分辨率是多少就设置成多少呗。

共 6 页   上一页123456下一页
可能会用到的工具/仪表
本站简介 | 意见建议 | 免责声明 | 版权声明 | 联系我们
CopyRight@2024-2039 嵌入式资源网
蜀ICP备2021025729号