基于Linux的液晶显示屏驱动设计

发布者:SereneSoul55最新更新时间:2010-06-16 来源: 单片机与嵌入式系统应用关键字:Linux  液晶显示屏  驱动设计 手机看文章 扫描二维码
随时随地手机看文章

引  言

      Linux设备驱动程序属于Linux内核的一部分,并在Linux内核中扮演着十分重要的角色。它们像一个个“黑盒子”,使某个特定的硬件响应一个定义良好的内部编程接口,同时完全隐蔽了设备的工作细节。用户通过一组和具体设备驱动无关的标准化的调用来完成相关操作,驱动程序的任务就是把这些调用映射到具体设备对于实际硬件的特定操作上。

  硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,它实现以下功能:

  ①对设备初始化和释放。

  ②把数据从内核传送到硬件和从硬件读取数据。

  ③读取应用程序传送给设备文件的数据和回送应用程序请求的数据。

  ④检测和处理设备出现的错误。

  可以把设备驱动作为内核的一部分直接编译到内核中(即静态编译),也可以单独作为一个模块编译,在需要的时候动态地插入到内核中,在不需要的时候可把它从内核中删除(即动态链接)。

  目前Linux支持的设备驱动可以分为3种:字符设备(character device)、块设备(block device)、网络接口设备(network device)。当然它们之间也并不是严格地加以区分。字符设备是所有能够像字节流一样被访问的设备(如文件等),在Linux中通过字符设备驱动程序来实现。在Linux中它们也被映射为文件系统的1个节点,通常在/dev目录下。字符设备驱动程序一般要包含open、close、read、write等几个系统调用。

  本文为开发字符设备驱动实例,对于其他两类不再赘述。

1 Linux关于字符设备的管理

  驱动程序在Linux内核中往往是以模块形式出现的。与应用程序的执行过程不同,模块通常只是预先向内核注册自己,当内核需要时响应请求。模块中包含2个重要的函数init_module和cleanup_module。前者是模块的入口,它为模块调用做好准备工作,而后者是在模块即将卸载时被调用,做一些清扫工作。

  驱动程序模块通过函数int register_chrdev(unsignedint major,const char*name,struct file_operations*fops)来完成向内核注册。其中unsigned int major为主设备号,const char*name为设备名,struct file_operations*fops为驱动设备管理中重要的结构指针,此结构中每个字段都必须指向驱动程序中实现特定操作的操作函数。

2 FYD12864-0402B液晶模块简介

  FYD12864-0402B是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块,低电压,低功耗。其显示分辨率为128×64,内置8 192个16×16点阵的汉字,以及128个16×8点ASCII字符集。利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面,可以显示8×4行16×16点阵的汉字。也可完成图形显示。FYD12864-0402B液晶模块框图如图1所示,其中ST7920为液晶显示控制芯片,ST7921为液晶显示驱动芯片。



  FYD12864-0402B控制器接口信号说明如下:

  ①RS、R/W的配合选择决定控制界面的4种模式,如表1所列。



  ②E信号如表2所列。



3 LCD读写原理

  FYD12864-0402B每屏可显示4行8列共32个16×16点阵的汉字,每个显示RAM可显示1个中文字符或2个16×8点阵全高ASCII码字符,即每屏最多可显示32个中文字符或64个ASCII码字符。FYD12864-0402B内部提供128×2字节的字符显示RAM缓冲区(DDRAM)。字符显示是通过将字符显示编码写入该字符显示RAM实现的。根据写入内容的不同,可分别在液晶屏上显示CGROM(中文字库)、HCGROM(ASCII码字库)及CGRAM(自定义字形)的内容。3种不同字符/字型的选择编码范围为:0000~0006H(其代码分别是0000、0002、0004、0006,共4个)显示自定义字型,02H~7FH显示半宽ASCII码字符,A1A0H~F7FFH显示8 192种GB2312中文字库字形。字符显示RAM在液晶模块中的地址80H~9FH。字符显示的RAM的地址与32个字符显示区域有着一一对应的关系。

