在Linux下驱动STN彩*LCD

写范文发表于:2023-07-20 09:44:42

伴随着高*能嵌入式处理器的飞速发展与普及,特别是ARM处理器系列的出现,嵌入式系统的功能也变得越来越强大。以前的单*LCD已不能满足现今的各种多媒体应用,彩*LCD被越来越多地应用到嵌入式系统中。同时,在应用需求的促使下,许多工作在Linux下的图形界面软件包的开发和移植工作中都涉及到底层LCD驱动的开发问题。

在硬件采用IntelASSABET开发板,软件采用Linux2.4.19平台,编译器为arm-linux-gcc的交叉编译器作为开发的前提下,因为ASSABET开发板上使用的是Sharp3.9英寸320×240TFT彩*LCD,现改用Kyocera7.7英寸640×480STN型彩*LCD,所以通过对其Linux驱动程序进行改写和调试,成功地实现了对该种屏的驱动和显示。

LCD

控制器

LCD控制器的功能是显示驱动信号,进而驱动LCD显示器。在驱动LCD设计的过程中首要的是配置LCD控制器。在配置LCD控制器中最重要的一步则是帧缓冲区的指定。用户所要显示的内容皆是从缓冲区中读出,从而显示到屏幕上。帧缓冲区的大小由屏幕的分辨率和显示*彩数决定。驱动帧缓冲的实现是整个驱动开发过程的重点。

ASSABET开发板采用SA1110作为处理器。SA1110微处理器是Intel公司生产的一种基于StrongARM环境的微处理器。该处理器内部有一LCD驱动控制器,可支持单、双屏显示和最大1024×1024dpi。每个像素数据以4、8、12或16位编码后存储于外部存储器内,通过LCD的专用DAM控制器,被装入至532位的FIFO中。在双屏显示时,两个DMA通道分别负责上下屏幕的显示,但只有第一个DMA通道有调*板缓冲器。帧缓冲器中的已编码像素数据是作为指针指向256×12位的调*板。调*板的*调数据控制着抖动逻辑,以产生各种灰度和彩*信号并从LCD数据引脚输出。

显示屏

LCD选择Kyocera公司的7.7英寸STN型LCD。该LCD可在640×480分辨率的情况下提供12位彩*显示。该屏为双屏扫描模式,具有两个8位的数据通道,每种基*都由4位的抖动逻辑来产生15级灰度,因此可以显示最多153=3375种可能的颜*。

驱动LCD的设计

帧缓冲设备

帧缓冲设备为图像硬件设备提供了一种抽象化处理。它代表了一些视频硬件设备,允许应用软件通过定义明确的界面来访问图像硬件设备。这样软件无需了解任何涉及硬件底层驱动的东西(如硬件寄存器)。它允许上层应用程序在图形模式下直接对显示缓冲区进行读写和I/O控制等*作。通过专门的设备节点可对该设备进行访问,如/dev/fb*。

Linux下可支持多个帧缓冲设备,最多可达32个,即从/dev/fb0到/dev/fb31。通常情况下,缺省的帧缓冲设备为/dev/fb0。

在SA1110处理器的LCD控制器*作中,帧缓冲器用于存放全部屏幕的所有编码像素数据。在它的最低位地址处是32或512字节的缓冲器,用来存放调*板数据表。32位缓冲器用于4、12或16位像素编码的16项调*板;512字节缓冲器用于装入8位像素编码的256项调*板。在12或16位像素编码时,不使用调*板,此时的帧缓冲器的起始32字节必须填入全零。

主要结构体

structfb_fix_screeninfo中记录了帧缓冲设备和指定显示模式的不可修改信息。它包含了屏幕缓冲区的物理地址和长度。

structfb_var_screeninfo中记录了帧缓冲设备和指定显示模式的可修改信息。它包括显示屏幕的分辨率、每个像素的比特数和一些时序变量。其中变量xres定义了屏幕一行所占的像素数,yres定义了屏幕一列所占的像素数,bits_per_pixel定义了每个像素用多少个位来表示。

structfb_info是Linux为帧缓冲设备定义的驱动层接口。它不仅包含了底层函数,而且还有记录设备状态的数据。每个帧缓冲设备都与一fb_info结构相对应。其中成员变量modename为设备名称,fontname为显示字体,fbops为指向底层*作的函数的指针。

 

第2篇:STN-LCD彩屏模块

关键词:彩*STN-LCD模块LCMLED电荷泵升压器LDO背光板

越来越多的手机、PDA、数码相机和视屏游戏机采用STN-LCD全彩*显示器,因此,STN-LCD彩屏模块(LCM—LCDModule)的需求量激增,国产的LCD液晶显示器的质量已可与国外的媲美,许多手机设计、生产厂商开始要求使用国内LCD厂家生产的LCD彩屏模块。2001年全世界生产手机3.8亿部,2003年将增长到4.3亿部,2005年将增长到5.2亿部。2004年LCM彩屏手机会占整个手机产量的35-40%,因此STN-LCD彩屏模块(LCM)的年需求量会增长到几亿块。

LCM内部结构

STN-LCD彩屏模块的内部结构如图1所示,它的上部是一块由偏光片、玻璃、液晶组成的LCD屏,其下是白光LED和背光板,还包括LCD的驱动IC,和给LCD驱动IC提供一个稳定电源的低压差稳压器(LDO),二到八颗白光LED,LED驱动的升压稳压IC。

