张新健基于S3C2410与26内核linux下TFT液晶的驱动设计Word文件下载.docx
《张新健基于S3C2410与26内核linux下TFT液晶的驱动设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《张新健基于S3C2410与26内核linux下TFT液晶的驱动设计Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
![张新健基于S3C2410与26内核linux下TFT液晶的驱动设计Word文件下载.docx](https://file1.bdocx.com/fileroot1/2022-11/16/f5385061-39df-4771-bf94-a68c59c34c4e/f5385061-39df-4771-bf94-a68c59c34c4e1.gif)
LCD液晶作为重要的人机界面非常广泛的使用在各种嵌入式设备中,而linux操作系统由于其非常强的可移植性和稳定性同样也被广大的嵌入式设备开发商所采用。
本设计就是基于最新的2.6内核的linux系统的底层驱动编写,研究linux下的TFT-LCD驱动(属字符设备驱动)的结构、移植、编写、加载与卸载、以及用户层的接口设计等技术。
其中硬件使用三星公司开发的ARM9核嵌入式处理器——S3C2410。
Linux系统采用2.6.8的内核。
2硬件实现
2.1TFTLCD显示器原理
LCD(liquidcrystaldisplay),是一种数字显示技术,可以通过液晶和彩色过滤器过滤光源,并在平面面板上产生图像。
常见的液晶显示器按物理结构分为一下四种:
●扭曲向列型(TN)
●超扭曲向列型(STN)
●双层超扭曲向列型(DSTN)
●薄膜晶体管型(TFT)
本设计采用TFT型液晶显示器。
TFT-LCD是一种广泛拥有电视、笔记本电脑、监视器、手机等产品的有源矩阵液晶显示器件。
TFT将点阵像素分割成红、绿、蓝三个子像素,并在其对应位置的器件内表面设置R、G、B三个微型滤色膜,此时液晶显示器件只作为一个光阀,控制每个子像素光阀,就可以控制滤色膜透过光的通断;
控制光阀的灰度等级就可以控制相应滤色膜透过光的多少;
利用R、G、B这三个子像素透过的不同光量,便可以混合加色实现极为丰富的彩色。
如果R、G、B这三个子像素均可实现人眼对灰度分辨能力64级灰度驱动,就可以实现有64x64x64约26万种彩色的“真彩色”。
TFT的主要特点是在每个像素配置一个半导体开关器件,由于每个像素都可以通过点脉冲直接控制,使得每个节点相对独立,并可以连续控制。
TFT-LCD具有屏幕反应速度快,对比度和亮度都较高,屏幕可视角度大,色彩丰富、分辨率高等特点,是目前最好的LCD彩色显示设备之一。
其原理见图1:
图1TFT液晶原理
此次设计采用东华WXHAT35-TG2#001在320*240分辨率下可提供16位彩色显示。
其尺寸参数及引脚说明见图2,液晶屏与S3C2410处理器引脚连接见图3.
分辨率:
320*240
对比度:
300:
1
亮度:
250cm/m2
外观尺寸:
76.9*63.9(mm)
厚度:
3.2(mm)
显示颜色:
16.7兆色
Backlight:
sixLEDsserialtype
接口方式:
24bitRGB
显示面积:
70.08(H)mm×
52.56(V)mm
图2液晶尺寸参数及引脚说明
图3液晶屏与S3C2410处理器引脚连接
2.2三星嵌入式处理器:
S3C2410
2.2.1S3C2410处理器概述
S3C2410是韩国三星公司的一款基于ARM920T内核的16/32位RISC嵌入式微处理器,主要面向手持设备以及高性价比,低功耗的应用。
运行的频率可以达到203MHz。
ARM920T核由ARM9TDMI,存储管理单元(MMU)和高速缓存三部分组成。
其中MMU可以管理虚拟内存,高速缓存由独立的16KB地址和16KB数据高速Cache组成ARM920T有两个协处理器:
CP14和CP15。
CP14用于调试控制,CP15用于存储系统控制以及测试控制。
(其内部结构见图4)
S3C2410的资源包括:
●1个LCD控制器
●SDRAM控制器。
●3个通道的UART。
●4个通道的DMA。
●4个具有PWM功能的计时器和一个内部时钟。
●8通道的10位ADC。
●触摸屏接口。
●IIS总线接口。
●2个USB主机接口,1个USB设备接口。
●2个SPI接口。
●SD接口和MMC卡接口。
●看门狗计数器。
●117个通用I/O口和24位外部中断源。
●8通道10位AD控制器。
图4S3C2410结构
2.2.2S3C2410的LCD控制器
LCD控制器的功能是产生显示驱动信号,驱动LCD显示器。
用户只需要通过读写一系列的寄存器,完成配制和显示控制。
S3C2410LCD控制器支持STN和TFT屏,对于TFT屏,其特性如下:
●支持单色、4级灰度、256色的调色板显示模式。
●支持64K和16M色非调色板显示模式。
●支持分辨率为640*480,320*240及其他多种规格的LCD。
S3C2410的LCD控制器内部逻辑结构见图5。
REGBANK是LCD控制器的寄存器组,用来对LCD控制器的各项参数进行设置。
而LCDCDMA则是LCD控制器专用的DMA信道,负责将视频资料从系统总线(SystemBus)上取来,通过VIDPRCS从VD[23:
0]发送给LCD屏。
同时TIMEGEN和LPC3600负责产生LCD屏所需要的控制时序(如VSYNC,HSYNC,VCLK,VDEN),然后从VIDEOMUX送给LCD屏。
图5S3C2410的LCD控制器内部逻辑结构
通常使用的LCD控制管脚的定义如下:
VCLK:
像素时钟信号;
VD[23:
0]:
LCD像素输出端口;
VM/VDEN/TP:
LCD驱动器的AC偏置信号(STN)/数据使能信号(TFT)/SECTFT源驱动器数据加载脉冲信号复用端口。
S3C2410LCD控制器内部的寄存器可以控制LCD控制器接口的工作模式,LCD驱动编写的主要工作就是正确地设置所用LCD屏的CPU寄存器。
表1所示为S3C2410中与LCD相对应的寄存器,给出了各个寄存器的简要描述。
(LCDCON1~5是最重要的控制寄存器,其详细说明可以参看S3C2410处理器的详细说明书)
表1S3C2410LCD控制器相关设置
2.3S3C2410LCD控制器的详细设置
对于控制TFT屏来说,除了要给它送视频资料(VD[23:
0])以外,还有以下一些信号是必不可少的,分别是:
VCLK(像素时钟信号)
VDEN(数据使能信号)
VSYNC(垂直同步信号)
HSYNC(水平同步信号)
LEND(行结束信号)
LCD_PWREN(液晶屏使能信号)。
VCLK信号依赖于LCDCON1寄存器中CLKVAL和S3C2410的HCLK的取值,具体公式为:
●VCLK(Hz)=HCLK/[(CLKVAL+1)x2]
VSYNC和HSYNC的产生依赖于LCDCON2/3寄存器及HOZVAL和LINEVAL的配置,其中:
●HOZVAL=水平显示尺寸-1
●LINEVAL=垂直显示尺寸-1
一般情况下,帧频率就是VSYNC信号的频率,它与LCDCON1和LCDCON2/3/4寄存器的VSYNC、VB2PD、VFPD、LINEVAL、HSYNC、HBPD、HFPD、HOZVAL和CLKVAL都有关系。
大多数LCD驱动器都需要与显示器相匹配的帧频率,帧频率计算公式如下:
●FrameRate=1{[(VSPW+1)+(VBPD+1)+(LINEVAL+1)+(VFPD+1)]×
[(HSPW+1)+(HBPD+1)+(HFPD+1)+(HOZVAL+1)]×
[2×
(CLKVAL+1)/(HCLK)]}
以下图6为东华WXHAT35-TG2#001,的时序要求:
图6东华WXHAT35-TG2#001,的时序要求
依照液晶屏时序设置linux系统的相关驱动文件参数如下:
1)添加头文件
#include<
asm/arch/fb.h>
2)添加初始化s3c2410的LCD控制器时所需的参数(修改文件:
linux/drivers/video/s3c2410fb.c)
/*LCDdriverinfo*/
/*Configurationfor320*240东华WXHAT35-TG2#001*/
structpxafb_mach_infoS3C2410_320X240_WX3500B_M06={
.pixclock=270000,
.xres=320,
.yres=240,
.bpp=16,
.hsync_len=29,//LCD_HSPW
.left_margin=19,//LCD_HFPD
.right_margin=37,//LCD_HBPD
.vsync_len=2,//LCD_VSPW
.upper_margin=11,//LCD_VFPD
.lower_margin=14,//LCD_VBPD
.sync=FB_SYNC_HOR_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT,
.cmap_greyscale=0,
.cmap_inverse=0,
.cmap_static=0,
.reg={
.lcdcon1=(7<
<
8)|(0<
7)|(3<
5)|(12<
1),
.lcdcon2=(14<
24)|(239<
14)|(11<
6)|
(2),
.lcdcon3=(37<
19)|(319<
8)|(19),
.lcdcon4=(13<
8)|(29),
.lcdcon5=(1<
11)|(1<
10)|(1<
9)|(1<
8)|(0<
7)|(1<
5)|(1<
3)|(0<
1)|
(1),
}
};
3linux系统下驱动的软件实现
3.1嵌入式linux系统典型构成
嵌入式Linux(EmbeddedLinux)是指对Linux经过裁剪小型化后,可固化在存储器或单片机中,应用于特定嵌入式场合的专用Linux操作系统。
嵌入式Linux的开发和研究已经成为目前操作系统领域的一个热点。
嵌入式Linux系统的典型构成见图7。
图7嵌入式Linux系统的典型构成
3.2linux设备驱动简介
1)设备驱动的任务包括:
对设备初始化和释放
把数据从内核传送到硬件和从硬件读取数据
读取应用程序传送给设备文件的数据和回送应用程序请求的数据
检测和处理设备出现的错误
2)linux系统下设备类型分类:
字符设备(chardevice)。
块设备(blockdevice)。
网络设备(Networkinterfaces)
3)Linux下LCD设备驱动的实现方法:
像普通字符设备进行驱动