当前位置:首页 > 单片机 > 单片机
[导读]1. 为了不让大家觉枯燥,让朋友们更好的理解,我以一个实例来叙述 S3C2410 下一个驱动程序的编写(本文的初始化源码以华恒公司提供的 s3c2410fb.c 为基础)及简单的 GUI程序的编写。2. 拿到一块 LCD,首先要将 LCD的

1. 为了不让大家觉枯燥,让朋友们更好的理解,我以一个实例来叙述 S3C2410 下一个驱动程序的编写(本文的初始化源码以华恒公司提供的 s3c2410fb.c 为基础)及简单的 GUI程序的编写。

2. 拿到一块 LCD,首先要将 LCD的各个控制线与 S3C2410 的 LCD控制信号相接,当然,电源也一定要接入了,否则不亮可别找我。另外需要注意以下几点:

1) 背光:对于大部分的彩色 LCD一定要接背光,我们才能看到屏上的内容;

2) 控制信号:不同的 LCD 厂商对于控制信号有不同的叫法,S3C2410 芯片手册也给出了一个信号的多个名称(图一),这就要看你们硬件工程师的功底了,

0 && image.height>0){if(image.width>=510){this.width=510;this.height=image.height*510/image.width;}}" border=0>

图一 S3C2410 手册上给出的控制信号的名称及解释

这里我做一个简单的介绍:

VFRAME:LCD 控制器和 LCD 驱动器之间的帧同步信号。该信号告诉 LCD屏的新的一帧开始了。LCD 控制器在一个完整帧显示完成后立即插入一个VFRAME 信号,开始新一帧的显示;

VLINE:LCD控制器和 LCD驱动器之间的线同步脉冲信号,该信号用于 LCD驱动器将水平线(行)移位寄存器的内容传送给 LCD 屏显示。LCD 控制器在整个水平线(整行)数据移入 LCD驱动器后,插入一个 VLINE 信号;

VCLK:LCD控制器和 LCD驱动器之间的像素时钟信号,由 LCD控制器送出的数据在 VCLK的上升沿处送出,在 VCLK的下降沿处被 LCD驱动器采样;

VM:LCD驱动器的 AC 信号。VM 信号被 LCD驱动器用于改变行和列的电压极性,从而控制像素点的显示或熄灭。VM 信号可以与每个帧同步,也可以与可变数量的 VLINE 信号同步。

3) 数据线:也就是我们说的 RGB 信号线,S3C2410 芯片手册上都有详细的说明,由于篇幅关系,在此不一一摘录,不过需要与硬件工程是配合的是他采用了哪种接线方法,24 位 16 位或其它。对于 16 位 TFT 屏又有两种方式,在写驱动前你要清楚是 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逻辑电压电路图(此图由华恒公司提供)

0 && image.height>0){if(image.width>=510){this.width=510;this.height=image.height*510/image.width;}}" border=0>

6) 最后还有一个问题,有些 LCD 屏还需要一颗伴侣芯片,就是 S3C2410 手册中的那颗 LPC3600。这可能在 LCD 的手册中都有论述吧,我没有遇到过这样的屏,所以也不是很清楚。那么是不是所有的屏与 S3C2410相接都需要那个讨厌的家伙呢?这是好多人(包括我)在最开始都会有的疑问,不过现在的大部分 LCD 屏应该都不需要这个讨厌的家伙了,屏的控制信号直接与 S3C2410 的控制信号相接就可以了,至少我还没有遇到过。

7) 还得提醒大家一下,S3C2410到 LCD屏的连线千万千万别超过 0.5 米,否则会给你带来麻烦,我也是吃过苦头的,LCD屏上面的部分显示任何信息都是正确的,而只有屏的底部会有时正确有时错误,折腾了好一阵,才知道是连线太长的缘故!

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) 接着看下面的代码,其中要修改的部分已经用绿色标出,下面分别进行介绍。

0 && image.height>0){if(image.width>=510){this.width=510;this.height=image.height*510/image.width;}}" border=0>

a) 颜色位数

bpp:16

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

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

b) LCD屏的宽度和高度

xres: 240

yres: 320

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

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

0 && image.height>0){if(image.width>=510){this.width=510;this.height=image.height*510/image.width;}}" border=0>

图二 LCD屏资料

有了这些信息,让我们看一下 LCD寄存器的设置。

LCD控制器1

0 && image.height>0){if(image.width>=510){this.width=510;this.height=image.height*510/image.width;}}" border=0>

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

0 && image.height>0){if(image.width>=510){this.width=510;this.height=image.height*510/image.width;}}" border=0>

对于 TFT 屏必须要填,至于什么意思怎么翻译,相信大家都比我的水平强,自己翻译吧。我只说明从 LCD中如何将这个值“扣”出来。

很容易,看一下图二 LCD屏资料,对比一下得出如下信息:

LCD2_VBPD:


Vertical back porch 典型值为 7

LCD2_VFPD:


Vertical front porch 典型值为 4

LCD2_VSPW:


Vsync Valid width 典型值为 2

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