LCM电路结构

STN-LCD彩屏模块的电路结构如图2所示,外来电源Vcc经LDO降压稳压,向LCD驱动IC如三星的S6B33BOA提供工作电压,驱动彩*STN-LCD的液晶显示图形和文字;外来电源Vcc经电荷泵升压稳压,向白光LED如99-21UWC提供恒定的恒压、恒流电源,LED的白光经背光板反射,使LCD液晶的65K*彩充分表现出来,LED的亮度直接影响LCD*彩的靓丽程度。

LCM主要光电器件

lColourSTN-LCD

lLCDDriver:S6B33BOA

lLCDDriverLDO:AAT3221-2.8VAAT3221-3.0V

lWhiteLED:99-21UWC/TR899-215UWC/TR8

lLEDDriver:AAT3110AAT3113AAT3123AAT3134NCP5007NCP5008/9

lBacklightBoard

LCD

LCD液晶显示器是英文LiquidCrystalDisplay的简称,LCD属于平面显示器的一种,依驱动方式来分类可分为静态驱动(Static)、单纯矩阵驱动(SimpleMatrix)以及主动矩阵驱动(ActiveMatrix)三种。其中,被动矩阵型又可分为扭转式向列型(TwistedNematic;TN)、超扭转式向列型(SuperTwistedNematic;STN)及其它被动矩阵驱动液晶显示器;而主动矩阵型大致可区分为薄膜式晶体管型(ThinFilmTransistor;TFT)及二端子二极管型(Metal/Insulator/Metal;MIM)二种方式。TN、STN及TFT型液晶显示器因其利用液晶分子扭转原理之不同,在视角、彩*、对比及动画显示品质上有高低层次之差别,使其在产品的应用范围分类亦有明显区隔。以目前液晶显示技术所应用的范围以及层次而言,主动式矩阵驱动技术是以薄膜式晶体管型(TFT)为主流,多应用于笔记本电脑及动画、影像处理产品。而单纯矩阵驱动技术目前则以扭转向列(TN)、以及超扭转向列(STN)为主,STN液晶显示器经由彩*滤光片(colorfilter),可以分别显示红、绿、蓝三原*,再经由三原*比例之调和,可以显示出全彩模式的真彩*。目前彩*STN-LCD的应用多以手机、PDA、数码相机和视屏游戏机消费*产品以及文书处理器为主。

LCD驱动IC

LCD驱动IC多选用日立、三星公司产品,如三星公司的S6B33BOA是一颗具有很好*能/价格比的65K*彩饱和度的STN-LCD驱动IC。

由于手机、PDA、数码相机和视屏游戏机消费*产品都是以电池为电源的,随着使用时间的增长,电源电压波动较大,LCD驱动IC需要一个稳定的工作电压,因此设计电路时往往经由一个低压差稳压器(LDO)提供一个稳定的2.8V或3.0V电压,如AAT3221。

白光LED

按背光源的设计要求,需要前降电压(VF)、前降电流(IF)小,亮度高(500-1800mcd)的白光LED。以手机LCM为例,目前都使用3--4颗白光LED,随着LED的亮度增加和手机厂商要求降低成本和功耗,予计到2004年中LCM都会选用2颗高亮度白光LED(1200—2000mcd)。PDA和Smartphone由于LCD屏较大会按需要使用4--8颗白光LED。

 

第3篇:Linux内核和驱动考试题

Linux继承了Unix以网络为核心的设计思想,是一个*能稳定的多用户网络*作系统。以下是小编整理的Linux内核和驱动考试题,希望大家认真阅读!

填空题

1.Linux的设备驱动分为_________________三类,串口是什么类型设备______?

2.下面的程序,在UbuntuPC的terminal运行,打印几个hello__________

main()

{

fork();

printf("hello

");

fork();

printf("hello

");

while(1);

}

3.用>=,>,=,<,<=连接进程的如下4个内存描述形式,分析它们之间的大小关系:

VSS______________RSS

PSS_______________RSS

USS_______________PSS

4.下面这个程序,三次打印的data分别是__,__,__。

intdata=10;

intchild_process()

{

printf("Childprocess%d,data%d

",getpid(),data);

data=20;

printf("Childprocess%d,data%d

",getpid(),data);

_exit(0);

}

intmain(intargc,char*argv[])

{

if(vfork()==0){

child_process();

}

else{

sleep(1);

printf("Parentprocess%d,data%d

",getpid(),data);

}

}

5.请描述内核代码如下三种编译方式的含义

[]____________________

[*]__________________

[M]___________________

6.gdb设置断点的指令是______,单步n和s的区别是____________________________________

7.下面一段python程序:

hello.py

print"HelloWorld!Love,Python"

echo3>/proc/sys/vm/drop_caches后,第2次运行比第一次运行快的原因是?

______________________________________________________________

______________________________________________________________

8.请用公式描述下图free命令中数字的关系

a=___________+________

g=b-________-_________

h=c+________+_________

问答题

1.描述内核atomic,spinlock,mutex这三个锁分别的实用场景和主要区别

2.论述Linux设备驱动模型里面,总线、设备和驱动三者各自的作用及关系。