版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要温度测量和控制在工业生产中有广泛应用,特别在石油、化工、电力、冶金等工业领域中,对度测量和监控是非常重要一种环节,温度参数是工业控制中一项重要指标。本文重要研究了基于ARM9架构嵌入式Linux系统在工业领域中各种炉温控制场合中应用。当前控制方案重要是采用老式PLC和单片机进行控制。PLC重要是针对单项工程或者重复数很少项目,灵活性相对局限性,并且体积大,成本相对较高;而单片机重要用于小型设备控制,具备成本低,功耗低,效率高特点,但可移植性较差。为了适应信息产业发展,新技术革新以及产业专业化当代化发展,本文针对PLC和单片机控制优缺陷和应用场合提出了采用ARM9嵌入式微控制器AT91RM920T和Linux操作系统相结合嵌入式温度控制系统,具备系统扩展性强、可靠性高、响应速度快、体积小等特点,为顾客提供了一种新型控制方案。本文一方面阐述了嵌入式操作系统构成,接着设计了温度控制系统硬件系统,重要括CPU模块、模仿电路模块、存储模块和通信模块四个某些;在对温度控制系统软件某些设计中,重要是针对Boot-Loader移植、Linux内核移植、根文献系统定制、驱动程序编写和应用程序编写五某些进行设计。系统功能重要是循环采集AD通道数据,上传AD数据到服务器,接受服务器下发控制数据包,记录日记等。通过在线运营测试,该系统稳定可靠,采集和控制效果良好,可有效减少了生产成本和工人劳动强度,为安全生产提供保证。核心词:ARM;Linux;嵌入式系统;温度控制系统AbstractIt’sabroadapplicationtomeasureandcontroltemperatureintheindustryproduction.Especiallyinsomeindustry,suchasoil,chemistry,electricpower,metallurgy,it’Saveryimportanttachetomeasllreandcontroltemperature,temperatureparameterisallimportantindexinindustrycontrolsituation.ThepapermainlyresearchestheapplicationinkindsoftemperaturecontrolsituationsintheindustryfieldbasedonARM9constructandembeddedLinuxsystem.PresentlythecontrolprojectsnormallyarePLCandSCM.PLCnormallyaimsatsingleprojectorsmallrepetitionproject,lacksinagilityandvolume,thecostishighercomparatively;SCMismainlyusedintheminitypeequipment,thecostandthepowerislower,theefficiencyishigher,butitishardtotransplant.Inordertoadapttotheimprovementofinformationindustry,thepaperfocusesonstrongpointa,weakpointsandappliedfieldsofPLCandSCM,andputsforwardtoadoptARM9embeddedmicrocontrollerandLinuxoperationsystemtocontrolthetemperature,Ithasagoodexpansibility,dependability,fastresponsespeed,smallvolume,offersanewtypecontrolprojecttousers.Firstlythepaperdiscussesthecomposingoftheembeddedoperationsystem,thendesignsthehardwaresystemoftemperaturecontrolsystemwhichmainlyconsistsofCPUmodule,analogcircuitmodde,storagemoduleandcommunicationmodule;Inthedesignofsoftwaresystem,weaimatthetransplantofBoot-loader,thetransplantofLinuxkernel,thetailorofrootfilesystem,theprogrammingofdfiversandapplications.ThefunctionsofsystemmainlyarecircularlysamplingthedatafromtheADchannels,uploadingthedatatotheserver,andreceivingthecontroldatapackagefromtheserverandrecordlogs.Througtheonlinetest,weconcludethat,thesystemissteady,hasgoodsamplingandcontroleffect.Itcanbegoodforreducingthecostofproductionandlabourintensity,andguaranteesthesafeproduction.Keywords:ARM,Linux,embeddedsystem,temperaturecontrolsystem目录TOC\o"1-3"\h\u285951绪论 1299681.1嵌入式概述 1109211.1.1嵌入式系统定义 114731.1.2嵌入式系统特点 2230371.2国内外现状以及研究意义 2248811.3选题背景和重要工作 3252252温度控制系统总体方案设计 5290742.1系统概述 5172722.2系统总体架构 5266792.2.1硬件系统设计原则 593002.2.2系统硬件整体构造 6173812.2.3系统软件整体构造 6124573温度控制系统硬件设计 8292863.1AT91RM9200芯片简介 855733.1.1ARM920T解决器概述 8122453.1.2ARM920T系统构造分析 8233773.1.3ARM920T存储器格式 1064693.2外围电路设计 10219803.2.1AT91RM9200有关接口和控制器 10219393.2.2模仿电路设计 12108903.2.3存储模块设计 1439333.2.4通讯模块设计 16219024嵌入式Linux操作系统建立 1722894.1交叉编译环境建立 17289474.2Boot-Loader模块设计 18136294.2.1Boot-Loader概述 18104284.2.2AT91RM9200启动流程 19115824.2.3Boot-Loader移植 20260894.3MLinux移植 22327054.4基于NandFlash文献系统设计 23284034.5AT91RM9200系统内核烧写 2528394.6嵌入式Linux设备驱动程序 2650124.6.1设备驱动程序开发过程 26222894.6.2加载和卸载驱动程序 27232144.6.3模数转换电路驱动程序设计 27304145温度控制系统应用程序设计 29148365.1有关概念 29175675.1.1进程 2962045.1.2进程间通信 30129845.1.3共享内存 3047895.1.4信号量 31220455.1.5套接字 32196455.2温度控制系统应用程序设计 3396105.2.1主程序功能与实现 34101215.2.2AD数据采集程序功能与实现 34299615.2.3DA数据采集程序功能与实现 37266265.2.4网络通信程序功能与实现 38150655.2.5日记记录程序功能与实现 41175345.3Makefile编写和源文献编译 4220677结论 4424890致谢 4515662参照文献 4614792附录A英文原文 475724附录B中文翻译 5517801附录C程序代码 611绪论1.1嵌入式概述随着微电子技术发展,嵌入式系统被广泛应用于工业领域、无线通信领域、智能仪表,消费电子等各个领域。它以嵌入式应用为目,将计算机硬件和软件相结合,完毕特定任务和功能。嵌入式系统在形式上可以分为系统级、板级、器件级。系统级指s各种工控机,板级是指带有CPU主板和OEM(OriginalEquipmentManufacturer)产品,器件级以单片机最为典型,日后许多半导体厂商以嵌入式应用为目的,形成嵌入式微解决器,并有许多嵌入式操作系统支持。普通嵌入式系统是针对某一特殊领域而专门设计和应用,既规定产品体积小、实时性好、系统可靠性好,又规定产品性价比高。因此对嵌入式系统开发来说,如何针对某种详细应用来选取适当嵌入式解决器,使嵌入式操作系统与之配合是非常核心。1.1.1嵌入式系统定义嵌入式系统(Embeddedsystem)也称嵌入式计算机系统。顾名思义,嵌入式系统是计算机一种特殊形式,因此在理解嵌入式系统概念前,必要先明确计算机基本概念。计算机是能按照指令对各种数据进行自动加工解决电子设备,一套完整计算机系统涉及硬件和软件两个某些。软件是指令与数据集合,而硬件则是执行指令和解决数据环境平台,是那些看得见、摸得着部件。计算机硬件系统重要由中央解决器(CPU)、存储器、外部设备以及连接各个某些计算机总线构成。嵌入式系统是以应用为中心、计算机技术为基本,软、硬件可剪裁,适应应用系统对功能、可靠性、成本、体积、功耗严格规定专用计算机系统。上述定义较好地描述了嵌入式系统各方面特性,不同应用对计算机有不同需求,嵌入式计算机在满足应用对功能和性能需求前提下,还要适应应用对计算机可靠性、机械构造、功耗、环境适应性等方面规定,在普通状况下,还要尽量减少系统成本。简朴地说,嵌入式系统是为详细应用定制专用计算机系统,定制过程既体当前软件方面,也体当前硬件方面。硬件上,针相应用,选取恰当芯片、体系构造,设计满足应需求接口、设计以便安装机械构造;软件上则明确与否需要操作系统、配备恰当系统软件环境、编写专门应用软件[2]。1.1.2嵌入式系统特点(1)是“专用’’计算机系统嵌入式系统微解决器大多非常适合于工作在为特定顾客群所设计系统中,称为“专用微解决器",它专用于某个特定任务,或者很少几种任务。(2)运营环境差别大嵌入式系统无处不在,但运营环境差别也很大,可运营在飞机上,冰天雪地两极中,骄阳似火汽车里。特别是在恶劣环境或突然断电状况下,系统仍可以正常工作。(3)比通用PC系统资源少通用PC系统有数不胜数系统资源,可轻松地完毕各种工作。而嵌入式解决器构造简朴,资源较少。(4)功耗低,体积小,集成度高,成本低通用PC发热量大,功耗大,空间大,而嵌入式微解决器必要嵌入到对象体系中因此必要严格控制其功耗和体积,同步为了减低成本,系统必要进行量体裁衣,去除冗余力求用较少软硬件资源实现较高性能[3]。1.2国内外现状以及研究意义当前以信息家电为代表互联网时代嵌入式产品,不但为嵌入式市场发展呈现了美好前景,还给嵌入式技术发展注入了新生命力。重要发展趋势有:(1)联网成为必然趋势为了适应嵌入式分布式解决器构造和应用上需求,面向21世纪嵌入式系统规定配备原则一种或各种网络通讯接口。针对外部联网规定,嵌入式设备必要配有通讯接口,以及相应TCP/IP合同栈支持。同步由于家用电器互联规定,新一代嵌入式设备还须具备USB,B1uet00th或IrDA等通讯接口,同步也需要提供相应通讯组网合同。(2)支持小型电子设备实现小尺寸,微功耗和低成本由于消费类电子以及应用场合需要,嵌入式集成度越来越高,体积越来越小,功耗越来越低。由于限制了内存容量和复用接口芯片,这就提高了嵌入式系统软件设计规定,使设计者不得不选用最佳编程模型和最佳软件算法,优化程序。(3)提供精致多媒体人机界面嵌入式设备之所觉得亿万顾客乐于接受,其中重要因素之一就是她们与使用者之间亲和力以及自然人机交互界面。如银行存取款机以及汽车GPS导向系统等,都具备良好人机界面。工业控制,这一当今热门领域更是让嵌入式系统找到了一种良好发展空间。从上世纪90年代开始,工业控制开始向一体化智能控制方向发展,即采用微电子技术,实现机电一体化,计控一体化,人机一体化。而嵌入式工业控制系统其具备功耗小,集成度高,专用性强,速度快,编程以便,价格低等长处逐渐成为当今工业控制首选。当今中华人民共和国已经成为世界制造工厂,国内是一种工业制造大国,但绝对不是一种工业制造强国,一种制约国内成为工业制造强国主线因素是工业控制系统设计,而工业控制系统设计核心在于工业控制器设计。自从1965年国内研制出第一块集成电路至今,集成电路产业已经经历了40近年风风雨雨,可当前依然落后于发达国家,甚至不如后起某些国家和地区。因素是多方面。运用嵌入式系统带来良好机遇,采用特色产品战略,大力发展各种具备自主知识产权IP(IntelligenceProperty)核H1,形成技术积累和IC产品特色,满足工业控制市场需求,缩短技术差距,使国内不但仅是一种制造大国,并且成为一种制造强国。因而,研究如何将嵌入式控制系统应用到工业控制中,实现工业控制网络化,智能化,一体化对国内工业控制水平发展具备积极现实意义。1.3选题背景和重要工作温度测量和控制在工业生产中有广泛应用,特别在石油、化工、电力、冶金等重要工业领域中,对温度测量和监控是非常重要一种环节。诸多行业需要使用大量加热设备,诸如热解决加热炉,用于融化金属坩埚炉,以及各种反映炉等,这样,温度就成了工业控制中一项重要被控参数。由于炉子种类,用途,实现手段不同,各种加热办法也不尽相似,例如煤气、天然气、油、电力等等,但就其控制系统自身动态性而言,基本属于大惯性,纯滞后环节。当前控制方案重要是采用老式PLC和单片机进行控制,满足了顾客大多数场合需要。PLC重要是针对单项工程或者重复数很少项目,灵活性相对局限性,并且体积大,成本相对较高,功能扩展需要较多模块;而单片机重要用于小型设备控制,特别是专业电子设备控制,具备成本低,功耗低,效率高特点,但是也存在程序一次性拷入后无法修改,对外围设备控制较低,抗干扰能力差等缺陷。为了适应信息产业发展,新技术革新以及产业专业化当代化发展,本文采用Atmel公司32位ARM9嵌入式微控制器Arm91RM9200和Linux操作系统实现温度控制,具备系统扩展性强、可靠性高、测量和控制精度较高、多任务实时调度、响应速度快、体积小等特点,为顾客提供了一种新型控制方案[1]。本文工作重要分为3个某些:一是温度控制系统硬件设计,二是嵌入式linux操作系统建立,三是温度控制系统应用程序设计。2温度控制系统总体方案设计2.1系统概述该温度控制系统重要由模仿电路,主控制电路,数据存储模块,输入输出模块,通讯模块等构成。主控制电路由ARM及其外围电路构成,是温度控制系统核心某些,完毕整个系统控制,数据传播与存储和信号解决等工作解决器对模仿电路采集进来模仿量进行A/D转换得到实时温度数据,由控制算法对数据进行解决,得到数字控制量通过D/A转换后通过输出电路对温度进行控制。解决器在数据解决过程中会将历史数据存入NandFlash中,并可通过网络介质与其她PC机通讯进行数据传播。2.2系统总体架构2.2.1硬件系统设计原则硬件系统设计必要遵循一下原则:(1)稳定性和可靠性:工业现场环境比较恶劣,模仿量参数解决性能直接影响系统技术指标,必要从一开始就充分考虑应用现场各种环境状况,采用抗干扰办法,选取恰当元器件类型和参数,防止串扰和误差积累。设计要充分考虑硬件电路简化,使用集成度较高元器件,提高系统抗干扰性能,提高稳定性和可靠性。(2)速度与精度:依照容许误差限值,按一定规则分派各个部件模块锁容许误差,系统设计过程中依照分派容许误差选取位数较高转换芯片,提高转换精度,选定电路构造。(3)功耗以及数据存储:Arm9lRM9200自身具备低功耗特点,VDDCORE电流为30.4mA,待机模式电流为3.1mA,并具备低速时钟操作模式和软件功耗优化能力,非常适合于能耗敏感场合。采用低功耗器件和贴片封装元器件,可有效减少功耗,减小PCB面积,提高电路自身抗干扰性能。为保证数据存储空间和安全保证,系统采用了一片32MNandFlash作为数据和程序存储区,保证了大容量数据存储需要。2.2.2系统硬件整体构造依照系统设计规定,系统整体框图如图2.1所示:信号解决电路信号输出电路信号解决电路信号输出电路AT91RM9200存储模块通讯模块图2.1系统整体框图系统重要分为如下四个模块:(1)CPU核心模块:重要由CPU以及外围电路构成,是系统主控制电路。CPU选用Atme公司基于删920TARMThumb解决器AT9lItM9200,对数据进行解决,存储,通讯等功能。(2)模仿电路:重要涉及信号解决电路和信号输出电路。其中信号解决电路重要完毕模仿输入信号放大和滤波,得到满足模数转换电路输入范畴数值。信号输出电路将算法解决后数字量转换成相应模仿信号输出,实现对被控对象控制。(3)存储模块:重要由NorFlash、SDRAM、NandFlash三某些构成。其中,NorFlash用来存储系统启动程序和系统内核;SDRAM是操作系统和应用程序运营空间;NandFlash重要存储采集数据以及应用程序。(4)通讯模块:重要由串行口电路,JTAG电路,以太网接口电路三某些构成,串行口电路和JTAG电路用来下载和调试程序,以太网接口电路用来和其她PC机或设备进行通讯,实现数据互换。[12]2.2.3系统软件整体构造ARM嵌入式软件开发流程普通是:设计目的硬件板,建立嵌入式Linux开发环境,编写、调试Boot-Loader,编写、调试Linux内核,编写、调试应用程序,调试ARM板。从软件开发角度来看,一种嵌入式Linux系统可以分为如下4个层次:(1)引导和加载Linux内核程序,重要是编制Boot.Loader程序。Boot-Loader相称于PCBIOS,在硬件板一加电后就开始运营,重要完毕硬件初始化,同步设立Linux启动时所需要参数,然后跳到Linux内核启动代码第一种字节开始引导Linux。它要用串行电缆把PC与硬件开发板连接起来,在PC端编译程序,生成bin文献,然后烧写到Flash中。(2)Linux内核。重要工作是为特定嵌入式硬件系统板定制内核以及内核启动参数。为实现Linux内核移植,需要把编译生成Boot-loader、KernelImage(内核)、RootFilesystem(根文献系统)烧写到Flash中。在编译内核时候,可以依照需要选取网络合同,例如TFTP、FTP、DHJP等。(3)和Linux内核配合使用根文献系统,涉及建立根文献系统和建立于Flash设备上文献系统。(4)顾客应用程序。重要是针对采集数据类型,进行相应数据解决,以完毕温度控制和数据通讯目。本章从总体上对该系统构成以及各某些功能做了简朴简介,某些详细功能和环节将在背面几章作详细阐述。3温度控制系统硬件设计本章重要是温度控制系统各模块硬件设计,重要涉及模仿电路设计,存储模块设计,通讯电路设计,输入输出模块设计。本设计采用了Atmel公司ARM核芯片AT91RM9200,一方面对该芯片功能做某些必要简介。3.1AT91RM9200芯片简介Atmel公司AT9lRM9200是完全环绕ARM920TARMThumb解决器构建系统。它有丰富系统与应用外设以及原则接口,提供了一种低功耗、低成本、高性能微控制器解决方案。3.1.1ARM920T解决器概述ARM920T高速缓存解决器是ARM9Thumb系列中高性能32位单片系统解决器。它提供完善高性能CPU子系统:●ARM9TDMIRISC整数CPU●16-K字节指令与16-K字节数据缓存●指令与数据存储器管理单元(MMUs)●写缓冲器●高档微解决器总线架构(AMBA)总线接口●OETM(内置追踪宏单元)接口3.1.2ARM920T系统构造分析ARM920T中ARM9TDMI内核可执行32位删及16位Thumb指令集。ARM9TDMI解决器是哈佛构造,涉及取指、译码、执行、存储和回写5级流水线。ARM920T解决器涉及两个协解决器:CPl4,控制软件对调试信道访问:CPl5,系统控制解决器,提供16个额外寄存器用来配备和控制缓存、MMU、系统保护、时钟模式及其她系统选项。ARM920T系统构造如图3.1所示:图3.1ARM920T系统构造图AT91RM9200涉及一种高速片上SRAM工作区及一种低等待时间外部总线接口(EBI),以成应用所规定片外存储器和内部存储器映射无缝连接。EBI有同步DRAM(SDRAM)、BurstFlash及静态存储器控制器,并设计了专用电路以以便SmartMedia、CompaetFlash及NandFlash连接。高档中断控制器(AIC)通过多向量、中断源优先级划分和缩短终端解决器传播时间来提高ARM920T解决器中断解决性能。外设数据控制器(PDC)向所有串行外设提供DMA通道,使其与片内或片外存储器传播数据时不用通过解决器,以减少传播持续数据流时解决器开销。包括双指针PDC控制器极大简化了AT91RM9200缓冲器连接。并行I/O(PIO)控制器与I/O复用外设输入/输出口线配合,最大限度地适应器件配备。每条口线上包具有一种输入变化中断、开漏能力和可编程上拉电阻。电源管理控制器(PMC)通过软件控制解决器以及各种外设来使系统功耗保持最低。它用一种增强时钟发生器提供涉及慢时钟(32kHz)在内选定期钟信号,以随时优化功耗和性能。AT91RM9200集成了许多原则接口,涉及USB2.0全速主机和设备端口及在网络层广泛使用10/100Base-T以太网媒体访问控制器(MAC)。此外,它还提供了一系列符合工业原则外设,可在频、电信、Flash卡、红外及智能卡中使用。为完善性能,AT91RM9200集成了涉及JTAG-ICE、专门UART调试通(DBGU)及嵌入实时追踪一系列调试功能,这些功能使得开发所有应用特别是受实时性限制应用成为也许。3.1.3ARM920T存储器格式ARM920T支持字节(8位)、半字(16位)、字(32位)三种数据类型,其中字需要4字节对齐,半字需要2字节对齐。ARM920T体系构造将存储器看作是从零地址开始字节线性组合。从O字节到3字节放置第一种存储字数据,从4字节到7字节放置第二个存储字数据,依次排列。作为32位微解决器,ARM920T体系构造所支持最大寻址空间为4GB(2字节)。ARM920T体系构造可以用两种办法存储字数据,大端格式和小端格式。大端格式中字数据高字节存储在低地址中,而低字节存储在高地址中;小端格式中低地址存储是字数据低字节,高地址存储是高字节。3.2外围电路设计3.2.1AT91RM9200有关接口和控制器AT91RM9200第一级译码由存储控制器执行,即由具备附加功能高档系统总线执行。译码将4G地址空间分为16个256MB区域。区域l~8相应EBI,和外部片选NCS0~NCS7相相应。区域0为内部存储器地址,第二级译码提供1M字节内部存储空间。区域15为外设地址,并且提供了对高档外设总线(APB)访问其她区域未使用,使用它们进行访问时,需要向发出访问祈求主机发出异常中断。外部存储器映射空间构造如图3.2所示:图3.2外部存储器映射空间构造图 外部总线接口(EBI)设计用以保证各种外设和基于ARM器件内置控制存储器间对的数据传播。静态存储器、SDRAM及BurstFlash控制器均可作为EBI上外部存储控制器。这些外部存储控制器可以解决各种类型外部存储器以及外部设备,如SRAM、PROM、EPROM、EEPROM、Flash、SDRAM及BurstF1ash。EBI通过集成电路支持CompactFlash与SmartMedia合同,从而大大减少了对外部组件需求。此外,EBI可解决多达8个外设数据传播,每个外设分派8个在内置存储控制器中定义地址空间。数据通过16位或32位数据总线进行传播,地址总线高达26位,8个芯片选取口(NCS[7:0])用来片选不同外设,各种控制引脚可以在不同外部存储控制器间复用。片选分派如下:.NCS0上为BurstFlash控制器或静态存储控制器.NCSl上为SDRAM控制器或静态存储控制器.NCS3上为静态存储控制器,可选支持SmartMedia.NCS4.NCS6上为静态存储控制器,可选支持CompactFlash.NCS7上为静态存储控制器在本设计中,选用NCS0作为NorFlash片选信号,NCSl作为SDRAM片选信号,NCS3作为NandFlash片选信号,NCS6作为AD控制器片选信号。静态存储控制器(SMC)产生信号来控制外部静态存储器或外设访问。SMC可编程地址可达512M字节。它有8个片选及一种26位地址总线。16位数据总线配备与8位或16位外部器件连接。独立读写控制信号容许存储器与外设直接连接。SMC支持不同容许单时钟周期存储器访问访问合同,同步也提供了外部等待祈求能力。静态存储控制器方框图如图3.3所示: 图3.3静态存储控制器3.2.2模仿电路设计(1)信号解决电路设计ADS7842是一种高效4通道12位精度模数转换芯片,它包括一种带有采样保持12位逐次逼近寄存器(SuccessiveApproximationRegistcr,SAP),具备并行三态输出驱动器。ADS7842在2mW功率消耗下达到200kHz采样频率,参照电压范畴可以从100mV到Vcc,相应LSB范畴从24uv到1.22mV。ADS7842最低可以在2.7V电压下工作。 低功耗,高速率以及自身多路复用器使得ADS7842成为体积小重量轻需要多路数据转换和测量嵌入式系统抱负选取。并且ADS7842可以在.40℃~85℃温度范畴内正常工作,适合工业现场恶劣环境。NCS2,NCS4~NCS7这些片选系统没有使用,可以任意选取一路作为译码器使能信号。本设计选取是NCS6,其地址空间是0x70000000~0x7FFFFFFF,基地址为0x路模仿通道地址空间是0x70000040~0x7000005E,为了选通这些地址,必要通过译码器对这些地址进行译码,以完毕不同芯片操作.工业现场测温器件重要有热电偶和热电阻传感器,测量出来信号值普通很小,只有20~100mV,需要通过温度变送器转变为原则0(4)~20mA电流信号或者(0)1~5V电压信号。这里以常用4~20mA电流信号为例,16路原则电压信号连接多路开关DG506,为了稳定输入电压和电流以保护元器件或者预设缺省电位,应在每路输入电压进入多路开关之前外加470Ω下拉电阻。A[3:0]连接地址线AB[4:11],多路选通后,通过D端输出。由于ADS7842输入电压范畴在-0.3V~0.3V+Vcc之间,Vcc使用5V直流电压,因此D端输出值接入AD芯片之前需要通过合理转换。通过OP07两次倒相后,输入端4--20mA电流转换为1-5V电压信号,以便连入ADS7842。本设计中选用ADS7842通道l,因此A[1:0]接地。nADC_CS分别与系统读使能信号NRD和系统写使能信号NWR0相或后作为芯片读写使能信号,同步nADC_CS作为片选信号输入。转换后数据存储在DB[11:0]中[4]。(2)信号输出电路设计DAC712是一种高效16位并行双缓冲D/A转换器,±10v电压输出,并带有+10V参照电压精准温度补偿。数字接口是一种迅速,60ns最小写脉冲宽度,当模仿信号输出复位时有清除功能。数据线DB[15:0]接DAC712数据输入端,nDAC_CS0接使能端A0,依照变送器不同需要,同样可以通过搭接运算放大电路把输出信号转换成4~20mA或者1-5V原则信号。由于ADS7842工作电压是+5V,数字量输出高电平是+3.5V~+5V,低电平是<0.4V,DAC712工作电压是±12V,数字量输入高电平是+2V~10.6V,低电平是0V~8V,而AT91RM9200工作电压是+3.3v,因此要完毕两者数据通信必要进行电平转换。本设计选用74LVCHl62245芯片完毕电平之间转换。3.2.3存储模块设计(1)NorFlash存储器电路设计Flash存储器是一种可在系统(In-System)进行电擦写、掉电后信息不丢失存储器。它具备低功耗、大容量、擦写速度快、可整片或分扇区在系统编程(烧写)、擦除等特点,在体积、抗震性方面均有很大优势,并且可由内部嵌入算法完毕对芯片操作,因而在各种嵌入式中得到广泛应用。作为一种非易失性存储器,Flash在系统中通惯用于存储程序代码、常量表以及某些在系统掉电后需要保存顾客数据等。惯用Flash为8位或16位数据宽度,编程电压为单3.3V。重要生产厂商为Atmel、AMD、Hyundai等,她们生产同型器件普通具备相似电气特性和封装形式,可通用[10]。AT49BV322A工作电压是2.65~3.6V,单片容量2MX16位,采用48脚TSOP封装,16位数据宽度,可以8位字节数据宽度工作。Flash提成71个扇区,通过对其内部命令寄存器写入原则命令序列,可对Flash完毕编程、整片擦除、按扇区擦除以及其她操作。Flash中重要存储程序代码、系统内核、常量表等等,选用一片16位Flash存储器构建Flash存储系统已经足够,本设计采用一片2MXl6位AT49BV322A作为Flash存储系统,容量为4MB。由于Flash特殊性,系统上电或复位后从此处获取指令并开始执行,因而,应将存有程序代码Flash存储器配备到Chipselect0上。即将NCS0连至AT49BV322A/CE端。AT91RM9200NCS0连接/CE端,起始地址为0xl0000000;AT91RM9200NRD接/OE端;NWRO接/VIE端;地址总线A[20:1]连接地址端口A[l9:0],数据总线DB[15:0]连接数据端口DQ[15:0]。(2)SDRAM电路设计与Flash不同,SDRAM不具备掉电保持数据特性,但其存取速度大大高于Flash存储器,具备读写属性,因而SDRAM在系统中重要用于程序运营空间,数据及堆栈区。当系统启动时,CPU一方面从复位地址0x0处读取启动代码,在完毕系统初始化后,程序代码普通调入SDRAM中运营,以提高系统运营速度,同步,系统及顾客堆栈、运营数据也都放在SDRAM中。SDRAM存储单元可以理解为一种电容,总是倾向于放电,为避免数据丢失,必要定期刷新(充电)。因而要在系统中使用SDRAM,就规定微解决器具备刷新控制逻辑,或是在系统中此外加入刷新控制逻辑电路。AT91RM9200芯片在片内具备独立SDRAM刷新控制逻辑,可以便地与SDRAM接口。本设计采用是Hyundai公司HY57V281620H,单片容量为4BanksX2MX16位,工作电压3.3V,采用54脚TSOP,兼容LⅣTTL接口,支持自动刷新(Auto-Refresh)和自刷新(Self-Refresh),单片为16位数据宽度,合用于规定内存密度大和高带宽场合。本设计选用2片16位HY57V281620H构成32位SDRAM存储系统,满足嵌入式操作系统以及各种复杂算法运营规定 SDRAM控制信号比较多,连接电路也相对复杂。AT91RM9200NCSl分别接两片/CS端;AT91RM9200SDWE分别接两片/WE端;HY57V281620HDQML和AQMH是高低字节选取信号,AT91RM9200A0/NBS0接片1DQML,NwRl肘BSl/CFIOw接片1DQMH,同理,A1/NBS2接片2DQML,NwR3/NBs3/CFIOw接DQMH。BA0和BAl是SDRAM选取信号,AT91RM9200A16/BA0和A17/BAl分别接两片BA0和BAl,SDCKE和SDCK分别接两片CKE和CLK,作为SDRAM时钟使能和时钟。地址总线A[13:2]接两片A[11:0],数据总线D[15:0]接片1DQ[15:0],D[31:16]接片2DQ[15:0],构成32位数据[11]。(3)NandFlash存储器电路设计Nand构造Flash数据存储器是超大容量数据存储抱负选取,是Samsung公司推出并着力开发新一代数据存储器件,电源电压1.7~3.6V,体积小,功耗低,按页进行读写,按块擦除,通过I/O口分时复用作为命令/地址/数据接口。在本设计中,采用Samsung公司K9F1208UOM存储数据,容量为64M×8位。该器件由4096个块构成,每个块有32个页,每页由512字节数据和1字节备用空间(用来存储纠错码、坏块信息和文献系统有关数据)构成。这528字节提成A、B、C三个区。对每一页寻址需要通过I/O口送出三个地址,第二、三行地址指明寻址到某一页,第一列地址指明寻址到页指定区中某一字节。对页分区命令为00H,01H,50H,其中00H选取A区,01H选取B区,50H选取c区。选定区内部寻址是由第一种列地址完毕,A0~A7最大寻址256字节。由于NandFlash对数据读写操作都是以页为单位,擦除则是以块为单位,因而一次擦除最小空间为0x4000(214)字节。对芯片读写以及擦除命令写入都是通过置高CLE引脚同步向I/O0~I/O7写入命令代码字节来完毕,地址写入则是通过置高ALE引脚同步写入地址字节来完毕。3.2.4通讯模块设计1、串行通信模块设计几乎所有微控制器、PC都提供串行接口,使用电子工业协会(EIA)推荐RS.232C原则,这是一种很惯用串行数据传播总线原则。早起它被应用于计算机和终端通过电话线和MODEM进行远距离数据传播,随着微型计算机和微控制器发展,不但远距离,近距离也采用该通信方式。在近距离通信系统中,不再使用电话线和MODEM,而直接进行端到端连接。2、JTAG接口电路设计JTAG(JomtTestActionGroup,联合测试行动小组)是一种国际原则测试合同,重要用于芯片内部测试及对系统进行仿真、调试,n1AG技术是是一种嵌入式调试技术,它在芯片内部封装了测试电路TAP(TestAccessPorc,测试访问口),通过专用JTAG测试工具对内部节点进行测试。当前大多数比较复杂器件都支持JTAG合同,如ARM,DSP,FPGA等。原则JTAG接口是4线:TMS,TCK,TDI,TDO,分别为模式选取,时钟,数据输入和数据输出。3、以太网控制器接口电路工业生产中以太网组态是一种非常普遍形式,通过网络化完毕对数据采集和控制是当前工业生产方向。AT91RM9200内嵌有以太网控制器,使用IEEE802.3u数据帧格式控制主机与物理层间数据互换。以太网控制器依照引脚输出配备不同,可使用独立媒体接口(MII)或简化独立媒体接口(RMH)来传播数据。由于AT91RM9200未提供物理层接口,故需外接一种物理层芯片,以提供以太网接入通道。本设计采用DAVICOM公司DM9161作为以太网物理层接口。DM9161是一款低功耗高性能CMOS芯片,支持10M和100M以太网传播,它起编码、译码输入和输出数据作用。4嵌入式Linux操作系统建立4.1交叉编译环境建立1.获取交叉编译工具链登录http://.1.uk,或者以FTP方式登录fI.uk,下载cross-2.95.3.tar.bz2,或者更高版本。本设计重要是针对Linux2.4内核移植,因此cross.2.95.3版本交叉编译工具链已经足够,如果针对Linux2.6版,需要下载cross-3.0以上版本。2.建立交叉编译环境(1)建立交叉编译环境目录#mkdir/usr/10cal/arm#cd/usr/local/arm#tarjxvfcross·2.95.3.tar.bz2(2)修改环境变量#cd/root#is-a#vi.bash-profile.bashprofile修改某些如下:#.bash_profile#GetthealiasesandfunctionsIf[-f~/.bashrc];then.~/.bashrcfi#UserspecificenvironmentandstartupprogramsexportTARGET=arm.1inuxexportPRJROOT=/home/armlinuxexportPREFIX=${PRJROOT}/toolsexportTARGET_PREFIX=${PREFIX}/${TARGET}exportPATH=$PATH:$HOME/bin:$PREFIX/bin:/usr/local/arm/2.95.3/bin:/sbin:/usr/sbin:/usr/10cal/sbinunsetUSERNAME3.验证与使用用vi编辑器编写一种简朴程序,例如hello.C。#include<stdio.h>immain() {printf(“HelloLinux!\n”);return0:}保存后退出。#arm-linux-gcchollo.C-ohello#filehellohello:ELF32-bitLSBexecutable,ARM,versionl(ARM),forGNU/Linux2.0.0,dynamicallylinked(usessharedlibs),notstripped阐明生成hello是可以工作在ARM平台上,也证明了交叉编译工具链是有效并且是可用[18]。4.2Boot-Loader模块设计4.2.1Boot-Loader概述在嵌入式系统中,系统引导程序(Boot-Loader)作用与PC上BIOS似,通过Boot-Loader可以完毕对ARM板上重要部件如CPU、SDRAM、Flash、串行El等进行初始化,然后调用内核,同步传递参数给内核,重要完毕如下工作。建立和初始化SDRAM,探测所有SDRAM位置和大小并进行初始化。Boot-Loader初始化并启动一种串口,让内核串口驱动自动探测哪个串口作为内核控制台。检测机器系统构造,Boot-Loader探测机器类型传递给内核MACHTYPE值。Boot-Loader创立和初始化内核标记列表(taggedlist),传递系统内存大小和位置,以及根文献系统位置。调用内核镜像。可以从Flash调用内核,也可以从RAM中调用内核。Boot-Loader普通分为两级,依赖于CPU体系构造代码,例如设备初始化代码等,普通放在一级Boot-Loader中,并且普通都用ARM汇编语言来实现,以达到短小精悍目。而二级Boot-Loader则通惯用c语言实现,这样可以实现更复杂功能,并且代码会具备更好可读性和可移植性。两级环节如表4.1所示。阶段一级Boot.Loader二级Boot-Loader环节1硬件设备初始化初始化本阶段要用到硬件设备环节2为二级代码准备RAM空间检测系统内存映射环节3拷贝二级代码到RAM空间将kemel映像和根文献系统映像从Flash读到RAM空间环节4设立堆栈为内核设立启动参数环节5跳转到二级代码C入口点调用内核表4.1Boot-Loader两级代码4.2.2AT91RM9200启动流程 要移植Boot-Loader,必要一方面清晰AT91RM9200启动流程。AT91RM920有片内引导和片外引导两种方式,由一根跳线控制。系统上电后检测BMS电平,如果BMS为高电平,则系统从片内ROM启动,如果为低,则从片外Flash启动。AT91RM9200ROM上电后被映射到0x00000000和0x00100000处,这两个地址都可以访问到ROM。由于AT91RM9200内部有128K片内ROM,其中固化了一种Boot-Loader和UpLoader,因此PC从0x0处开始执行这个Boot-Loader(即一级Boot-Loader)。一级Boot-Loader完毕后工作是装载二级Boot-Loader。AT91RM9200按照连接在SPI上DataFlash、连接在两线接(TWI)EEPROM和连接在外部总线接口(EBI)上8位存储器顺序依次查找合法Boot程序。所谓合法是指在这些存储设备开始地址处持续存储了32个字节,也就是8条指令必要是跳转指令或装载PC指令。其中第6条指令包括要装载映像大小。一旦找到合法映像后,Boot程序会把找到映像搬到SRAM中去,由于片内SRAM只有16K,除去3~4K片内启动程序占用某些数据空间,因此映像文献大小不能超过12K。当Boot程序完毕了把合法映像搬到SRAM后来,需要对存储器重映射。重映射后,SRAM从映射前0x0000地址映射到了0x00000000处,并且程序从0x00000000处开始执行。而ROM这时只能在0x00100000这个地址处看到了。4.2.3Boot-Loader移植1.Boot-Loader操作流程移植Boot-Loader过程中需要用到boot.bin、loader.bin、uboot.bin和uboot.gz这四个文献。系统上电后,并打开超级终端,由于Flash中没有引导程序,在超级终端界面下会浮现“CCCCCC……”,此时AT91RM9200片内ROMBoot程序已经运营,等待下一步操作。使用XMODEM合同发送loader.bin文献,该文献会初始化SDRAM,接着超级终端下会浮现“XMODEM:DownloadU.BOOT”提示,并继续显示“CCCCCC……”。继续使用XMODEM合同发送uboot.bin文献,此时uboot.bin被发送到系统SDRAM中,发送完毕后,PC跳到SDRAMuboot位置处执行uboot,并在超级终端下显示“Uboot>”提示,此时,U-boot已经开始运营了。接着使用U-boot烧写命令将boot.bin烧写到Flash中,后来就可以在片外Flash启动了。2.定制loader.bin和boot.bin (1)修改include/main.h。#defineAT91C_UBOOT_BASE_ADDRESS0x21f00000由于硬件设计中SDRAM为32M,地址空间映射为0x000x2000,uboot被解压缩后要拷贝到RAM高品位地址,以防与其她地址冲突。修改inin.c中对SDRAM初始化某些中AT91C_BASE_SDRC->SDRC_MR=0x02;MR[4]=I表达16位,MR[4]=0表达32位。(3)定制boot.bin在main.c中添加两个外部函数定义。Extemintdeampress_image(void+$rC,void‘dst,unsignedimlen):和ExtemvoidJump0。修改宏定义#defineSRC0x10010000(uboot在Flash中基地址),#defineDST0x21f00000(解压缩uboot后载入到SDRAM中地址)和#defineLEN0x0(uboot大小)。3.移植uboot(1)从httlj://sourceforge.Net/projects/uboot/@下载官方uboot.1.1.1。(2)在/board下建立myboard文献夹,复制at91rm9200dk目录下at91rm9200dk.c、flash.C、eonflg.mk、makefile和u-boot.1ds到该目录下。(3)将at91rm9200dk.c改为myboard.c,修改hand_init()部。*AT91C_PIOC_ASR=*AT91C_PCI_BFRDY_sMOEIAT91CPC3_BFBAA_SMWE;和*AT91C_PIOC_PDR=AT91C_PCI_BFRDY_SMOEIAT91C_PC3_BFBAA_SMWE;增长*AT91CPIOC|=_PERI=AT91C_PC0_BFCK;*AT91C_PIOC_OER=AT91C_PC0_BFCK:在/*ConfigurePC2input(si倒amREADYoftheSmart.Media)*/后增长*AT91CPMC_PCERl=(unsignedint)(1<<4);以启动外设时钟。(4)修改flash.co依照不同FlaSh芯片采用不同FlaSh接口,本设计选用是AT48BV322A,依照芯片datasheet修改flash.C。(5)修改eonfig.mk.修改TEXTBASE=0x21f00000;这个地址要跟一级BootLoader中定义一致(Bootmain.c中#defineDST0x21f00000)。(6)修改makefile修改OBJS:=myboard.oflash.o。 (7)修改include下头文献在/include/configs下复制at91rm9200dk.h并改成myboard.h。修改(8)修改根目录下Makeall和Makefile在Makeall中LIST_ARM9添加myboard,增长对目的板支持:在Makefile下修改myboard_config:unconfig@./mkeonfig$(@:-config=)alTllat91rm9200myboard。(9)编译和调试。在linux交叉编译环境下编译uboot,生成ubootbin文献,压缩成gz格式后,移植uboot所需文献已经所有编译完毕。烧写这两个文献到Flash中,复位系统后,串口调试信息中会浮现如图4.2所示信息,至此uboot已经移植成功。U-Bootcode:21F00000->21F1A978BSS:->21F263A0DRAMConfiguration:Bank#0:000032MBFujitsu:29LV320BE(32Mbit)F1ash:4MBNAND:FlashchZpFound:ManuFacturerID:OxEC,ChipID:0x76<(SamungK9F1208UOA)1FlashchipsFound.Totalhand-chipsize:64MB64MBIn:serialOut:serialErr:serialHitan.qkewtostopautoboot:0Ubooot>4.3MLinux移植Linux内核是Linux系统中最核心某些,针对各种不同ARMCPU体系构造,Linux在源代码上都针对其体系构造做了底层某些实现。当前发布原则Linux内核相对于资源受限嵌入式系统来说过于庞大,因而要将其移植到嵌入式系统上,就需要将Linux内核依照目的平台功能定义进行裁剪、配备,留下必要选项和模块,舍弃不必要某些,以节约空间。裁剪配备完毕后,对内核重新编译,生成内核映像文献。一方面需要得到一种内核源码,可以从.org上下载。#mkdir/arm/src/kemel#cd/arm/src/kemel#wgethttp://.org/pub/linux/kemel/v2.4/linux·2.4.27.tar.bz2#tarjxvflinux-2.4.27.tar.bz2这样就得到了一种可以使用Linux内核,这个内核在基于x86体系构造机器上不需要做修改,直接运营makemenueontig进行配备后编译安装就可以在PC上运营了。但是对于ARM体系构造,这个内核源码需要打补丁才干对的运营。这个补丁可以到.1.uk站点下载。此时就可以运用patch命令对Linux源码打上基于ARM体系构造补丁:#zcat/arm/src/kemel/patch-2.4.27-vrsl.gzlpatch-p0至此,一种可以运营在ARM体系构造上Linux源码包已经准备好了。进入内核所在途径,修改根目录下Makefile文献,修改ARCH:=arm和CROSSCOMPILE=arm-linux.,以指定当前所编译目的解决器以及编译器。通过makeat91rm9200dk命令把根目录下面.重命名.eonfigconfig为.eonfig.old,然后把arch/arm/defconfi里at\91rm9200dk开发板默认配备文献复制到根目录下,使用默认配备文献对内核进行修改。然后执行makemenuconfig命令进入内核配备界面,在这里可以依照实际需要对内核裁剪在配备工作完毕后,就可以进行内核编译了。可以把内核编译成两种内核方式:一种是压缩方式,另一种是非压缩方式。为了适应嵌入式需要,采用压缩方式编译。在这种方式下,编译好内核映像文献一方面被烧写到Flash内,动时由引导程序将内核从Flash里加载到系统RAM里解压,然后运营。这种压缩方式编译出来内核映像文献小,非常适合嵌入式系统使用。一方面makecleandep建立依赖关系,然后makeImage,生成vmlinux文献。需要对arm-linux-objcopy进行解决,生成ulmage映像文献。 /usr/Iocal/arm/2.95.3/bin/arm-linux-objcopy-Obinary-Svmlinuxlinux.bin#gziplinux.bin在u-boot-1.1.1tools目录下,提供了生成ulmage工具mkimage命令。在生成uboot二进制文献同步,rnkimage命令会同步编译生成,无需此外编译。#./mkimage-Aarm-Olinux-Cgzip-a0x8000-e0x8000-dlinux.bin.gzulmage通过mkimage命令,生成ulmage镜像文献,该文献就是执行bootm所需内核镜像文献[17]。4.4基于NandFlash文献系统设计RootFilesystem(根文献系统)是ARMLinux运营起来必要构成某些。由于最后要将根文献系统放在目的板NorFlash上,因此需要在NorFlash上创立一种文献系统。当前Linux支持各种文献系统,重要涉及Romfs(只读文献系统)、Cramfs、JFFS和JFFS2等。与其她文献系统相比,JFFS2解决擦除和读写操作效率更高,并且具备完善掉电保护功能,使存储数据更加安全,因而本设计采用嵌入式系统广泛使用JFFS2作为Flash文献系统类型。根文献系统是Linux系统主线所在,启动时必要加载进来以支持系统运营,Linux内核启动到最后某些需要一种根文献系统.内核也许由于找不到rootfs而停在那里,可以创立一种基于内存根文献系统(ra_mdisk),或者在Flash上创立一种文献系统(采用JFFS2),然后通过传递内核启动参数办法指定给内核。根文献要涉及下列文献夹:/bin、/etc、/proc、/rnp、/var、/dev、/mnt。要涉及下列基本设备文献:/dev/eonsole、/dev/null、/dev/ram0、/dev/rty、/dev/tty0。 要涉及下列配备文献:/etc/rc.d/inittab、/ete/rc.d/re.sysinit、/etc/fstab。要实现基本功能,还要涉及某些惯用工具,如:sit、Is、cd、cat等。制作流程如下:(1)创立空ramdisk#ddif=/dev/zeroof=mmdiskbs=lkcount=-8192/*个大小为8MB块,读写块大小为1KB,输入文献/dev/zero,输出文献ramdisk*/#10setup/dev/loop2ramdisk/*设立循环设备,把文献虚拟成块设备,藉以模仿整个文献系统·*/#mkfs.ext2/dev/loop2/*将ramdisk转换为ext2格式文献系统*/#mount-text2/dev/loop2/mnt/*用mount命令将ramdisk挂载至lJ/nmt目录下。*/(2)准备库文献,把库文献拷贝到ramdisk中#cd/mnt#mkdirlib#tusrllocal/ama/2.95.3/arm-linux/lib#forfileinlibclibcryptlibdllibmlibpthreadlibresolvlibutil>do>cpStile-*.SO/rant/lib >cp-dStile.SO.[*0-9]/mnt/lib>done#cp-dld*.SO*/mnt/lib(3)制作Busybox对于系统程序和基本应用程序,有两种方案去获得,一种是交叉编译所有需要命令源代码,可以借助Busybox工具来完毕j另一种是将既有ARM专用ramdisk内文献拷贝到自己mmdisk里。对于嵌入式系统解决方案普通是使用Busybox工具。Busybox是一种工具集,它涉及诸多惯用工具软件,这些软件所有都编译成一种可执行文献,通过链接方式创立各个工具名称。这样不但占用空间小,并且可以以便地定制所需要命令。Busybox源文献可以从http://busybox.Net/downloads/下载。文献解压完毕后,进入busybox-1.0.0目录,并执行makeclean和makmenuconfig进入配备主菜单。依照自己定制系统需要修改Busybox配备文献。(4)制作映像文献拷贝完毕后,使用系统提供映像文献制作工具mlffs.jffs2,生成jffs2映像文献:#/mkfs.jffs2-d./mnt-ojffs2.img然后执行如下命令,卸载并压缩ramdisk。#umount/dev/loop2#10setupd/dev/loop2#gzipramdisk这样,需要烧写进Flash所需要映像文献就制作完毕了[16]。4.5AT91RM9200系统内核烧写NorFlash中重要是存储启动系统并初始化BootLoadel",系统映像文献ulmage,以及根文献系统映像jffs2disk。因此需要将4MBNorFlash提成3个分区,并把分区挂载到不同目录上,分区信息如表4.2所示。表4.2NorFlash分区信息分区号名称大小/dev/mid/1BootLoader0x0 /dev/mid/2ulmage0xe0000/dev/mid/3Jffs2disk0x100000分区号挂载点大小/dev/mid/4/mnt/Nand116M/dev/mid/5/mnt/Nand216M/dev/mid/6/mnt/Nand332M本设计也将片外64MBNandFlash提成3个分区,并通过yaffs系统将3个mtd分区挂载到不同目录上,分区信息如表4.3所示。表4.3NandFlash分区信息将开发板DEBUGUART与PC工作站串口连接,然后启动PC工作站上超级终端,给开发板上电,运营Uboot,设立Uboot启动参数。拷贝完毕后,复位系统,就可以看到以jffs2文献系统作为根文献系统Linux开始运营了,这样根文献系统中各种配备文献就可以断电保存了。4.6嵌入式Linux设备驱动程序系统调用是操作系统内核和应用程序之间接口,设备驱动程序是操作系统内核和机器硬件之间接口。设备驱动程序是内核一某些,它具备如下功能。(1)对设备初始化和释放(2)把数据从内核传送到硬件和从硬件读取数据(3)读取应用程序传送给设备文献数据和回送应用程序祈求数据(4)检测和解决设备浮现错误普通Linux设备驱动程序可以分为3个重要某些构成。自动配备和初始化子程序服务于I/O祈求子程序中断服务程序4.6.1设备驱动程序开发过程解决器与外设之间传播数据控制方式普通有3种:查询方式、中断方式和直接内存存取(DMA)方式。(1)查询方式(2)中断方式(3)直接访问内存(DMA)方式由于嵌入式设备硬件种类非常丰富,在默认内核发布版中不一定涉及所有驱动程序。因此进行嵌入式Linux系统开发,很大工作量是为各种设备编写驱动程序。普通嵌入式Linux设备驱动大体流程如下。(1)查看原理图,理解设备工作原理。普通嵌入式解决器生产商提供参照电路,也可以依照需要自行设计。(2)定义设备号。设备由一种主设备号和一种次设备号来标记。主设备号唯一标记了设备类型,即设备驱动程序类型,它是块设备表或字符设备表中设备表项索引。次设备号仅由设备驱动程序解释,区别被一种设备驱动控制下某个独立设备。(3)实现初始化函数。在驱动程序中实现驱动注册和卸载。 (4)设计所要实现文献操作。定义file_operations构造。 (5)实现所需文献操作调用。如read、write等。(6)实现中断服务,并用request_irq向内核注册,中断并不是每个设备驱动所必须。(7)编译该驱动程序到内核中,或者用immod命令加载模块。(8)测试该设备,编写应用程序,对驱动程序进行测试[17]。4.6.2加载和卸载驱动程序在编写模块程序时,必要提供两个函数,一种是initmodule(),在加载此模块时候自动调用,负责进行设备驱动程序初始化工作。initmodule()返回0,表达初始化成功,返回负数表达失败,它在内核中注册一定功能函数。在注册后,如果有程序访问内核模块某功能,内核将查表获得该功能位置,然后调用功能函数。initmodule()任务就是为后来调用模块函数做准备。另一种函数是cleanup,该函数在模块被卸载时调用负责进行设.module()备驱动程序清除工作。这个函数功能是取消initmodule()所做事情,把initmodule()函数在内核中注册功能函数完全卸载,如果没有完全卸载,在此模块下次调用时,将会由于有重名函数而导致调入失败[15]。4.6.3模数转换电路驱动程序设计1.静态存储控制器配备静态存储控制器(SMC)产生信号来控制外部静态存储器或外设访问。SMC可编程地址可达512M字节。它有8个片选及一种26位地址总线。16位数据总线配备与8位或16位外部器件连接。独立读写控制信号容许存储器与外设直接连接。SMC支持不同容许单时钟周期存储器访问访问合同,同步也提供了外部等待祈求能力。 静态存储器控制器提供8个片选线:NCS0~NCS7,本设计使用NCS6片选ADS7842,地址空间是0x70000000~0x7FFFFFFF,基地址为0x70000000,16路模仿通道分派地址空间是0x70000040~0x7000005E。 静态存储控制器使用8个片选寄存器(SMCCSR0~SMCCSR7)对独立外部存储器参数进行编程。通过对片选寄存器设定,完毕对外设读写以及控制参数设立。ADS7842驱动程序编写。程序见附录。3.加载驱动和编译。一方面编写Makefile文献,如下所示:CC=/asr/local/arm/2.95.3/bin/arm·linux-gccKERNELDIR=/home/embedded-systerrdlinux-2.4.27CFLAGS=-D_KERNEL_-DMODULE-I$(KERNELDIR)/include-O-Wall-march=armv4-mtune=arm9tdmiADS7842.O:ADS7842.C$(CC)$(CFLAGSl-c$<clean:Rm-rf*.o对Makefile文献执行make命令后,可以生成驱动模块ADS7842.o。将驱动程序ADS7842.o拷贝到系统目录/lib/modules下,执行如下命令加载模块:Insmod/lib/modules/AD$7842.o使用lsmod命令查看己加载驱动,可以看到ADS7842.o已经在驱动列表中。至此,ADS7842驱动程序编写已经完毕了。类似地,DAC模块也采用相似环节编写。将编译好ADS7842.o和DAC712.o文献添加进自启动文献rc.local中以便下次系统启动自动加载两个模块[14]。5温度控制系统应用程序设计当完毕了Linux系统移植以及必要硬件驱动加载后,一种嵌入式平台就搭建成功了。接下来工作就是针对详细设计方案编写相应应用程序,之后就可以把编译好应用程序运营于该平台上了。本章详细简介温度控制系统各个应用程序详细设计,一方面简介应用程序编写过程中需要用到某些概念和有关函数。5.1有关概念5.1.1进程进程是一种具备独立功能程序关于某个数据集合一次可以并发执行程序活动,是处在活动状态计算机程序,进程作为构成系统基本细胞和分派资源最小单位,不但是系统内部独立运营实体,也是独立竞争资源基本实体。Linux是一种多顾客多任务操作系统,它一种重要特点就是可以同步启动各种进程。进程是一种程序一次执行过程,它是系统基本调度单位。一种进程由以下元素构成。(1)进程上下文,它表达进程执行状态;(2)程序当前执行目录;(3)程序服务文献和目录;(4)程序访问权限;(5)内存和其她分派给进程系统资源。从生存周期来说,进程重要有如下这些状态:(1)顾客状态:(2)内核状态:(3)内存中就绪:(4)内存中睡
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商业计划书中的内部培训与员工发展计划考核试卷
- 林业与农村物联网建设考核试卷
- 炼铁过程中的环境保护措施考核试卷
- 城市轨道交通与生态环境考核试卷
- 2017-2022年中国会展行业运营格局现状及十三五投资战略分析报告(目录)
- 2024-2025学年江西省南丰县某中学高三(上)一轮复习联考物理试卷(一)(含答案)
- DB11∕T 1772-2020 地源热泵系统评价技术规范
- 语文研讨课件教学课件
- 新员工入行培训方案
- 区分左右课件教学课件
- 《会计平衡公式》教案
- 除尘器安装专业监理实施细则
- 八年级黄金矩形(数学活动)ppt课件
- 销售技巧个顶尖电梯销售技巧
- 《幼儿园卫生保健后勤材料资料》幼儿园保健医生每日检查工作记录表
- 葡萄糖生产教程
- 需求价格弹性案例分析
- 企业内部通信系统的设计与实现 计算机论文
- 重大决策合法性审查表.doc
- 信号集中监测系统(完整版)
- 复古风同学聚会邀请函.doc
评论
0/150
提交评论