版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第11讲 嵌入式系统设计实例,第一章 嵌入式控制系统设计工作,2002年开始从事嵌入式系统的设计与研究工作 项目支持: 嵌入式移动数据库的应用研究,2003,广东省教育厅,5万元 嵌入式智能水文信息采集网络控制器的研究,20004,广东省水利厅,10万元 基于移动数据库的网络通用控制器的研究,2003,广东省科技计划项目,20万元 基于嵌入式移动数据库的水利信息化智能测控器的研究,2004,东莞市科技计划项目 ,15万元 基于嵌入式移动数据库的工业现场网络智能控制器的研究,2004,广州市科技计划项目,50万元 基于工业现场控制网络的嵌入式RFID控制器的研究,2005,广东省科技计划项目,5
2、5万元 项目参加研究生:3届 基于嵌入式uClinux的测控系统网络平台的研究,2004,仲兆峰 基于ARM与uC/OS-II嵌入式系统的研究与应用,2005,唐其伟 基于QTE的嵌入式工业网络控制器的系统开发与研究,2005,许星 嵌入式水文信息采集智能终端的研究与设计,2006,刘 泽 建 基于嵌入式网络控制器的工业监控系统的研究与实现,2006,周珊珊,CPU Motorola公司生产的32位RISC结构的MCF5272微处理器 ARM9核的主频最高达到203MHZ的S3C2410微处理器 操作系统 uClinux uC/OS-II Embedded Linux,项目完成情况,完成的功能
3、,项目领域,1。工业现场环境网络控制器 2。水文信息采集系统 3。RFID网络控制器 4。嵌入式移动数据库,系统实物图,2.1系统需求及硬件总体方案设计,2.1.1系统需求一般水文信息采集系统包括多个水文数据采集站,它承担的主要任务是实时采集、存储、传输各采集站的水位、流量、日降水量、水库水位、入库流量、蓄水量等信息,实现水文信息采集和长期存储的数字化处理,并将实时采集的数据通过嵌入式控制器经GPRS空中接口接入无线网络,并由移动服务商转接到Internet,最终通过各种网关和路由到达统一的数据处理中心工作站,其功能框图如图2-1所示。,图 2-1嵌入式水文信息采集系统框图,要研究和设计的嵌入
4、式控制器需满足以下几个方面的技术要求:1控制器应具有数字量、模拟量I/O读写功能,能很好地读取底端的水文信息采集传感器(如流量计、水位计等)的数据并能控制各执行器动作;2控制器应具有现场水文信息实时显示、数据查询的功能;3控制器应具有良好的有线和无线通信的功能,能将现场采集到的数据发送到服务器;4控制器应具有很好的实时处理能力,将得到的水文数据进行分析后分组打包,按照设定的协议将数据传送到数据中心。,2.1.2系统硬件平台总体设计方案,通常的嵌入式设备的硬件架构是以嵌入式微处理器为核心,通过CPU扩展接口以及平台硬件的支持,把众多的外设单元集到整个系统中,并通过CPLD等逻辑转换器件和其它硬件
5、电路完成对外设模块进行读写和控制操作。本智能终端采用了S3C2410X处理器,利用S3C2410X出色的内核性能和丰富的外部接口构造一个嵌入式系统平台,其硬件框图如图2-2所示。,图2-2嵌入式水文信息采集智能终端硬件构架,各部份基本功能如下:1处理器采用S3C2410X,该芯片基于ARM920T 内核,采用五级流水线和哈佛结构,提供1.1M IPS/MHz 的性能,是高性能和低功耗的硬宏单元。2电源电路为5V到3.3V、3.3V到1.8V的DC-DC转换器,给S3C2410X及其他需要3.3V电源的外围电路供电。3采用12MHz晶振为S3C2410X芯片提供系统时钟,通过S3C2410X芯片
6、内部集成的时钟控制逻辑可以产生系统所需的不同频率的时钟信号。4NAND FLASH存储器存放Bootloader、嵌入式操作系统、应用程序和其它在系统掉电后需要保存的用户数据等。5SDRAM存储器作为系统运行时的主要区域,系统及用户数据、堆栈均位于SDRAM存储器中。61OM/1OOM以太网接口为系统提供以太网接入的物理通道,通过该接口,系统可以10M或1OOMbps的速率接入以太网。7JTAG接口可对芯片内部的所有部件进行访问,通过该接口可对系统进行调试、编程等。8系统通过一个RS232串口接一GPRS模块,实现无线数据传输功能。9系统通过SPI接口扩展IO模块,负责数字量和模拟量的输入输出
7、。,2.2系统硬件电路详细设计,基于GPRS的嵌入式水文信息采集智能终端主要分为两部分来设计,一部份为核心板,另一部分为扩展板,这样做的优点是两块板可分别调试,高频和低频分离,核心板做成6层板而扩展板可做成2层板,这样可大大节省成本,其原理框图如图2-3所示。,图 2-3 嵌入式水文信息采集智能终端核心板原理图,图 2-3 嵌入式水文信息采集智能终端核心板原理图,2.2.1核心板硬件设计,2.2.1.1CPU S3C2410X功能概述S3C2410X是基于ARM920T内核的,最大工作频率能达到203MHz;可支持基本的外设接口,如彩色TFT LCD、USB、IIC、IIS、SPI、UART等
8、,并支持MMC和SD等标准的外部插卡。S3C2410X能支持NAND FLASH启动,具有很高的性价比,另外S3C2410X在市场上已有很多成熟的应用,因此作者选用了S3C2410X作为基于GPRS的嵌入式水文信息采集智能终端的应用处理器,下面是对S3C2410X功能的简要说明:S3C2410X芯片是韩国三星电子公司推出的一款基于ARM920T内核的16/32位RISC嵌入式微处理器,作为S3C2410X芯片的CPU内核,16/32位ARM920T RISC微处理器采用0.18um CMOS标准单元结构。ARM920T内核由ARM9TDM1存储管理单元(MMU)和高速缓存三部分组成。其中MMU
9、可以管理虚拟内存,高速缓存由独立的16KB地址和16KB数据高速Cache组成。S3C2410X芯片集成了一个LCD控制器(支持STN和TFT液晶显示屏)、NAND FL-ASH控制器、SDRAM控制器、3个通道的UART、4个通道的DMA, 4个具有PWM(脉冲宽度调制)功能的计时器和一个内部时钟、8通道的10位ADC。S3C2410X还有很多丰富的外部接口,如触摸屏接口、I2C总线接口、I2S总线接口、两个USB主机接口、一个USB设备接口、两个SPI接口、SD接口和MMC卡接口。在时钟方面S3C2410X也有突出的特点,该芯片集成了一个具有日历功能的RTC(实时控制)和具有PLL(M-P
10、LL和UPLL)的芯片时钟发生器。MPLL产生主时钟,能够使处理器工作频率最高达到203MHz。这个工作频率能够使处理器轻松运行WinCE, Linux等操作系统以及进行较为复杂的数据处理。,2.2.1.2FLASH接口电路设计,本设计中设定数据宽度为32位,而在ARM中希望字单元的地址是字对齐的,这就要求地址的低两位为0,即地址为0B00,因此在连接SDRAM和FLASH时要使其地址低两位A0:1为0。FLASH采用三星的KM29U128T,FLASH在实际中主要用nFWE、nFOE、ALE、CLE、nFCE等的控制信号,电路图如图2-4所示。,图 2-4 NAND FLASH接口电路图,图
11、 2-4 NAND FLASH接口电路图,2.2.1.3SDRAM接口电路设计,在本系统中采用两片32M现代海力思的SDRAM芯片HY57V561620扩展成64M,S3C2410X对于SDRAM的控制信号有nSRAS、nSCAS、nSCS1:0、DQM3:0、SCLK1:0、SCKE、nBE3:0、nWBE3:0等, 可以直接与HY57V561620相连来控制其存取,其电路接线图见附录2。,2.2.2扩展板硬件电路设计,扩展板的设计主要是根据终端的需要而设计的一些外围电路,在本系统中主要包含以下几个部份:电源管理模块、TFT LCD接口、触摸屏接口、通过SPI接口扩展IO模块、通过UART扩
12、展GPRS模块、USB接口、10M以太网接口、JTAG接口,下面就各部份作具体的设计。,2.2.2.1电源电路设计,在该系统中,需要使用5V和3.3V的直流稳压电源,其中,S3C2410X及部分外围器件需3.3V电源,另外部分器件需5V电源,5V直流电源通过DC-DC转换成3.3V,由于ARM内核需要1.8V的电源,因此需要将3.3V再转换成1.8V,系统电源电路如图2-6所示:,图 2-6 电源电路图,图 2-6 电源电路图,2.2.2.2JTAG电路设计,JTAG(Joint Test Action Group,联合测试行动小组)是一种国际标准测试协议,主要用于芯片内部测试及对系统进行仿真
13、、调试。它在芯片内部封装了专门的测试电路TAP( Test Access Port,测试访问口),通过专用的JTAG测试工具对内部节点进行测试。,图 2-7 JTAG电路图,图 2-7 JTAG电路图,标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为测试模式选择、测试时钟、测试数据输入和测试数据输出,其电路接线图如图2-7所示。,2.2.2.3串口电路设计及GPRS模块,几乎所有的微控制器和PC都提供串行接口,使用电子工业协会(EIA)推荐的RS-232-C标准,这是一种很常用的串行数据传输总线标准。要完成最基本的串行通信功能,实际上只需要RXD,TXD和GND即可,在本系统中
14、用到RS232转换芯片MAX3232CSA,在本系统中,通过RS232接一个GPRS模块,通过GPRS模块把数据发送到GPRS网中。由于GPRS网与互联网都是基于IP协议的,且是互相连接的,所以只要主站监控管理中心可以通过任意方式上网,终端数据就可以通过GPRS网络透明地传送到主站监控管理中心。监控管理中心的查询命令或控制命令也可以通过互联网和GPRS网发送到GPRS模块中,再由GPRS模块传送给各个终端模块,对它们进行操作。通过GPRS,终端检测控制部分可以直接访问互联网,所以在主站管理监控中心并不需要购置GPRS模块,中心只需通过宽带、ISDN或ADSL上网即可。本系统采用的是西门子公司的
15、MC35i GPRS模块。这个先进的GPRS模块接收速率可以达到86.20kbps,发送速率可以达到21.5kbps,当然最大的数据吞吐量还依赖于GPRS网络的支持,支持GSM900和GSM1800双频网络14。它为远程测量和监控提供了一个理想的解决方案,实现了完整的PPP协议及上层TCP/IP协议,可以通过简单的串口通信实现接入Internet。GPRS模块电路原理图主要分为三个部份,一部份为MC35i模块接口(40针),一部份为SIM卡接口电路(8针),还有一部份为串口电路的设计,整个电路如图2-9所示。,图 2-9 GPRS模块电路原理图,图 2-9 GPRS模块电路原理图,2.2.2.
16、4SPI接口电路及IO扩展模块的设计,S3C2410X有一个SPI系统,它是一个同步串行外围接口,允许MCU与各种外围设备以串行方式进行通信,可使用SPI来扩展各种接口芯片,这是一种最方便的扩展方法。它的最大优点是只需3-4根数据和控制线即可扩展各种接口器件。本系统采用SPI扩展IO模块,IO模块的主要功能是扩展DI、DO、AI、AO,通过这些模块实现与下端的传感器相连,这些传感器如水位计、流量计、雨量计等等,从而实现通过SPI来读取下端传感器的数据。SPI接口电路使用四个I/O脚,它们是串行时钟SPICLK;主机输入/从机输出数据线SPIMISO;主机输出/从机输入数据线SPIMOSI和低有
17、效的从机选择线nSS_SPI,电路如图2-10所示。,图 2-10 SPI接口电路图,图 2-10 SPI接口电路图,IO扩展模块共扩展6个DI、4个DO、8个AI、2个AO,主要用到两块芯片MAX1227和MAX5532。MAX1227是串行12位模数转换器(ADC),采用SPI串行接口,内置基准和温度传感器。这些器件具有片内FIFO、扫描模式、内部时钟模式,内部平均和AutoShutdown等特性15。采用外部时钟,其最高采样速率可300ksps,MAX1227具有8个输入通道。所有输入通道都可以配置为单极性或双极性模式、单端或差分输入。MAX5532是双通道、12位超低功耗的电压输出数模
18、转换器,IO扩展模块电路图见附录8。,2.2.2.5TFT LCD接口及触摸屏电路设计,S3C2410X内部已经集成了LCD控制器,因此可以很方便地去控制各种类型的LCD屏,例如STN和TFT屏,S3C2410X LCD控制器的特性。对于TFT屏的主要特性有16:支持单色、4级灰度、256色的调色板显示模式;支持64K和16M色非调色板显示模式;支持分辩率为640*480,320*240及其它多种规格的LCD。对于控制TFT屏来说,除了要给它送视频资料(VD23:0)以外,还有以下一些信号是必不可少的,分别是:VSYNC(VFRAME):帧同步信号;HSYNC(VLINE):行同步信号;VCL
19、K :像数时钟信号;VDEN(VM):数据有效标志信号。S3C2410X内置1个8信道的10bit模数转换器(ADC),该ADC能以500Ksps的采样速度将外部的模拟信号转换为10bit分辩率的数字量。同时ADC部分能与CPU的触摸屏控制器协同工作,完成对触摸屏绝对地址的测量,主要特性有:分辩率:10bit;相信误差:/- 2LSB;最大转换速率:500Ksps;模拟量输入范围:03.3V;分步X/Y坐标测量模式;自动X/Y坐标测量模式;中断等待模式其LCD接口及触摸屏电路图如图2-11所示。,图 2-11 TFT LCD接口及触摸屏电路图,图 2-11 TFT LCD接口及触摸屏电路图,2
20、.2.2.610M/100M以太网接口电路,S3C2410X内嵌一个以太网控制器,支持媒体独立接口,带缓冲DMA接口(Buffered DMA Interface, BDI)。可在半双工或全双工模式下提供lOM/lOOMbps的以太网接入。S3C2410X内部实际上己包含了以太网MAC控制,但并未提供物理接口,因此,需外接一片物理层芯片以提供以太网的接入通道。在采集终端中10M网络接口主要用到高性能网络控制器芯片CS8900A,该芯片是一种局域网处理芯片,工作电压3.3 V,工业级温度范围,100 pin TQFP封装,4K字节的内部集成RAM、10BASE-T收发滤波器17。S3C2410X
21、片内已有带MII接口的MAC控制器,而CS8900A也提供了MII接口,各种信号的定义也很明确,因此S3C2410X地址连接比较简单,如附录6所示,在图中,信号地发送和接收端应通过网络隔离变压器和RJ45接口接入传输媒体。,2.3系统硬件PCB设计及调试,对于主频高达200MHz的S3C2410X处理器来说,它的PCB设计是硬件工作中的难点,前面所有工作都集中在电路板上,因而PCB的设计直接影响整个系统的性能,在PCB布板之前,一定要保证原理图的正确性,PCB的电气关系是由原理图的网络表生成的,因为错误的原理图直接导致错误的PCB板,在本设计中需要注意的几点:1合理布局。例如模拟与数字电路分开
22、、元件分布均匀,避免电流过于密集、去耦电容尽量靠近元件的电源/地;2时钟考虑。时钟电路尽量靠近芯片、晶体下方不要走线、晶体外壳接地,增加电磁干扰能力、时钟线宽大于10mil;3走线规范。不同层的的信号垂直走线、地线和电源层不要走线、导线宽度不要突变、导线变向时导角不要小于90度。核心板PCB图如图2-12所示。在核心板的PCB设计中,因为CPU S3C2410X,图 2-12 核心板PCB图,图 2-12 核心板PCB图,采用BGA封装,每两个引脚之间只有0.8mm(31.496mil),因此应做成6层板,4个信号层,一个电源层和一个地层。由于电路要用到3.3V和1.8V电源,故应将电源层分割
23、成两部份。在PCB设计中,作者将线宽设置为6mil,过孔内径为8mil,外径为16mil,线距为11mil。因为CPU工作频率高达200MHz,因此在设计时要考虑高频的问题,在连线时数据线和地址线时尽量一排一排地走线,长度相近。另外晶振部份也要格外小心,核心板的完整PCB图见附录3附录5。扩展板的PCB设计相对简单一点,但因为元器件很多,既有数字电路又有模拟电路,所示在画图时应充分考虑。具体PCB图见附录7。硬件的调试很难总结,因为在调试过程中会有各种各样的因素导致系统错误,因此找到出错的根源是调试过程中的难点,主要注意以下几个方面:(1)优先调试电源,保证系统可靠供电;(2)结合软件调试;(
24、3)正确合理地使用示波器,提高工作效率;(4)系统时钟受干扰或晶体震荡不正常导致系统工作故障;(5)因焊接问题引发的各种问题。,第三章嵌入式水文信息采集智能终端驱动程序设计,建立基于Linux的嵌入式软件开发环境和驱动程序的设计是整个嵌入式水文信息采集智能终端软件开发的基础。嵌入式软件开发环境的建立主要包括Boot-loader的移植,嵌入式Linux的移植以及文件系统的建立。驱动程序是操作系统内核与硬件之间的接口,在本章中,将根据智能终端的实际需要完成LCD驱动程序、SPI驱动程序和GPRS模块驱动程序的编写。,嵌入式Linux操作系统的配置、裁减和移植是整个嵌入式软件开发的基础,嵌入式Li
25、nux因其内核小、代码开放、运行稳定和使用无需任何费用而广泛应用于嵌入式系统,嵌入式Linux的移植主要分为以下步骤:交叉编译环境的建立,Bootloader的配置、编译和移植,嵌入式Linux的配置、编译和移植,关于它们在很多文章上都有详细的介绍,因论文篇幅限制作者在此不再讲叙,请读者参考其他文献。嵌入式Linux文件系统的建立是整个软件开发环境建立的重要组成部份,关于这一部份在网上和书上很少有系统的正确的讲述,因此在这里作者着重介绍这方面的内容。作者采用busybox V1.0.0来建立嵌入式Linux文件系统,其主要步骤如下所示:,3.1嵌入式Linux系统移植和文件系统的建立,1配置、
26、编译busybox。busybox V1.0.0完整的源代码可以从下载,压缩包大小为1.3 MB左右。将源码解压之后,进入到busyb-ox-1.00目录,运行make menuconfig可以打开它的编译配置界面,然后根据实际的需要和硬件特性选择编译选项,值得注意的是我们必须选择Build Options选项里面的使用交叉编译的选项,因为我们是针对目标板来产生文件系统的。设置完毕后保存退出,先后执行make、make install命令编译并安装,之后busybox将在根文件系统中建立/usr、/bin、/sbin等目录,从这些目录中可以看到编译好的busybox可执行文件和其他应用命令的符
27、号链接,但到目前为止,得到的还不是一个完整可用的文件系统,必须要在这个基础上添加一些必要的文件,让它可以工作。,2添加需要的目录和文件。因为生成的文件系统只有三个目录,所示在这里作者添加mnt、usr、dev、etc、tmp五个目录,然后在usr目录下建立qte目录并在qte中建立lib、example两个目录。接下来将交叉编译sqlite得来的bin和lib目录中的文件拷到文件系统中的bin和lib目录,将交叉编译Qt/E得来的lib目录下的文件拷到/usr/qte/lib中,因为这些文件在应用程序运行时都要用到。,3编写/etc目录下的文件。CPU在加载内核(zImage)运行完成后将运行
28、文件系统的启动文件,其主要任务是完成驱动的加载、其他一些配置和启动应用程序。内核启动后首先运行/etc/init.d/rcS,rcS应如下编写:#!/bin/sh/bin/mount -aexec /etc/rc.local接着就会运行当前目录下的rc.local文件,部份rc.local脚本如下:#!/bin/sh./etc/profile/bin/date 061316302006/sbin/ifconfig lo 127.0.0.1 up/sbin/inetd./sbin/ifconfig eth0 192.168.1.11/sbin/modprobe s3c2410-ts/sbin/m
29、odprobe s3c2410-uda1341/sbin/modprobe s3c2410_gpio_buttonsecho “static” /var/run/pcmcia-schemeexport CARDMGR_OPTS=“-d”modprobe usb-charmount -t ramfs ramfs /.kdecd /dev ln -s fb/0 fb0 ln -s touchscreen/0raw h3600_tsrawln -s sound/dsp dspln -s sound/mixer mixer#ln -s misc/apm_bios apm_bios ln -s vc/0
30、 tty0 ln -s vc/1 tty1 ln -s vc/2 tty2/sbin/modprobe irda/sbin/modprobe irtty.,在执行该脚本时,首先运行profile脚本文件,它主要完成环境变量的设置,其代码如下:#!/bin/shPATH=/bin:/sbin:/usr/bin:/usr/qte/binLD_LIBRARY_PATH=/lib:/usr/lib:/usr/qte/libQTDIR=/usr/qteQWS_KEYBOARD=TTYLANG=zh_CNTERMINFO_DIRS=/usr/etcQWS_MOUSE_PROTO= s3c2410ts:/d
31、ev/s3c2410tsexport PATH LD_LIBRARY_PATH QTDIR QWS_KEYBOARD LANG TERMINFO_DIRS QWS_MOUSE_PROTO这样通过运行上面三个脚本文件,整个文件系统被加载,完成了启动的全过程。,3.2系统驱动程序开发,3.2.1嵌入式Linux驱动程序概述系统调用是操作系统内核与应用程序之间的接口,设备驱动程序是操作系统内核与硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作,对硬件设备进行打开、关闭、读写等操作,它主要完成以下功能
32、:1对设备初始化和释放;2把数据从内核传送到硬件和从硬件读取数据;3读取应用程序传送给设备文件的数据和回送应用程序请求的数据;4检测和处理设备出现的错误。,Linux系统支持三种类型的硬件设备:字符设备、块设备和网络设备22。字符设备以字节为单位进行数据处理,一般不使用缓存技术,如打印机、键盘等;块设备允许随机访问,而且常常使用缓存技术,如软盘、硬盘、光盘等;网络设备在Linux系统中有专门的处理,主要是通过BSD套接字进行访问。与字符设备和块设备相对应的有两类设备驱动程序,分别称为字符设备驱动程序和块设备驱动程序。两者的主要差别在于:与字符设备有关的系统调用几乎直接和驱动程序的内部功能结合在
33、一起。而读、写数据块设备则主要和快速缓冲存储区打交道。只在需要完成实际输入输出时,才用到块设备驱动程序23, 如图3-1字符设备和块设备驱动程序结构框图所示。,图 3-1字符设备和块设备驱动程序结构框图,图 3-1字符设备和块设备驱动程序结构框图,3.2.2智能终端LCD驱动程序设计,嵌入式水文信息采集智能终端使用6.4寸带触摸屏LCD用作显示终端,智能终端采用的CPU S3C2410X自带有LCD控制器,LCD控制器可支持STN和TFT两种液晶显示屏,由于在本课题中采用640480分辨率的TFT彩色LCD,因此在本文只作基于TFT的LCD驱动程序的设计。在设计LCD驱动程序之前,我们首先应对
34、S3C2410的LCD控制器作深入的认识。智能终端LCD电路原理图见第二章,对于控制TFT液晶屏来说,除了给它送视频资料(VD23:0)以外,还有以下一些信号是必不可少的,分别是:VSYNC(场同步信号)、HSYNC(行同步信号)、VCLK(象素时钟信号)、VM(数据使能信号)、LEND/STH(行结束信号)、LCD_PWREN(电源使能信号)、nDISP_OFF(LCD数据显示开关使能信号)24。S3C2410内部的LCD控制器的逻辑示意图如图3-2所示。,图 3-2LCD控制器逻辑图,图 3-2LCD控制器逻辑图,图中REGBANK是LCD控制器的寄存器组,用来对LCD控制器的各项参数进行
35、设置, LCD控制器的功能是显示驱动信号,进而驱动LCD。而LCDCDMA则是LCD控制器专用的DMA信道,负责将视频资料从系统总线取出通过VIDPRCS从VD23:0发送给LCD屏,同时TIMEGEN和LPC3600负责产生LCD屏所需要的控制时序,例如VSYNC、HSYNC、VCLK、VDEN,然后从VIDEO MUX 送给LCD屏。S3C2410 LCD驱动程序是基于Framebuffer技术来编写的,Framebufer(帧缓冲)是Linux为显示设备提供的一个接口,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作,这种操作是抽象的、统一的,用户不必关心物理显存的位置、换页机
36、制等具体细节。智能终端LCD驱动程序的设计主要分为三步来完成,第一步是编写初始化函数,即完成LCD控制器的初始化设置;第二步是编写成员函数;第三步是将驱动程序加入Linux内核,作者在此只列出最关键地方的部份程序。1端口初始化。因为S3C2410X的端口是复用的,因此应将GPC和GPD两个端口设置为LCD信号端,同时应将VM引脚置,1,打开LCD,程序代码如下:,void s3c2410_lcd_init(void)GPCUP = 0 xffffffff;/ GPC pull-up disabaleGPDUP = 0 xffffffff;/ GPD pull-up disabaleGPDCON
37、 = 0 xaaaaaaaa;/设置GPD端口为LCD数据口#ifdef CONFIG_S3C2410_SMDK set_gpio_ctrl(GPIO_G4 | GPIO_PULLUP_DIS | GPIO_MODE_LCD_PWRDN);/将GPC4(VM)置高电平,开启LCD,将GPC8(LCD_PWRDN)置高电平,打开LCD电源。#endif#if defined(CONFIG_MIZI) #endif,2LCD控制器初始化设置。其主要任务是通过写LCD控制寄存器设置显示模式和颜色数,然后分配LCD显示缓冲区,本文采用的TFTLCD显示方式为640X 480,l6位彩色。初始化关键部份
38、的代码如下所示:#ifdef CONFIG_S3C2410_SMDKstatic struct s3c2410fb_mach_info xxx_stn_info _initdata = pixclock:39721,bpp:16,/设置16位色xres: 640,/分辨率设计yres: 480,hsync_len: 96, vsync_len: 2,/ 场同步信号长度,行同步信号长度left_margin: 20, upper_margin: 20,/设置图像离四周边框的宽度right_margin: 20, lower_margin: 20,sync:0,cmap_static:1,reg
39、: /LCD控制寄存器的设置lcdcon1 : LCD1_BPP_16T | LCD1_PNR_TFT | LCD1_CLKVAL(1) |LCD1_ENVID(1);lcdcon2 : LCD2_VBPD(32) | LCD2_VFPD(9) | LCD2_VSPW(1),lcdcon3 : LCD3_HBPD(47) | LCD3_HFPD(15),lcdcon4 : LCD4_HSPW(95) | LCD4_MVAL(13),lcdcon5 : LCD5_FRM565 | LCD5_INVVLINE | LCD5_INVVFRAME | LCD5_HWSWP | LCD5_PWREN,;
40、#endif,在此只讲述LCDCON1寄存器的配置方法,其他可以类推。我们首先查看S3C2410数据手册,关于LCDCON1寄存器需要配置的分别为LINECNT27:18、CLKVAL17:8 、MMODE7、 PNRMODE6:5 、BPPMODE4:1 、ENVID0,LINECNT是用来读取行计数器的状态因此无需设置;CLKVAL决定象素采集时钟在这里设置为1;MMODE是用来设置STN信号的行列极性转换控制频率的,因为在这里采用TFT LCD故不需设置;PNRMODE是用来设置显示模式,对于TFT LCD应设置为11;BPPMODE是用来设置屏颜色的位数的,在这里用的是16位TFT L
41、CD,故该设置为1100;NVID是视频使能信号,综合以上可得如下设置:LCD1_BPP_16T0 x00000018;LCD1_PNR_TFT=0 x00000060; LCD1_CLKVAL(1)= 0 x00000100; LCD1_ENVID(1)= 0 x00000001,这样就完成LCDCON1寄存器的设置。,3静态加载LCD驱动。修改drivers/char/config.in文件,加上一行:bool S3C2410 LCD support CONFIG_FB_S3C2410;修改drivers/char/Makefile文件,加上一行:obj-$(CONFIG_FB_S3C24
42、10)+=s3c2410fb.o,这样在编译内核的时候选择S3C2410 LCD support即可将LCD驱动编译进内核。,3.2.3 智能终端SPI驱动程序设计,SPI(Serial Peripheral Interface)总线是Motorola公司提出的一个同步串行外设接口,用于CPU与各种外围器件进行全双工、同步串行通讯30。SPI串行外设接口是一个许多微处理器、外围设备都支持的全双工同步串性数据链路标准。在本系统中采用SPI总线来扩展IO模块,来控制IO扩展板的AI模拟量输入、AO模拟量输出、以及开关量的输入(DI)输出(DO)。根据S3C2410X的参考手册来编写SPI驱动应分为
43、如下步骤:1设置通信波特率寄存器(SPPREn);2设置SPCONn寄存器配置SPI通信模式;3对SPI芯片MAX1227、MAX5532进行初始化;4检查ready状态,通过SPTDATn寄存器读取或发送数据。SPI驱动程序的编写主要包括两个文件:spi.h和spi.c,spi.h主要是头文件的包含,因论文篇幅限制,作者是列出spi.c中一些重要的程序代码。首先是SPI寄存器变量的定义,通过spi_init(void)函数将硬件SPI控制寄存器的物理地址映射到内存中,这样就实现了通过对内存的操作来对物理寄存器操作。,#define SPI_MAJOR 180devfs_handle_t de
44、vfs_spi;#define SPI_BUFFER _NONCACHE_STARTADDRESSunsigned long SPI_GPECON;/GPE Part defineunsigned long SPI_GPEDAT;unsigned long SPI_GPEUP;unsigned long SPI_GPGCON;/GPG Part defineunsigned long SPI_GPGDAT;unsigned long SPI_GPGUP;unsigned long SPI_SPCON0;/SPI Part defineunsigned long SPI_SPSTA0;unsig
45、ned long SPI_SPPIN0;unsigned long SPI_SPPRE0;unsigned long SPI_SPTDAT0;unsigned long SPI_SPRDAT0;#define spi_gpecon (*(volatile unsigned long *)SPI_GPECON)#define spi_gpedat (*(volatile unsigned long *)SPI_GPEDAT)#define spi_gpeup (*(volatile unsigned long *)SPI_GPEUP)#define spi_gpgcon (*(volatile
46、unsigned long *)SPI_GPGCON)#define spi_gpgdat (*(volatile unsigned long *)SPI_GPTDAT)#define spi_gpgup (*(volatile unsigned long *)SPI_GPGUP)#define spi_con0 (*(volatile unsigned long *)SPI_SPCON0)#define spi_sta0 (*(volatile unsigned long *)SPI_SPSTA0)#define spi_pin0 (*(volatile unsigned long *)SP
47、I_SPPRE0)#define spi_pre0 (*(volatile unsigned long *)SPI_SPPRE0)#define spi_tdat0 (*(volatile unsigned long *)SPI_SPTDAT0)#define spi_rdat0 (*(volatile unsigned long *)SPI_SPRDAT0)int spi_open(struct inode *,struct file *);int spi_close(struct inode *,struct file *);int spi_ioctl(struct inode *,str
48、uct file *,unsigned int,unsigned long);ssize_t spi_read(struct file *, char *,size_t);ssize_t spi_write(struct file *, char *,size_t);static struct file_operations spi_fops = open:spi_open,read:spi_read,write:spi_write,ioctl:spi_ioctl,release:spi_close,;,#define spi_gpeup (*(volatile unsigned long *
49、)SPI_GPEUP)#define spi_gpgcon (*(volatile unsigned long *)SPI_GPGCON)#define spi_gpgdat (*(volatile unsigned long *)SPI_GPTDAT)#define spi_gpgup (*(volatile unsigned long *)SPI_GPGUP)#define spi_con0 (*(volatile unsigned long *)SPI_SPCON0)#define spi_sta0 (*(volatile unsigned long *)SPI_SPSTA0)#defi
50、ne spi_pin0 (*(volatile unsigned long *)SPI_SPPRE0)#define spi_pre0 (*(volatile unsigned long *)SPI_SPPRE0)#define spi_tdat0 (*(volatile unsigned long *)SPI_SPTDAT0)#define spi_rdat0 (*(volatile unsigned long *)SPI_SPRDAT0)int spi_open(struct inode *,struct file *);int spi_close(struct inode *,struc
51、t file *);int spi_ioctl(struct inode *,struct file *,unsigned int,unsigned long);ssize_t spi_read(struct file *, char *,size_t);ssize_t spi_write(struct file *, char *,size_t);static struct file_operations spi_fops = open:spi_open,read:spi_read,write:spi_write,ioctl:spi_ioctl,release:spi_close,;,然后就
52、是完成对上面定义的函数的编写,例如spi_open()函数代码如下:int spi_open(struct inode *inode,struct file *filp)spi_gpecon ,/* * S3C2410X SPI configuration * * GPG2=nSS0, GPE11=SPIMISO0, GPE12=SPIMOSI0, GPE13=SPICLK0* */SPI_GPECON = ioremap(0 x56000040,4);SPI_GPEDAT = ioremap(0 x56000044,4);SPI_GPEUP = ioremap(0 x56000048,4);
53、SPI_GPGCON = ioremap(0 x56000060,4);SPI_GPGDAT = ioremap(0 x56000064,4);SPI_GPGUP = ioremap(0 x56000068,4);SPI_SPCON0 =ioremap(0 x59000000,4);SPI_SPSTA0 =ioremap(0 x59000004,4);SPI_SPPIN0 =ioremap(0 x59000008,4);SPI_SPPRE0 =ioremap(0 x5900000c,4);SPI_SPTDAT0 =ioremap(0 x59000010,4);SPI_SPRDAT0 =iore
54、map(0 x59000014,4);return 0;static int _exit spi_exit(void)devfs_unregister(devfs_spi);module_init(spi_init);module_exit(spi_exit);至此,完成了整个SPI驱动程序的编写工作。,3.2.4智能终端GPRS通信模块驱动程序设计,在本系统中,通过RS232接一个GPRS模块,通过GPRS模块接入GPRS网络。在GPRS与Internet网中间存在许多相当于ISP的网关技术节点(GGSN),以连接GPRS网与外部的Internet网,GPRS模块采用PPP协议通过拨号登录到
55、GGSN上,获得GGSN动态分配到Internet网的IP地址,这样就实现了登录到Internet。采用GPRS作为嵌入式系统中的无线传输层,将从根本上解决目前移动Internet费用高而速率低的瓶颈问题,同时在链路层,采用PPP(Point-to-Point Protocol点到点协议)协议。PPP协议是为在同等单元之间传输数据包这样的简单链路设计的链路层协议,这种链路提供全双工操作,并按照顺序传递数据包,PPP协议中提供了一整套方案来解决链路建立、维护、拆除、上层协议协商、认证等问题。PPP协议作为Linux操作系统的一个重要组成部分,能够支持在串行线上的TCP/IP 的使用,这就使用户可
56、以通过串口与GPRS模块通讯,并通过GPRS网络接入Internet,由于系统需要CPU通过串口完成对GPRS模块的控制以及和它的数据通讯以实现Internet的接入,所以要求Linux内核保留对串口和网络协议TCP/IP和PPP的支持,除此之外,还需移植PPP协议栈到目标板的文件系统,具体步骤如下所示:,1配置并编译Linux内核使其支持PPP协议。在配置内核时,先选择NetWork device support,然后选择PPP(point-to-point protocol) support并选择下面5项:PPP multilink support(EXPERIMENTAL)PPP sup
57、port for async serial prots PPP support for sync tty ports PPP Deflate compressionPPP BSD-Compress compression然后保存编译内核即可。,2移植PPP协议栈。作者所用的嵌入式Linux内核的版本为2.4.18,因此作者下载相应的PPP协议栈的版本为2.4.1(ppp-2.4.1.tar.gz)并解压,然后分以下几个步骤完成:(1) 交叉编译ppp协议栈$cd ppp-2.4.1$export CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc$make交叉
58、编译后会在pppd、pppdump、pppstats、chat目录分别产生四个文件pppd、pppdump、pppstats、chat。下面就四个文件的作用简要说明:pppd(point to point protocol daemon):点到点协议守护进程;pppdump:转换PPP记录文件为可读格式;pppstate:用于打印ppp的统计表格;chat:定义了计算机和modem之间对话式的信息交换,它的主要目的是建立pppd和远程pppd处理的连接。,(2) 配置文件a 编辑文件scripts/ppp-on为简洁起见,去掉了一些注释,该文件修改为: #!/bin/sh TELEPHONE=
59、*99*1# #设置GPRS业务号码 ACCOUNT=liu #设置用户名PASSWORD=liu #设置用户密码LOCAL_IP=192.168.1.11 #设置本地IP REMOTE_IP=0.0.0.0 #远程IP地址,通常设为0.0.0.0NETMASK=255.255.255.0 #设置子网掩码export TELEPHONE ACCOUNT PASSWORD DIALER_SCRIPT=/usr/bin/ppp/ppp-on-dialer #设置拨号脚本的位置exec /usr/bin/ppp/pppd debug lock modem nocrtscts /dev/ttyS0 19200 kdebug 0 $LOCAL_IP:$REMOTE_IP noipdefault netmask $NETMASK defaultroute connect $DIALER_SCRIPT,b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 科技沙发布料的创新设计与制作工艺
- 老年人居住的小户型公寓设计要点
- DB35T 2240-2024公共数据清洗技术要求
- 二手房转让合同样本大全
- 中外双向投资合同
- 专业派遣人员劳务合同范本
- 上海市设备采购合同模版
- 不动产附条件赠与合同协议书
- 个人借款延期还款合同模板
- 个人房产互换合同
- 2024-2025学年第二学期学校全面工作计划
- 2025年护士资格考试必考基础知识复习题库及答案(共250题)
- 2025年人教版PEP二年级英语上册阶段测试试卷
- 烟草业产业链协同创新模式-洞察分析
- 公文写作与常见病例分析
- 2025年国家电投集团有限公司招聘笔试参考题库含答案解析
- 2025年中国南方航空招聘笔试参考题库含答案解析
- 经济学基础试题及答案 (二)
- 2024-2030年中国蚝肉市场发展前景调研及投资战略分析报告
- GB 19053-2024殡仪场所致病菌安全限值
- 2024-2030年中国互感器行业发展现状及前景趋势分析报告
评论
0/150
提交评论