[page]

4 部分代码解析




5 编写Makefile和用户级测试程序

  下面2行宏变量定义使用armv41-unknown-linux-gcc编译器编译驱动,默认使用gcc编译器、X86 PC平台。



结  语

  对Linux设备驱动程序作了详细的介绍,在实际开发板AT91RM9200上加入FYD12864-0402B驱动模块,该液晶驱动采用通用化接口和调用方法,对开发Linux其他设备驱动程序具有很好的指导意义。

关键字:Linux  液晶显示屏  驱动设计 引用地址:基于Linux的液晶显示屏驱动设计

上一篇:意美联合研发高效有机发光敏晶体管—OLET
下一篇:中星9号加大打击黑盒子力度 二代机受牵连

推荐阅读最新更新时间:2024-05-03 19:25

apache+sqlite+php for Arm Linux
经过几天的努力终于在arm-linux平台上搭建了apache+sqlite+php平台. apche与sqlite网上有不少资料,而php for arm-linux很少.为了在arm平台上安装php发了不少时间.所以将搭建过程发表在此,希望对大家有所帮助. Sqlite for Arm Linux安装 1、 下载sqlite3.3.8:请到http://www.sqlite.org/download.html,将下载的代码包解开,将生成sqlite3.3.8目录 2、 修改configure文件,将下面语句注释掉 #if test $cross_compiling = yes ; then # { { echo $as_me:
[单片机]
基于嵌入式Linux内核的键盘驱动控制模块设计
为了适应嵌入式设备外设的多样性,本文以特殊矩阵键盘为例,设计了一套完整的驱动控制模块。硬件 电路 设计采用外扩3片SN74HC 164芯片的方式,节省了GPIO引脚的使用,大大提高了利用效率。同时,在此基础上引出了Linux内核中input子系统的特性和工作机制,呈现了较为完整的输入事件由内核空间传递到用户空间进程的过程。实验结果表明,设计的驱动模块具有良好的实时性和准确性。 随着 微处理器 技术的不断发展和数字化产品的普及,嵌入式系统的研究开发逐渐成为热点,Linux也以其开源、稳定、可裁剪的优势成为嵌入式操作系统的主流。在众多的嵌入式系统中,键盘成为一种应用最为广泛的输入设备。然而,嵌入式设备的功能差异性又决定了为其提
[单片机]
基于嵌入式<font color='red'>Linux</font>内核的键盘<font color='red'>驱动</font>控制模块<font color='red'>设计</font>
嵌入式Linux下的AU1200MAE驱动程序设计
随着移动多媒体终端的口益普及,功能的日益强大,人们已经不满足于自己的手持终端仅仅能够听MP3音乐,而是希望终端在播放音乐的同时能够播放高质量视频,并支持多种视频格式。AU 1200作为一款基于MIPS架构的处理器,由于其片上集成了视频硬件设备(Media Accel-eration Engine,MAE),使得该处理器无需配合其他视频解码芯片即可完成多种格式的视频解码功能,所以AU 1200非常适合应用于像PMP这样的移动多媒体终端,而MAE也成为AU 1200的特色。    1 MAE 概述   MAE是AU 1200的片上硬件设备,除了可以实现视频解码功能外,还可以完成色彩空间转换、滤波等工作。MAE在硬件结构上可以分
[工业控制]
嵌入式<font color='red'>Linux</font>下的AU1200MAE<font color='red'>驱动</font>程序<font color='red'>设计</font>
Linux内存管理学习2 —— head.S中的段页表的建立
平台 TQ2440 Qemu+vexpress-ca9 Linux-4.10.17 正文 继续分析head.S: 此时r2存放的是设备树镜像的物理起始地址,r8是物理内存的起始地址,r9是从CP15的C0中读到的cpu id,r10是与该cpu id匹配的proc_info_list的物理地址 TQ2440: r8: 0x3000_0000,r9: 0x41129200 vexpress: r8: 0x6000_0000,r9: 0x414FC091 8、第30行调用__create_page_tables建立段式页表。 下面是__create_page_tables的定义: 其中涉及到几个
[单片机]
<font color='red'>Linux</font>内存管理学习2 —— head.S中的段页表的建立
基于S3C2440的Linux内核移植和yaffs2文件系统制作--启动系统
第三章 启动系统 将前面两章生成的内核映像文件和根文件系统映像文件下载到mini2440开发板,查看启动信息。我成功移植启动信息如下: VIVI version 0.1.4 ( root@capcross ) (gcc version 2.95.3 20010315 (release)) #0.1.4 Mon Oct 27 10:18:15 CST 2008 MMU table base address = 0x33DFC000 Succeed memory mapping. DIVN_UPLL0 MPLLVal CLKDIVN:5h +------------------------------------------
[单片机]
赛灵思收购嵌入式Linux方案提供商PetaLogix
赛灵思公司(Xilinx, Inc. )今天宣布收购嵌入式Linux解决方案提供商PetaLogix。随着Linux解决方案成为越来越多依赖赛灵思 All Programmable技术的嵌入式应用的必备之选,收购PetaLogix及其PetaLinux技术, 加强了赛灵思致力于为客户提供最好的Linux解决方案的能力和承诺。 赛灵思嵌入式软件首席科学家Tomas Evensen指出:“PetaLogix一直是推动赛灵思可编程技术在嵌入式市场不断普及的重要后援。他们最初针对MicroBlaze™和PowerPC®处理器推出了Linux版本,现在又为Zynq™-7000 All Programmable SoC提供了Linux版本和
[嵌入式]
基于高速超微型C8051F300单片机的CCD驱动电路设计
   1 常用的CCD驱动时序产生方法   CCD厂家众多,型号各异,其驱动时序的产生方法也多种多样,一般有以下4种:   (1)数字电路驱动方法   这种方法是利用数字门电路及时序电路直接构建驱动时序电路,其核心是一个时钟发生器和几路时钟分频器,各分频器对同一时钟进行分频以产生所需的各路脉冲。该方法的特点是可以获得稳定的高速驱动脉冲,但逻辑设计和调试比较复杂,所用集成芯片较多,无法在线调整驱动频率。   (2)EPROM驱动方法   这种驱动电路一般在EPROM中事先存放所有的CCD时序信号数据,并由计数电路产生EPROM的地址使之输出相应的驱动时序。该方法结构相对简单、运行可靠,但仍需地址产生硬件电路,所需EPR0M
[单片机]
基于高速超微型C8051F300单片机的CCD<font color='red'>驱动</font>电路<font color='red'>设计</font>
TQ2440 学习笔记—— 33、移植 Linux 内核【 准备 】
一、Linux 版本及特点 Linux 的内核版本号可从位于顶层目录下的 Makefile 中查找到。如 VERSION = 2 VERSION = 6 SUBLEVEL = 22 EXTRAVERSION = .6 这几行构成了版本号 2.6.22.6。其中 VERSION 及 VERSION 构成版本的主版本号。SUBLEVEL 是次版本号,EXTRAVERSION 是拓展版本号。Linux 内核版本分为测试版本及稳定版本。VERSION 的值是偶数的为稳定版本, VERSION 是奇数,则表示该版本有新内容加入,版本是不稳定的测试类型的。 二、Linux 移植准备 1、获取内核源码 登录 Linux 内核的官
[单片机]
TQ2440 学习笔记—— 33、移植 <font color='red'>Linux</font> 内核【 准备 】
小广播
最新家用电子文章
换一换 更多 相关热搜器件

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 电视相关 白色家电 数字家庭 PC互联网 数码影像 维修拆解 综合资讯 其他技术 论坛

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved