




已阅读5页,还剩48页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘 要随着嵌入式系统的应用越来越广泛,功能也越来越强大,对系统中的人机界面的要求也越来越高。在应用需求的驱使下,许多工作在Linux下的图形界面软件包的开发和移植工作中都涉及到底层LCD驱动的开发问题。因此在嵌入式系统中开发通用 LCD 驱动得以广泛运用。目前的嵌入式开发使用的液晶显示器所提供的驱动程序都是针对特定对象开发,通用性差,而且在不同的平台上很难移植,驱动程序需要重复开发,既浪费了时间、精力,也提高了开发成本。本文研究论述了基于S3C2410 LCD控制器的Linux驱动程序设计与实现,介绍了S3C2410的LCD控制器的数据和控制管脚,并给出了LCD的控制流程和LCD的控制器设置规则,参照TFT-LCD LQ092Y3DG01的逻辑要求和时序要求设计了其驱动电路,设置了主要LCD寄存器;论述了在嵌入式Linux中基于FrameBuffer机制的LCD驱动程序的实现方法。主要研究了Linux帧缓冲设备驱动程序框架,详细分析了帧缓冲设备驱动程序层次结构、核心功能模块和数据结构,设计了FrameBuffer的处理机制以及底层驱动的接口函数针对具体的LCD面板如何在嵌入式Linux中编写帧缓冲设备的驱动程序。最后在FrameBuffer机制的基础上,基于三星公司S3C2410处理器的开发平台系统地开发了嵌入式Linux下的LCD显示驱动程序,实现了简单的嵌入式GUI图形API的设计,并在LQ092Y3DG01上显示了清晰稳定的图像和汉字。测试表明该驱动通用性好,能驱动大部分的LCD;可移植性强,经过少许修改即可应用在其他嵌入式系统中,是S3C2410驱动LCD的一套较佳的解决方案。关键词S3C2410;TFT-LCD;Linux驱动程序;FrameBufferAbstractWith the embedded system applications becoming wider, and more and more powerful function, its system of the human-computer interface are increasingly high requirements. In the application driven, many in the Linux graphical interface packages and the development of the work involves the low level of the LCD Driver Development issues. So in embedded system development generic LCD Driver has been extensively applied. The current use of embedded development for LCD drivers is targeted at specific groups development. Their versatility is poor and on the different platforms is difficult to transplant. So drivers need to re-develop, not only a waste of time, energy, but also raises the cost of development. This paper introduces the S3C2410 LCD controllers data and control pins and provides the control flow and controller set rules of LCD. According to TFT-LCD LQ092Y3DG01s sequential logic requirements and the requirements of its drive circuits, set the values of the major LCD Registers; described in the Embedded Linux based FrameBuffer mechanism LCD Driver for the method of the implementation. In this paper I mainly researched the Linux FrameBuffer device driver framework, detailed analyses of the frame buffer device driver level structure, function modules and core data structure, designed FrameBuffer handling mechanism and low-level driver interface function specific to the LCD panel that How to program the FrameBuffer device driver in embedded Linux. Finally on the basis of FrameBuffer mechanism, based on Samsung S3C2410 processor development platform I systematically develop the LCD display driver of the embedded Linux and implement the design of a group GUI APIs for the embedded Linux, displayed clear and stable images and Chinese characters on LQ092Y3DG01. Experimental tests showed that the common driver can drive most of the LCD; Portability strong, with small modifications can be applied to other embedded systems. It is a better solution of the LCD driver based on S3C2410.Key words S3C2410 TFT-LCD Linux drivers FrameBuffer不要删除行尾的分节符,此行不会被打印- II -)目 录摘 要IAbstractII第1章 绪论11.1 引言11.2.1 研究的目的和意义21.3 嵌入式商机开发平台选型21.3.1 平台硬件系统的选型21.3.2 平台软件系统的选型嵌入式Linux61.4 主要工作及内容安排7第2章 系统开发的基本理论知识82.1 液晶显示屏概述82.1.1 LCD的原理82.1.2 LCD的分类82.1.3 LCD的优缺点92.2 嵌入式linux简介102.2.1 Linux内核功能划分102.2.2 嵌入式Linux驱动程序开发简介112.3 本章小结12第3章 系统关键技术的研究133.1 系统硬件技术研究133.1.1 S3C2410内置LCD控制器的研究133.1.2 LCD的主要操作时序的研究153.1.3 LCD引脚初始化设置的研究173.2 系统软件技术研究173.2.1 Linux设备驱动程序总体框架173.2.2 Linux下FrameBuffer机制的研究193.3 本章小结23第4章 系统设计与具体实现244.1 系统硬件的设计与实现244.1.1 S3C2410与LCD的接口设计244.1.2 S3C2410内置控制器的设置244.1.3 LCD引脚初始化设置264.2 系统软件的设计与实现274.2.1 LCD驱动的主要数据结构274.2.2 LCD帧缓冲驱动的接口设计294.3 Linux内核配置与编译354.4 本章小结36第5章 图形API及测试程序的设计与实现375.1 几何图形API的设计375.1.1 画点函数的设计375.1.2 画线函数的设计375.1.3 画矩形函数的设计375.2 位图显示API的设计395.2.1 位图结构体的设计395.2.2 8位色位图显示函数的设计415.2.3 24位色位图显示函数的设计425.3 汉字及字符显示API的设计435.3.1 字符动态编码显示方案的研究435.3.2 Linux汉字显示方案的设计与实现435.4 系统测试程序的设计与实现455.5 本章小结47总结与展望48总结48展望48参考文献49千万不要删除行尾的分节符,此行不会被打印。在目录上点右键“更新域”,然后“更新整个目录”。打印前,不要忘记把上面“Abstract”这一行后加一空行- 49 -第1章 绪论1.1 引言随着嵌入式处理器的快速发展和硬件成本的不断降低,尤其是ARM系列处理器的推出,嵌入式系统的功能也越来越强大。S3C2410是三星公司生产的基于ARM920T内核的RISC微处理器, 部件采用主流芯片设计,主频可达203MHz,适用于信息家电、Smart Phone、Tab2let、手持设备、移动终端等领域,成为嵌入式开发市场中的主流CPU。其中,集成的LCD控制器具有通用性,可与大多数的LCD显示模块接口匹配。在多媒体应用的推动下彩色LCD(液晶显示器)越来越多地应用到嵌入式系统中。嵌入式操作系统,是嵌入式系统的重要组成部分,当前的嵌入式操作系统主要有C/OS,Palm OS,Windows CE,EPOC,Linux CE , QNX等,而与其他众多的嵌入式操作系统相比,Linux有自身的一些优点:多任务、多用户、多平台、使用分页技术的虚拟内存等。同时由于它是一个完全公开的源代码,具有很强的稳定性、实时性的嵌入式的操作系统,目前,已经成为嵌入式领域使用最为广泛、最具发展潜力的操作系统。同时,随着嵌入式技术的进一步发展,人们对嵌入式系统人机界面的友好程度也有了更高的要求,其显示设备也由原来的LED到液晶LCD再到点阵式液晶LCM。Linux是一个遵循POSIX标准的免费操作系统,具有很强的扩展特性。LCD(液晶显示)模块满足了嵌入式系统日益提高的要求,它可以显示汉字、字符和图形,同时还具有低压、低功耗、体积小、重量轻、超薄、接口简单易用和模块化结构紧凑等许多其它显示器件无法比拟的优点,近年来被广泛用于智能仪器、仪表和低功耗电子产品等嵌入式系统中。随着嵌入式系统的应用越来越广泛,功能也越来越强大,对系统中的人机界面的要求也越来越高,在应用需求的驱使下,许多工作在Linux下的图形界面软件包的开发和移植工作中都涉及到底层LCD驱动的开发问题。因此在嵌入式系统中开发 LCD 驱动得以广泛运用。目前的嵌入式开发使用的液晶显示器所提供的驱动程序都是针对特定对象开发,通用性差,而且在不同的平台上很难移植,驱动程序需要重复开发,既浪费了时间、精力,也提高了开发成本。因此,开发一种通用性强、移植性好的LCD驱动程序成为一种需求。1.2 研究的目的和意义1.2.1 研究的目的和意义随着嵌入式系统的应用越来越广泛,功能也越来越强大,对系统中的人机界面的要求也越来越高,在应用需求的驱使下,许多工作在Linux下的图形界面软件包的开发和移植工作中都涉及到底层LCD驱动的开发问题。因此在嵌入式系统中开发 LCD 驱动得以广泛运用。目前的嵌入式开发使用的液晶显示器所提供的驱动程序都是针对特定对象开发,通用性差,而且在不同的平台上很难移植,驱动程序需要重复开发,既浪费了时间、精力,也提高了开发成本。因此,开发一种通用性强、移植性好的LCD驱动程序成为一种需求。因此,在嵌入式Linux下研发一种基于S3C2410 LCD控制器的通用的、可移植性强的LCD驱动具有很高的应用价值。1.3 嵌入式商机开发平台选型1.3.1 平台硬件系统的选型 嵌入式微处理器的选型ARM9 ARM即Advanced RISC Machines的缩写,既是一个公司的名字,也是一类微处理器的通称,还可以认为是一种技术的名字。ARM公司成立于1990年,是知识产权供应商,本身并不生产芯片,靠转让设计许可,由合作伙伴公司来生产各具特色的芯片。作为32位嵌入式RISC微处理器业界的领先供应商,ARM公司在世界上的合作伙伴超过100个,其中包括半导体工业的著名公司,从而使其具有大量的开发工具和丰富的第三方资源,他们共同保证了基于ARM处理器核的设计可以很快投入市场。ARM处理器核已经有6个系列产品:ARM7、ARM9、ARM9E、ARM10E、SecurCore以及最新的ARM11系列。进一步的产品来自合作伙伴。例如:Intel Xscale微体系结构和Strong ARM产品,ARM7、ARM9、ARM9E和ARM10是4个通用处理器系列。每个系列提供一套特定的性能来满足设计者对功耗、性能和体积的需求。ARM家族的所有成员都共享同一个基本指令集即32位ARM指令集,同时不同的产品又可以有不同的扩展指令集,这些扩展指令集包括:16位Thumb指令集、DSP扩展指令集、SIMD扩展指令集和Janelle扩展指令集。ARM指令集是基本指令集,它包括数据传输、数据处理、流程转向、协处理器指令。可以看到,ARM指令集对于一般的工业控制应用绰绰有余,而其32位RISC的特性使得其性能远比一般的8/16位单片机强大的多,因此也能用在比较复杂的控制领域,如手机内部的控制单元。Thumb扩展指令集是ARM指令集的一个子集,而且被压缩成了16位。现在面世的ARM产品都支持Thumb指令集,它已经成为ARM核的标准扩展指令集。现在,ARM微处理器及技术的应用已经深入到工业控制、无线通讯、网络应用、消费类电子产品、成像和安全产品等各个领域,并会在将来取得更加广泛的应用。鉴于在嵌入式微处理器领域,ARM系列产品占据着统治地位以及ARM系列体系结构的科学性和优良性,本开发平台采用了ARM体系结构的微处理器作为开发板的内核。同时,由于在ARM系列产品中,ARM9系列微处理器在高性能和低功耗特性方面都提供了最佳的性能:(1) 具有5级整数流水线,指令执行效率非常高。(2) 提供1.1MIPS/MHz的哈佛结构,支持32位ARM指令集和16位Thumb指令集。(3) 支持32位的高速AMBA总线接口。(4) 全性能MMU,支持Windows CE、Linux、Palm OS等多种主流嵌入式操作系统。(5) 微处理器单元支持实时操作系统。(6) 支持数据Cache和指令Cache,具有更高的指令和数据处理能力。ARM9系列微处理器包含ARM920T, ARM922T和ARM940T三种类型内核,主要应用于无线设备、仪器仪表、安全系统、机顶盒、高端打印机、数字照相机和数字摄像机等。目前市场上的主流ARM处理器基本上都是使用了ARM7和ARM9内核。但两者在性能上有不小的差异,为使开发板的功能足够强大,以满足和支持多方面更高性能的需要,本设计选择了ARM9。ARM9核将ARM7核的功能显著提高到更高、更强的水平。ARM9也支持Thumb指令集,并支持片上调试。最显著的区别是流水线从3级增加到了5级。其实ARM9使用5级流水线也是受StrongARM流水线的启发而设计的,并针对StrongARM的某些不足加以改进,从而获得了更好的性能。到ARM7为止,3级流水线性价比己经很高,但是随着人们对性能要求不断提高,使得原有的3级流水线无法满足要求,于是ARM9处理器使用了5级流水线。同时具有分开的指令和数据存储器,减少在每个时钟周期内必须完成的最大工作,进而允许使用更高的时钟频率。由于ARM9具有了以上其他体系结构微处理器所不具备的优点和特点,本文的开发平台使用了基于ARM9核心的处理器。 嵌入式芯片的选型三星S3C2410 S3C2410是韩国Samsung公司推出的16/32位RISC处理器,它是一颗主频高达203MHz、基于ARM920T内核的高性能微处理器,独立的16KB指令cache和16KB数据cache,MMU虚拟内存管理单元,使得程序运行以及数据存储更加高效,并可以支持WINCE.net、Linux和uCOS-II等多种业内主流的操作系统。它的低功耗、精简和出色的全静态设计特别适合于低成本和功耗敏感的应用。同样它还采用了一种叫做Advanced Microcontroller Bus 。此外,S3C2410A还集成了以下片上外设:(1) LCD控制器(支持STN和TFT)(2) NAND Flash控制器(3) SDRAM控制器等系统管理单元(4) 3通道UART(5) 4通道DMA(6) 4通道具备PWM功能的定时器(7) IO口(8) 4通道16位定时器/PWM发生器(9) RTC(实时时钟)(10) 8通道l 0bit精度ADC和触摸屏控制器(内置切换MOS管)(11) IIC总线接口(12) IIS数字音频总线接口(13) USB主机/USB设备(14) SD/MMC卡控制器(I5) Z通道SPI(16) PLL数字锁相环1通过这一系列完整的系统外围设备,大大减少了整个系统的成本,消除了为系统配置额外器件的需要。在时钟方面S3C2410也有突出的特点,该芯片集成了具有日历功能的RTC和具有PLL(MPLL和UPLL)的芯片时钟发生器。MPLL产生主时钟,能够使处理器工作频率最高达到203MHz。这个工作频率能够使处理器轻松运行WINCE.net, Linux等操作系统以及进行较为复杂的信息处理。UPLL产生实现主从USB功能的时钟。S3C2410将系统的存储空间分成8组(Bank),每组的大小是128MB,共1GB。Bank0到Bank6都采用固定的Bank起始寻址,用于ROM或SRAM。 Bank7具有可编程的Bank的起始地址和大小,用于ROM, RAM或SDRAM。所有的存储器Bank都具有可编程的操作周期,支持外部等待信号延长总线周期。S3C2410支持从NAND Flash启动,NAND Flash具有容量大、比NOR Flash价格低等特点。若系统采用NAND Flash与SDRAM相组合的方式,可以获得非常高的性价比。可以将引导代码和操作系统镜像存放在外部的NAND Flash中,并从NAND Flash启动。当S3C2410在这种模式下上电复位时,内置的NAND Flash控制器将访问控制接口,将NAND Flash存储器里4K大小的引导代码自动加载到S3C2410内部的SRAM缓冲器中运行,这个4K的引导代码需将NAND Flash里的操作系统镜像加载到SDRAM中,在引导代码执行完毕后跳转到SDRAM执行,这样操作系统就能够在SDRAM中运行了。S3C2410对于片内的各个部件采用了独立的电源供给方式:内核采用1.8V供电,存储单元采用3.3V供电。鉴于芯片S3C2410具有以上其它嵌入式芯片所不能比拟的优点,更重要的是:采用此芯片作为开发平台的核心将会使得平台功能部件的设计与开发变得简单得多,因为开发平台必须要实现的很多功能能得到该芯片的直接支持,而不需要设计额外的硬件电路,这样就简化了设计,控制了硬件电路的体积,也会缩短开发周期,节省成本,还可以实现开发平台的稳定、高性能以及低功耗等要求。因此,此开发平台选择了三星 S3C2410A芯片作为核心芯片。1.3.2 平台软件系统的选型嵌入式Linux 嵌入式操作系统是嵌入式应用软件的基础和开发平台,在嵌入式系统中扮演着“灵魂”的角色。嵌入式系统中的应用程序必须在极少人工介入的情况下完成高度专业化和实时的工作,这就要求嵌入式操作系统能为之提供高效的服务和有力的支持。嵌入式系统的硬件资源环境一般比较苛刻,嵌入式微处理器和微控制器的内存一般都不大,要在紧张的资源下完成复杂的功能,要求嵌入式系统软件必须尽量的小巧、稳定和高效。因此,一个好的嵌入式操作系统除了具有标准操作系统所具有的功能外,还应具有如下特点(1) 可裁减性高,以支持嵌入式操作系统的个性化开发。(2) 开发工具全,好的工具可加快开发进度。(3) 可移植性好,避免重复应用开发。(4) 使用成本低,降低产品的总成本。(5) 占用资源少,适应系统资源限制。嵌入式Linux操作系统是将日益流行的Linux操作系统进行裁剪、修改,使之能在嵌入式系统上运行的一种操作系统。其功能强大的内核,性能高效、稳定、易定制、易裁减、硬件支持广泛、多任务的特点,完善的网络通讯、图形、文件管理机制和大小、功能都可定制的内核等优点,结合其所独具的免费、开放源代码等特征使其在嵌入式开发领域稳步发展。今天的Linux操作系统已经在全球范围内掀起了一股愈演愈烈的Linux风暴,并逐渐渗透到了所有与IT产业相关的领域,直接威胁到了Windows等商业操作系统的市场地位。正是基于Linux以上特点,本设计选择了嵌入式Linux操作系统。Linux的内核剪裁:(1) 操作系统:确定采用Linux操作系统。(2) 版本选择: Linux 2.4.18。 (3) 内核裁剪:根据需要只保留最为基础的功能。1.4 主要工作及内容安排本文的工作重心是设计基于FrameBuffer机制的LCD驱动程序工作;目标是编写嵌入式Linux的基于FrameBuffer机制的可移植性的LCD驱动程序,实现对S3C2410 LCD控制器所支持的LCD的驱动,为上层GUI图形引擎提供支持,并设计了简单的GUI图形库和测试程序验证本驱动程序的通用性。因此本文首先将介绍S3C2410 LCD控制器和Linux 下FrameBuffer机制。在对其熟悉之后,本文的工作进入了实质性阶段。本文主要内容安排如下:本章概述了课题的来源、研究的目的和意义以及嵌入式开发平台的选型,最后介绍了本文的内容安排。第二章概述了系统开发的基本理论知识,对嵌入式开发的基础知识做了简要的介绍。第三章对系统开发涉及的关键技术做了深入的研究,主要是对S3C2410内置LCD控制器和Linux下的FrameBuffer机制做了透彻的分析。第四章就系统的硬件和软件两方面的需求提出了系统的设计方案,硬件方面实现了S3C2410内置LCD控制器的设置和应用,软件方面实现了FrameBuffer机制在LCD驱动程序中的开发应用。第四章根据系统的硬件无关特性,编写了简单的图形API库、位图显示函数、汉字显示函数以及测试程序,对系统进行了性能测试和分析。总结中说明了本课题在构建通用性、可移植性的基于FrameBuffer机制的LCD驱动程序过程中提供的解决方案的指导意义,并展望了LCD驱动程序及显示技术的发展前景。第2章 系统开发的基本理论知识2.1 液晶显示屏概述2.1.1 LCD的原理液晶是一种有机复合物,由长棒状的分子构成。在自然状态下,这些棒状分子的长轴大致平行。LCD第一个特点是必须将液晶灌入两个列有细槽的平面之间才能正常工作。这两个平面上的槽互相垂直(90度相交)。由于光线顺着分子的排列方向传播,所以光线经过液晶时也被扭转90度。但当液晶上加一个电压时,分子便会重新垂直排列,使光线能直射出去,而不发生任何扭转。LCD的第二个特点是它依赖极化滤光片和光线本身,自然光线是朝四面八方随机发散的,极化滤光片实际是一系列越来越细的平行线。这些线形成一张网,阻断不与这些线平行的所有光线,极化滤光片的线正好与第一个垂直,所以能完全阻断那些已经极化的光线。 只有两个滤光片的线完全平行,或者光线本身已扭转到与第二个极化滤光片相匹配,光线才得以穿透。LCD正是由这样两个相互垂直的极化滤光片构成,所以在正常情况下应该阻断所有试图穿透的光线。但是,由于两个滤光片之间充满了扭曲液晶,所以在光线穿出第一个滤光片后,会被液晶分子扭转90度,最后从第二个滤光片中穿出。另一方面,若为液晶加一个电压,分子又会重新排列并完全平行,使光线不再扭转,所以正好被第二个滤光片挡住。总之,加电将光线阻断,不加电则使光线射出。当然,也可以改变LCD中的液晶排列,使光线在加电时射出,而不加电时被阻断。但由于液晶屏幕几乎总是亮着的,所以只有“加电将光线阻断”的方案才能达到最省电的目的。2.1.2 LCD的分类常见的液晶显示器可分为以下几种:(1) TN型LCD(Twisted Neumatic LCD): TN型LCD由于无法显示细腻的字符,通常应用在电子表、计算器上。作为显示器TN系列的液晶显示器已基本被淘汰。(2) STN型LCD(Super Twisted Neumatic LCD): STN由于扭转角度较大,字符显示比TN细腻,同时也支持基本的彩色显示,多用于液晶电视、摄像机的液晶显示器、掌上游戏机等。(3) DSTN型LCD (Dual Super Twisted Neumaic LCD):DSTN是由超扭曲向列型显示器(STN)发展而来的,由于DSTN采用双扫描技术,因而显示效果较STN有大幅度提高。STN和 DSTN的反应时间较慢,一般为300ms左右。用户能感觉到拖尾(余辉),因为屏幕上的内每个像素的亮度和对比度不能独立的控制,它只能显示颜色的深度伪彩显。(4) FSTN型LCD(Film Super Twisted Neumatic LCD):FSTN的显示效果和 DSTN 相当,但价格和工艺难度大大降低,所以现在大多数被动式LCD都采用了FSTN技术。(5) TFT型LCD(Thin Film Transistor LCD):TFT-LCD和STN-LCD相比,具有响应时间快、无闪烁等特点,改善了STN (水波纹)模糊的现象,提高了播放动态画面的能力,有更出色的色彩饱和度、还原能力和更高的对比度。2.1.3 LCD的优缺点(1) 液晶显示器件有以下一些优点:低压微功耗;平板型结构;被动显示型(无眩光,不刺激人眼,不会引起眼睛疲劳);显示信息量大(因为像素可以做得很小);易于彩色化(在色谱上可以非常准确的复现);无电磁辐射(对人体安全,利于信息保密);长寿命(这种器件几乎没有什么劣化问题,因此寿命极长,但是液晶背光寿命有限,不过背光部分可以更换)。(2) 液晶显示器件有以下一些缺点:显示时反应速度上较传统显示器慢;LCD的可视角度相对CRT显示器较小;LCD显示屏比较脆弱,容易受到损伤;工艺上、成本上相对CRT显示器较大。2.2 嵌入式linux简介 2.2.1 Linux内核功能划分Linux系统支持多进程的并发运行,每个进程都请求系统资源,比如处理能力、内存、网络连接和其他一些资源等。根据内核完成任务的不同可将内核划分为如下几部分:系统调用接口进 程管 理内 存管 理文 件系 统设 备控 制联 网内核子系统所实现的功能软件支持硬件联通性虚拟内存Tty 和设备访问文件和目录VFS并 行多任务体系结构相关代码内存管 理 器文件系统类型字 符设 备 网络子系统块设备IF驱动CPU内 存 条磁盘CD控制台网络接口图2-1 内核功能的划分进程管理:进程管理功能负责创建和撤销进程以及处理它们和外部世界的连接(输入和输出)。不同进程之间的通讯(通过信号、管道或进程间通信原语)是整个系统的基本功能,因此也由内核处理。除此之外,控制进程如何共享CPU的调度程序也是进程管理的一部分。概括地说,内核的进程管理活动就是在单个或多个CPU上实现多个进程的抽象。内存管理:内存是计算机的主要资源之一,用来管理内存的策略是决定系统性能的一个关键因素。内核在有限的可用资源上为每一个进程都创建了一个虚拟寻址空间。内核的不同部分在和内存管理子系统交互时使用一套相同的系统调用,包括从简单的malloc/free对到其他一些不常用的系统调用。文件系统:Linux在很大程度上依赖于文件系统的概念,Linux中的每个对象几乎都可以看作文件。另外,Linux支持多种文件系统类型,即在物理介质上组织数据的不同方式。设备控制:所有设备控制操作都有与被控制设备相关的代码来完成。这段代码就叫做设备驱动程序(device driver),这也是后面将要详细介绍的。内核必须为系统中的每件外设嵌入相应的驱动程序。网络设备:网络功能通常也由操作系统管理,系统负责在应用程序和网络接口之间传递数据包,并根据网络活动控制程序的执行。各部分关系如图2-1所示。2.2.2 嵌入式Linux驱动程序开发简介进行嵌入式系统的开发,很大的工作量是为各种设备编写驱动程序,除非系统不使用操作系统,程序直接操纵硬件。Linux系统中内核提供保护机制,用户空间的进程一般是不能直接访问硬件的。和其它Unix系统一样,Linux中设备被抽象出来,所有设备都看成文件。设备的读写和普通文件一样。用户进程通过文件系统的接口访问设备驱动程序。设备动程序主要完成这些功能:(1) 探测设备和初始化设备驱;(2) 从设备接收数据并提交给内核;(3) 从内核接收数据送到设备;(4) 检测和处理设备错误。Linux系统把设备分成3种类型:字符设备,块设备和网络设备。字符设备的读写以字节为单位,存取时没有缓存。块设备读写以块为单位,存取时有缓存支持以提高效率。典型的字符设备包括鼠标、键盘及串行口等。块设备主要包括硬盘、软盘、CD-ROM等。一个文件系统要安装进入操作系统必须使用块设备。网络设备用于通信,网络设备在Linux用作专门的处理。Linux的网络系统主要基于BSD Unix的Socket机制。在系统和驱动程序之间定义有专门的数据结构进行数据的传递。系统里支持对发送数据和接收数据的缓存,提高流量控制机制,提供对多协议的支持。2.3 本章小结在本章中主要对LCD的原理、分类及优缺点和嵌入式Linux的内核功能划分及驱动程序的开发方法等基本理论知识做了简单的概述,对系统开发所涉及的几个模块有了基本的概念,对基于S3C2410 LCD控制器的Linux驱动程序设计有了一个大体的了解,为系统的开发做好了准备。第3章 系统关键技术的研究3.1 系统硬件技术研究3.1.1 S3C2410内置LCD控制器的研究 S3C2410内置LCD控制器的特性 S3C2410开发板的LCD控制器对LCD屏主要提供如下支持:(1) STN屏a 支持3种扫描方式:4位单扫、4位双扫、8位单扫。b 支持单色、4级灰度和16级灰度屏。c 支持256色和4096色彩色STN屏(CSTN)。d 支持分辨率为640*480、320*240、160*160以及其它规格的多种LCD。(2)TFT屏a 支持单色、4级灰度、256色的调色板显示模式。b 支持64K和16M色非调色板显示模式。c 支持分辨率为640*480,320*240及其它多种规格的LCD。 S3C2410内置LCD控制器结构 S3C2410 LCD控制器用来传输图像数据并产生相应的控制信号,该控制器由REGBANK(控制寄存器组)、LCDCDMA(专用DMA)、VIDPCS(视频信号处理单元)、LPC3600和TIMEGEN(时序信号产生单元)组成(见图3-1)2。(1) REGBANK包含17个可编程寄存器和几个25616的调色板存储器,用来配置LCD控制器,并设置相应的参数。(2) LCDCDMA提供了视频信号的快速传输通道,自动通过系统总线从系统帧缓存中取出视频数据,并传输到视频信号处理单元。(3) VIDPCS将专用DMA中取出的信号进行整形并提高驱动能力等处理后,输出到外部数据端口VD230,如4/8单扫描或4双扫描显示模式输出。(4) TIMEGEN由可编程逻辑组成,以支持不同LCD驱动器的接口时序和速率的不同要求。它和LPC3600负责产生LCD所需要的控制时序,然后从 VIDEO MUX 送给LCD屏。REGBANKLCDCDMATIMEGENLPC3600VIDPRCSVclk/hclkVline/HsyncVframe/VsyncVm/Vden/TpLcdVf0LcdVf1LcdVf2Vd23:0System BusVIDEO MUX图3-1 S3C2410内部的LCD控制器的逻辑示意图S3C2410 LCD控制器可以产生的用于控制LCD的时序信号主要包括VCLK(像素时钟信号)、VDEN(数据有效信号)、VSYNC(垂直同步信号)、HSYNC(水平同步信号)、LEND(行结束信号)及LCD_PWREN(液晶屏使能信号)。VCLK信号是LCD控制器和LCD驱动器的像素时钟信号,LCD控制器在VCLK信号的上升沿处将数据送出,在VCLK信号的下降沿处被LCD控制器采样;VSYNC信号是垂直同步信号(也称帧同步信号),用来指示新的一帧图像的开始;HSYNC信号是水平同步信号(或行同步信号),用来给出新一行扫描信号的开始;VDEN信号是数据使能信号;LEND信号是行扫描结束信号,LCD驱动器在每扫描一行像素后给出该信号;LCD_PWREN信号用来控制LCD控制器的开或关,以便降低功耗,它需要LCD控制器硬件设计的支持。 S3C2410内置LCD控制寄存器 LCD液晶屏是通过S3C2410内部的寄存器来控制操作的。本次所使用到的S3C2410内部的寄存器基本属性见表3-1。3.1.2 LCD的主要操作时序的研究S3C2410 LCD控制器可以产生的用于控制TFT-LCD的时序信号主要包表3-1 S3C2410内部的寄存器基本属性寄存器地址上电复位值R/W描述LCDCON10X4D0000000X00000000R/WLCD控制寄存器1LCDCON20X4D0000040X00000000R/WLCD控制寄存器2LCDCON30X4D0000080X00000000R/WLCD控制寄存器3LCDCON40X4D00000C0X00000000R/WLCD控制寄存器4LCDCON50X4D0000100X00000000R/WLCD控制寄存器5LCDSADDR10X4D0000140X00000000R/WFrameBuffer起始寄存器1LCDSADDR20X4D0000180X00000000R/WFrameBuffer起始寄存器2LCDSADDR30X4D00001C0X00000000R/WFrameBuffer起始寄存器3REDLUT0X4D0000200X00000000R/W红颜色寄存器(仅STN)GREENLUT0X4D0000240X00000000R/W绿颜色寄存器(仅STN)BLUELUT0X4D0000280X0000R/W蓝颜色寄存器(仅STN)括VCLK、VDEN、VSYNC、HSYNC、LEND及LCD_PWREN3。VCLK信号是LCD控制器和LCD驱动器的像素时钟信号, LCD控制器在VCLK信号的上升沿处将数据送出,在VCLK信号的下降沿处被LCD控制器采样;VSYNC信号是垂直同步信号(也称帧同步信号),用来指示新的一帧图像的开始;HSYNC信号是水平同步信号(或行同步信号),用来给出新的一行扫描信号的开始;VDEN信号是数据使能信号;LEND信号是行扫描结束信号,LCD驱动器在每扫描一行像素后给出该信号;LCD_PWREN信号用来控制LCD控制器的开或关,以便降低功耗,它需要LCD控制器硬件设计的支持。LCD的时序参数如表3-2所列,图3-2所示的是LCD的主要操作时序。S3C2410的LCD控制器内部设有较多的寄存器,其中与时序信号高度相关的寄存器位于寄存器组中的LCDCON1/2/3/4/5。本文设计的LCD驱动器需要LCD控制器给出VCLK、VDEN、LCD_PWREN和VD23:0信号,其中VCLK信号依赖于LCDCON1寄存器中CLKVAL和S3C2410的HCLK的取值,具体公式为:VCLK(Hz)=HCLK/(CLKVAL+1)2。VSYNC和HSYNC的产生依赖于LCDCON2/3寄存器及HOZVAL和LINEVAL的配置,其中HOZVAL=水平像素数-1,LINEVAL垂直显示尺寸-1。帧频率VSYNC与LCDCON1/2/3/4寄存器中的VSPW、VBPD、VFPD、LINEVAL、HSYNC、HBPD、HFPD、HOZVAL和CLKVAL有关,具体公式为:Frame Rate(VSYNC)=1/(VSPW+1)+(VBPD+1)+ (VFPD+1)+(LINEVAL+1) (HSPW+1)+(HBPD+1)+ (HFPD+1)+(HOZVAL+1)2CLKVAL+1)/HVLK。图3-2 TFT-LCD时序事例表3-2 TFT-LCD的时序参数输出信号信号含义VCLK像点时钟VD数据信号VDEN数据有效信号VSYNC垂直同步信号HSYNC水平同步信号LEND行结束信号3.1.3 LCD引脚初始化设置的研究S3C2410有117个复用输入/输出功能端口引脚。这些端口是:A类端口(GPA):23输出端口;B类端口(GPB):11输入/输出端口;C类端口(GPC):16输入/输出端口;D类端口(GPD):16输入/输出端口;E类端口(GPE):16输入/输出端口;F类端口(GPF): 8输入/输出端口;G类端口(GPG):16输入/输出端口;H类端口(GPH):11输入/输出端口;各个端口可以容易地通过软件配置成符合各种系统配置和设计要求。在起动主程序之前,你必须定义你所使用的各个引脚的作用。如果引脚不是复用, 引脚可能被配置为I/O 端口。设置引脚的初始状态可以避免问题的发生。根据S3C2410的用户手册,可以查到LCD控制器与LCD屏相连的输出信号的GPIO端口属性见表3-3。 表3-3 部分GPIO端口属性寄存器地址读/写描述初始值GPCCON0x56000020读/写配置端口C的引脚0x0GPCUP0x56000028读/写端口C上拉寄存器无效0x0GPDCON0x56000030读/写配置端口D的引脚0x0GPDUP0x56000038读/写端口D上拉寄存器无效0xF000GPBCON0x56000010读/写配置端口B的引脚0x0GPBUP0x56000018读/写端口B上拉寄存器无效0x0GPGCON0x56000060读/写配置端口G的引脚0x0GPGUP0x56000068读/写端口G上拉寄存器无效0xF8003.2 系统软件技术研究3.2.1 Linux设备驱动程序总体框架前面提到过,Linux驱动程序(模块)最终实现的功能是把对硬件的操作转化成对文件的读写操作,为用户程序提供方便的接口,而嵌入式Linux中设备种类繁多,非标准设备也种类繁多,为了能够协调设备驱动程序和内核的开发,Linux有一个严格定义和管理的接口。下面是经过一系列的研究总结,从面到点的全面的概括的Linux常用驱动程序框架,开发者可以根据以下框架,迅速建立个性化的驱动框架,实现快速的开发4。从全局角度讲,Linux的设备驱动程序与外界的接口可以分为三个部分:(1) 驱动程序与操作系统的接口。这是通过file_operations数据结构来完成的。file_operations结构是一个定义在中的函数指针数组。每个文件都与他自己的函数及相关联(主要通过指向file_operations结构的一个名为fb_ops的指针字段)。这些操作主要负责系统调用的实现,并因此被命名为open、read、write等。按照惯例,file_operations结构或者只想这类结构的指针被称为fb_ops(或者是与此相关的其他叫法);我们后面提到的系统注册函数register_chrdev调用中有一个指针参数就是fb_ops。file_operations可以说是文件操作的核心结构之一。(2) 驱动程序与系统引导的接口。这部分利用驱动程序对设备进行初始化。这部分指的是驱动程序在加载过程中的初始化工作。驱动程序的加载主要由动态和静态两种。一般静态加载是针对常用的标准设备而言,这些设备的驱动程序可能是通用的,所以被编译在操作系统内核中,系统启动过程中可以自动加载,并且不能够卸载。而在嵌入式Linux操作系统中,考虑到节省资源,个性化设备等因素,我们一般采用动态加载,就是在系统需要的时候通过命令或者脚本文件、用户程序调用进行内核驱动(模块)的加载。常用命令加载:insmod modulename,卸载命令:rmmod modulename。具体初始化过程将在后面的注册注销中讨论。(3) 驱动程序与设备的接口。这部分描述了驱动程序如何与设备进行交互,者与具体设备密切相关。这部分主要包括一些地层的硬件操
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 自动控制原理(第2版)(余成波-张莲-胡晓倩)习题全解及MATLAB实验-第1、2章习题解答
- 计量管理制度范文
- 湖南省株洲市攸县第三中学2024-2025学年高三下学期5月期中地理试题(含答案)
- 设备操作规程汇编
- 高一年级5月月考地理 试题
- 幼儿园 疫情防控主题班会教案
- 建筑施工特种作业-建筑起重机械安装拆卸工(塔式起重机)真题库-3
- 建筑施工特种作业-建筑焊工真题库-5
- 厦门物理初中题目及答案
- 日语初级助词题目及答案
- 国开期末考试《建筑制图基础》机考试题及答案(第D-1套)
- SA8000-2014社会责任绩效委员会SPT组织架构、职责和定期检讨及评审会议记录
- 学术论文写作规范与技巧课件
- 生物高中-基于大数据分析的精准教学课件
- 焊接热处理工艺卡
- 2022年广东省深圳市中考化学真题试卷
- 公共政策学(第三版)-课件
- 齐鲁医学Lisfranc-损伤
- 大型钢网架整体提升施工工法
- 干熄焦炉内固_气流动与传热数值模拟毕业论文
- 公司股东变更登记申请书(一变一)
评论
0/150
提交评论