嵌入式LinuxLCD驱动程序开发.doc

上传人:scccc 文档编号:11792280 上传时间:2021-09-12 格式:DOC 页数:34 大小:292.50KB
返回 下载 相关 举报
嵌入式LinuxLCD驱动程序开发.doc_第1页
第1页 / 共34页
嵌入式LinuxLCD驱动程序开发.doc_第2页
第2页 / 共34页
嵌入式LinuxLCD驱动程序开发.doc_第3页
第3页 / 共34页
嵌入式LinuxLCD驱动程序开发.doc_第4页
第4页 / 共34页
嵌入式LinuxLCD驱动程序开发.doc_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《嵌入式LinuxLCD驱动程序开发.doc》由会员分享,可在线阅读,更多相关《嵌入式LinuxLCD驱动程序开发.doc(34页珍藏版)》请在三一文库上搜索。

1、Z6L呦适第丑彩尋仔站GCn xnunv ,w孚#学雅轸前xnu!iY聲毎点LCD显斥原谡 LCD显示原理 LCD驱动程序的设计 艮LCD驱动设计步骤 BMP文件显示液晶显示器(Liquid Crystal Display )的物 理特性:通电时液晶排列的有秩序,光线容易 通过;不通电时液晶排列混乱,阻止光线通 过。工作时使用外部光线,本身并不发光。LCD分类:TFT、DSTN两种照明方式:传送式、反射式。实验用教学平台参数及技术EP7312驱动LCD工作原理图(p263)LCD显斥原理0灰度显示原理LCD显示屏的一个常用指标是它的反应时间。反应 时间指的是一个像素从显示到关闭所花费的时间。L

2、CD控制器内部有1个16周期计数器,用于产生16 周期的间隔。当驱动像素时,它读帧缓冲数据所指 的调色板寄存器中的半字节数据。该数据确定在16 周期间隔里像素显示的次数。例如该值等于4,即 认为该像素以最大亮度的1/4进行显示。LCD显斥原理彩色显示原理:0彩色显示时,每个像素点有3个子彩色像素 (红.绿.蓝)。灰度显示的技术应用到彩色显 示中,每个子彩色像素有15种浓度的感觉效 果。可用红、绿、蓝3种颜色的15种浓度中的 一种去驱动1个像素点。章3应用实例六2设备驱动程序开发过程 第1嵌入式Linux的设备管理O另外一个显示特性是刷新率,指的是整个数据帧 被重新写到显示屏的频率。如果数据写得

3、太慢, 将影响显示质量;太快,则显示器的反应时间跟 不上像素驱动状态的改变。推荐的大部分显示屏 的速率是7080Hz。EP7312对液晶屏舉的支持:EP7312的LCD接口部分为单板多像素,其接 口特性为:o 1-2-4 bpp ;0可编程屏幕面板尺寸,在4bpp时最大值为1024x 256;。可编程刷新率;o 16级灰度值;章3应用实例六2设备驱动程序开发过程 第1嵌入式Linux的设备管理o彩色屏幕接口能力。LCD显斥原谡LCD DMA控制器DMA带宽计算公式:VGA比例x分辨率x 刷新率X每像素点位数DMA延迟时间计算公式(字深数x位宽) /DMA带宽DMA延迟时间表示在最差的情况下,从

4、 DMA发出请求到可获取第一个DMA数据字,或 者说DMA数据送到FIFO的延迟时间或总周期 数。LCD显斥原谡章3应用实例六2设备驱动程序开发过程 第1嵌入式Linux的设备管理LCD控制哥存器:o视频缓冲区大小0:12,对应视频显示缓冲区总位 数。视频缓冲区=(缓冲区总位M/128) -10线长度13:18:对应于一整行中的像素数。线长 度=(像素数/16) - 1像素预订标19:24:像素预定标=CPU频率/(刷 新率x像素总数)-1;像素数=CPU频率/(像 素预定标+ 1 )。AC预定标25:29:设置LCD AC偏移频率o GSEN30:灰度使能位o GSMD311:灰度级模式位L

5、CD显斥原理LCD显斥原理LCD调色板哥存器:为了支持各种颜色和灰度级,LCD控制器有2个32位 调色板寄存器(PALLSW和PALMSW)。每个调色板寄存 器被分閱8个4位的半字节(nibble),每个半字节被帧缓 冲区中的数据寻址,其格式如下:PALLSW65432I0318 27-24 23-20 1916 15-12 1180x8000.0580l27*43-0PALMSW141312II109831-28 2724 2320 1916 15-12 11-80x8000.0540157-430章3应用实例六2设备驱动程序开发过程 第1嵌入式Linux的设备管理LCD显斥原理LCD调色板

6、寄存器:当LCD控制器配置成每像素点4位时,帧缓冲区中4位 数据代表1个像素,2个调色板寄存器中的半字节用该数 据寻址,对应显示的像素。寻址结构用于将帧缓冲区中 的数据映射到实际的灰度值,该值提供给显示接口。当配置成每像素4位模式时,在调色板寄存器中的所 有16个半字节都被用于映射。同理,每像素2位模式只 用编程调色板寄存器低位有效字,每像素1位模式只用 编程低位有效寄存器的前2个半字节。A两个调色板寄存器半字节可以编程为0 15。这16个 值对应16种不同的颜色深度级。LCD显斥原理LCD显斥原理章3应用实例六2设备驱动程序开发过程 第1嵌入式Linux的设备管理LCD调色板哥存器:荻度级Q

7、占空比Q像素壳度Q级变化0口Oa0 口11.22I 31L28.9432卩L5屮20空S.7。并4152 6.帀634心3 333.3Q6.7a5口2/知425如真4344 4卩5.6p7pL2*5030331 2小5035.64335 3555.33.知6036.7卩126 366.帀6G12Q117336.7QI3e心8038.943I*8%88.9P1115q1Q100Q内存中像素值和灰度级的映射LCD显斥原理LCD显斥原理通过以上了解,在Icd.c中定义下面几个寄存器: #define LCDCON*(unsigned long*)0xff0002c0 #define PALLSW *

8、(unsigned long *)0xff000580 #define PALMSW *(unsigned long *)0xff000540 #define FBADDR *(unsigned long *)OxffOO1OOO #define SYSCON1 *(unsigned long *)OxffOOO1OO章3应用实仞六2设备驱动程序开发过程 第1嵌入式Linux的设备管理LCD驱幼程序的筱针章3应用实例六2设备驱动程序开发过程 第1嵌入式Linux的设备管理驱动程序的头文件Linux/: module.h, kernal.h, fs.h3 sched.h, config.h5 U

9、tsname.h, major.h,string.h5 fcntl.h, Malloc.h, timer.h, init.h,asm/: pgtable.h, irq.h, io.hLCD驱幼程序的筱针LCD驱幼程序的筱针LCD驱幼程序的殺针第六章1 2 3。系统调用分类o 处理I/O请求:open、close, read、write等 o 进程:fork、execve kill等o 时间:time、settimeofdayo 内存:mmap、brkLCD驱幼程序的殺针LCD驱幼程序的殺针LCD驱幼程序的殺针o系统内部,I/O设备的存取通过一组固定 的入口点来进行。这组入口点由设备的驱 动程序

10、提供。由file_operations这个结构 向系统进行说明static struct file_operations LCDfops = read:ReadLCD,ioctl:LCDIoctl,open :OpenLCD,release:CloseLCD,章3应用实例 “ 六2设备驱动程序开发过程 L 第1嵌入式匚nux的设备管理aY;寄存器设置以1 /4VGA显示为例,对LCD控制器复制操作进行计 视频缓冲:Oxlclf画线长度:0x3b 像素数预定标:1AC预定标:0x13 灰度使能位:1 灰度模式位:1LCD驱幼筱针步骤颜色存红色卩绿电艺蓝色屮黒门00000000QQQ2白Q0112

11、011P0112蓝口00004300003011143绿门0000430112OOOOq红卩011200020000 屮0000。011k0112011200000111Q明黃门0112011P0000浅黄门01011043000OQ-+-7.1黄辣口001200120000*3浅绿Q000“0叱0002010000000100章3应用实例六2设备驱动程序开发过程 第1嵌入式匚nux的设备管理应用编程接口(API)画 点 函 数 lcd-kernel.pixel : unsigned char * base 循环 320*240*3*4/8次。各种颜色所对应的值每个像素使用1. 5个字节表示。

12、LCD模块化驱动o在自己的驱动程序文件中定义file-operations 结构,初始化设备需要的操作函数,对于设备不 需要的操作函数用NULL来初始化或者采用标签格 式来声明。这些操作函数将会被注册到内核,当 应用程序对该设备相应的设备文件进行文件操作 时,内核会找到相应的操作函数,并进行调用。 如果操作函数注册成NULL,操作系统就默认的处LCD驱幼筱针步骤LCD驱幼筱针步骤 LCD模块化驱动关键函数:lcd-kernel- ini t (void)(模块被载入时执行)尸lcd_kernel-exi t (void)(模块被移出内核空间时执行) lcd-kernel-ioctl (stru

13、ct inode *inode, struct f ile#早3应用实例 .V, 六2设备驱动程序开发过程 第1嵌入式匚nux的设备管理av*f i le, unsigned int cmd, unsigned long arg)(其他功能)LCD模块化驱动 lcd-kernel-ioct1(struct inode * inode, struct f i le*file, unsigned int cmd, unsigned long arg) 在file_ope rations结构中,把这个函数与ioctl操作联系在一起, 通过这个函 数,可以瓚加要提供的服务。 例如: switch (c

14、md) caseO: lcd_clear (); break; case 1: ellip se = (ell ipse_t *) arg; lcd_ellipse (el lipse-x, ellipse-y, ellipse-a, ellipse-b, ellipse-c, ellipse-xorm); break; . 当应用程序中调用 rt= ioct l(fd, 0); 或 rt = ioctl(fd, 1, &m_e llipse);通过switch选择,就会分别玉执行LCD驱动中的lcd_clear()和lcd_ellipse(.)。LCD驱幼筱针步骤LCD模块化驱动下面是LCD

15、驱动所使用的Makefile: KERNELDIR = /usr/src/arm/1inux CROSS-COMPILE = arm-linux- CC = $ (CROSS-COMPILE)gcc CFLAGS = -D_KERNEL_ -DM ODULE -1$ (KERNELDIR)/include -I/arm.1inux.root/mod -0 -Wall all: led.o demo demo: arm-elf -gcc -o demo demo. c clean:章3应用实例六2设备驱动程序开发过程 第1嵌入式匚nux的设备管理 rm -f *. o * core demo将L

16、CD驱动加入内核配置系统a )将led. c 复制到 1 inux/drivers/char 目录下b ) 修改 led. c 中 函数名 ini t.module 为 LCDIni t, cleanup-module/LCDCleanupc )在led. c最后加上下面两行: module.init (LCDInit); module.exit (LCDCleanup)od ) 在 1 inux/dr ivers/char/Makef i le 中添加 obj- $(CONFIG_LCD)+=lcd. oe ) 在 1 inux/drivers/char/Conf ig. in 中添加Tristate LCD driver support, CONFIG.LCDBMP弍件显示BMP文件特点:几乎不压缩,占用磁盘空间较大BMP文件格式:章3应用实例六2设备驱动程序开发过程 第1嵌入式匚nux的设备管理文件头 文件信息头 调色板 图像数据BMP弍件显示BMP弍件显示/BMP弍件显示BMP图像显示顺序读取,逆序显示BMP图像显示步骤打开文件读入位图头部信息判断位图是否为指定格式读入调色板信息创建调色板显示位图章3应用实例六2设备驱动程序开发过程 第1嵌入式匚nux的设备管理

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1