网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > 课程设计 > 正文

以太网LED图文显示系统的设计

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务
以太网LED图文显示系统的设计论文致谢首先要感谢我的导师,蒋XX老师。蒋老师在学业上始终给于我无私的帮助和耐心的指导,不断指点我学习上和生活中的不足之处,老师严谨的治学态度深深地感染着我。不仅如此,蒋老师还经常对我解决问题的方法提出诚恳的建议,老师给我的关心和鼓励令我终身难忘。蒋老师为人直爽的性格和孜孜不倦的敬业精神,他严于律己宽以待人、淡泊名利和乐于助人的优秀品德,我耳濡目染受益良深。非常感谢马灵芝老师和王德君老师对我论文仔细的审阅,并提出了许多宝贵的修改意见。同时感谢所有给予我帮助和教诲的老师。感谢教研室的所有同学,正是大家在教研室中造出的和谐气氛令我每天都有愉悦的心情从事学习工作。在这个大家庭中,我们互帮互助、共同进步,这份情意将是我人生的一大财富,我会永远铭记住他们。谁言寸草心,报得三春晖。最后,我要感谢我的亲人和朋友对我完成学业的支持和关心,是他们的挚爱和鼓励给予了我勤奋进取的力量。论文摘要随着互联网和通讯技术的飞速发展,嵌入式系统在经历了近20年的发展历程后,进入了一个新的历史发展阶段。人们对于嵌入式设备接入网络的需求越来越强烈,各智能家电、工业控制、智能仪器仪表、数据采集都在向网络化的方向迈进。目前,互网中使用的基本通讯协议是TCP/正协议族,可运行于不同的网络上。本文研究的是实一种可以通过以太网进行实时控制的LED屏幕显示系统。为了更好的管理系统的硬件资源,给用户提供良好的工作环境,嵌入式系统一般会引入嵌入式操作系统。本文选择了拜C/OS一11嵌入式操作系统,它具有源代码公开、核简单高效、实时性好等优点,本文阐述了将其移植到了PH几IPS系列的ARM处理LPC2210上的方法,对移植所需要的文件进行了详细的介绍。wL护A(LighwteihgtTCP胆Porotoc)l是一个比较完备的嵌入式TCP仰协议栈,具开源,易于移植的优点。选择Lw正,是因为它的源代码是公开的而且可以免费使用,且生成的目标代码非常小,这对于资源相对有限的嵌入式系统来说是非常重要的。本以周立功公司的AESYARM2200开发套件为基础,将wL正移植到拼C/OS一11的ARM处器LPC2210上,实现了基本的与以太网通讯的功能。本文实现的这种基于以太网的LED图文显示系统的硬件由控制器和显示屏组成,四章对这两部分的硬件设计进行了详细的介绍,第五章介绍了这两部分的软件设计。了验证系统设计的正确性,硬件方面做了一个能显示4个汉字的点阵显示屏体;软件面,编写了控制器的程序和上位机程序。制器上运行以太网协议并控制显示屏内容显示,上位机上利用VC6.O编写了一个控制显示屏的图形界面软件,将显示屏控制器上位机同时接入以太网,就可以实现对显示屏系统的实时控制,本设计中的显示屏可显示汉字、Ascn码字符和单色图像,经过验证,本论文对于拜C/OS一11和wL正的移植确,显示屏系统的硬件运行稳定、可靠,基本达到了应用要求。关键字:嵌入式系统;pC/S0一n:wLlp;以太网;L印图文显示屏基于以太网的ELD图文显示系统的设计TheDesignofLEDGrPah一textDisPlyaingSystemBasedonEhtenretAbstraetWithhtedeveloPmnetofintmeetnadconununicationteehnology,mbededsysteomesintoanewhistoriealdevelPomnetsteatfernearly20year,5develpomnet.demnadconnectedhteembededequiPmenitonewtokrbeeomesmorenadmoeriniensivehteintellignetelecrtiealPaPlinaees,hteinudsyrteonortl,htenitellignetnistnnetnadhtedaequisitionaremkainggreatstPestowardshtenewtokr.AiPresnet,tebasiecolllnlunieatPortoeolusniginintemet15TCP/PI,itenaunrindiflrentneokr.T5PpaererseacrheshotoimPlementnadeoniorlakindofLEDsereensystembasedonhetemetteehnology.玩odrertomnaagehtehardwaerresouxcesofthesystmebetternadProvideagoWokringnveironnlnettohetuser,mbededoPeratingsystmeusuallyenabeimPlnatedintoembededSystme·nImyersearch1hcoosehteembededReal一TimeOPeratnigSystuC/05一11.It,5eode15rfee,simPlenadbeingwihtnfieReal一time,ThisPPaergrateuC/05一11oPeratingsystmeonhteARMProeessorLPC2210nadiniordueehtefisPuPortinghteimPlnatationdetailedly.LW正(ALighwteihgtTCP/Portoeol)15aembeddedTCP/正stackwihthteadvnataofufllufnetionalit,yerfeeodenadenabeimPlnatedeasily.ThereasonswhyweehooseLwareits50rceeode15oPennadcnabeusedrfeelynaditsobjeefeodesareveyrsmall,htisveyrimPortnattomebededsystmehvaing11tedersoucres.BasednoEASYARM22PlatofmrofZhouLiGongComPnay,5PPaermigrateLWintouC/05一HPoeratingsysthvanigbeenimPlnatedontheAR1Poreessor,eralisehtebasie几mctionofeollllllunicatinwithhteetheet.Thisknidofserene15mdaePuofeonrtollernaddiPsIngboard,theehPaterofinortudceshtehardwareeomPositionnadhteehPaterfiveineludeshtesotfwarerealization.TeheckPuhteeorreeutessofthesystemdesing,1eomPleteaLEDsereneenadiPSlyaseharaetersnadProganllnhtecodesinhteeontorllernadthePC.TheeoniorllerconiainstEhtmeetPortoeolnadeontrolsthediPsIngeonientoftheLEDsereen.ConneetedhteonrtollernadPCtohteiniemetsimultnaeously,eenaeonortlhtesereeneasily.TheLEsereeninmydesingenadisPIehineseeharaetors,ASCllnadblaeknadwhitePieurtes.Atfhteeonfimratino,hteimPlnatationof,C/05一11andLw正aereorreet,htedesingofhteWhosystmecnaunrstbalynadrelibaly.KeyWords:Embededsystem;C/05一11:LwIP;Ethernet;LEDgraPh一textsereen441
 
以太网LED图文显示系统的设计1.1嵌入式系统的简介嵌入式系统从20世纪70年代开始发展到现在,数量上己经远远超过了通用计算机,在制造工业、过程控制、仪表、汽车、船舶、航空、航天、军事装备、消费类电子产品等领域的应用都非常广泛。嵌入式系统具有无数的种类,每类都具有独特的个性。尽管嵌入式系统己经得到广泛的应用,但要精确定义嵌入式系统的概念却不容易,以下首先介绍嵌入式系统的概念。目前,对嵌入式系统的定义多种多样,但没有一种定义是全面的。下面给出两种比较合理的定义:(1)嵌入式系统:以应用为中心,以计算机技术为基础,软件硬件可裁剪,适合应用系统对功能、可靠性、成本、体积及功耗有严格要求的专用计算机系统。(2)嵌入式系统:嵌入式系统是设计完成复杂功能的硬件和软件,并使其紧密藕合在一起的计算机系统。嵌入式反映了这些系统通常是更大系统中的一个完整的部分,称为嵌入式系统。嵌入的系统中可以共存多个嵌入式系统[]l。两种定义的出发角度不同,一个是从技术的角度来定义的,另一个是从系统的角度来定义的。事实上,在大多数情况下,嵌入式系统被真正的嵌入,即它们是“系统中的系统”,一般上都有自身的功能。例如,数字机顶盒DST中的数字音频/视频解码系统是DST的一个完整部分,它又是一个嵌入式系统。某些情况下,嵌入式系统在功能上是独立的系统。例如网络路由器是独立的嵌入式系统。它由特殊的通信处理器、内存、许多网络端口以及实现包的路由算法的特殊软件组成。普通个人计算机中的处理器是通用目的的处理器。早期,嵌入式系统通常采用通用处理器构造。这些处理器能源消耗大,产生的热量高,尺寸也大。这也就意味着这些处理器的制造成本昂贵。近些年来,随着大量先进的微处理器制造技术的发展,越来越多的嵌入式系统用嵌入式处理器,而不是用通用处理器。这些嵌入式处理器是为完成特殊的应用而设计的特殊目的处理器。这些嵌入式处理器大致可以分为四大类:嵌入式微处理器(EmbededMicnororeessorUnit,EMp切、嵌入式微控制器M(ieoreonrtollerUnit,C功、嵌入式DsP(Digital51,alporeesso)r处理器、嵌入式片上系统(SystemonChip)。ARM是AdvnaecdRSICMachines的缩写,是微处理器行业的一家知名企业,该企业设计了大量高性能、廉价、低功耗的犯SC处理器、相关技术和软件。ARM公司的处理器具有性能高、成本低和能耗低的特点,适用于多种领域,比如嵌入式控制、消费/教育类多媒体、DSP和移动式应用等。ARM将其技术授权给世界上许多半导体、软件和OEM基于以太网的LED图文显示系统的设计厂商,每个厂商得到的都是一套独一无二的ARM相关技术及服务,利用这种合伙关系,ARM很快成为许多全球性班SC标准的缔造者。ARM的设计实现了非常小但高性能的构。ARM是精简指令集计算机,因为它集成了非常典型的RJSC结构特性:一个大的、统一的寄存器文件;装载/保存结构,数据处理的操作只针对寄存器的内容,而不直接存储器进行操作;简单的寻址模式,所有装载/保存的地址都只由寄存器的内容和指令决定;统一和固定长度的指令域,简化了指令的译码。此外,ARM体系结构还提供:每一条数据处理指令都对算术逻辑单元(ALU)和移位器进行控制,以实现对ALU和移位器的最大利用;地址自动增加和自动减少的寻址模实现了程序循环的优化;多寄存器加载和存储指令实现了最大数据吞吐量;所有指令条件执行实现了最快速的代码执行。这些在基本RISC结构上增强的特性使ARM处理器在高性能、低代码规模、低功耗和小的硅片尺寸方面取得了良好的平衡。ARM公司开发了很多系列的ARM处理器,目前最新的系列是ARMll了,然而应用较多的是ARM7系列、ARMg系列、ARMgE系列和ARM10系列以及SecurCoer系列和hti的sortngA又M,xseale系列。(功ARM7系列ARM7系列包括ARM7TDMI、ARM7TDMI一S、带有高速缓存处理器宏单元的ARM7即T和扩充了Jazelle的ARM7EJ一os该系列处理器提供Th切mb16位压缩指令集和EmbeddedICEJTAG软件调试方式,适合应用于更大规模的SoC设计中。其中ARM720高速缓存处理宏单元还提供了SKB缓存、读缓存和具有内存管理功能的高性能处理器,支持Linux,S卿bina05和WindowsCE等操作系统。ARM7系列广泛应用于多媒体和嵌入式设备,包括加emet设备、网络和调制解调器设备,以及移动电话、PDA等无线设备。(2)ARMg系列ARMg系列有A丑MgTDMI、ARM920T和带有高速缓存处理器宏单元的ARM940T。所有的ARMg系列处理器都具有Thumb压缩指令集和基于EmbdeddeICEJTAG的软件调试方式。AR五19系列兼容A只317系列,而且能够比ARM7系列进行更加灵活的设计。ARMg系列主要应用于引擎管理、仪器仪表、安全系统、机顶盒、高端打印机、PDA、网络电脑以及带有MP3音频和MPEG4视频多媒体格式的智能电话中。(3)ARMEg系列ARMEg系列为综合处理器。该系列强化了数字信号处理D(SP)功能,可应用于需要DSP与微控制器结合使用的情况。大连理工大学硕士学位论文(4)A卫五110系列ARM10系列其核心在于使用向量浮点(VFP)单元VFP10提供高性能的浮点解决方案,从而极大提高了处理器的整型和浮点运算性能,为用户界面的ZD和3D图形引擎应用打下了基础,如视频游戏机和高性能打印机等。(5)SeeurCore系列该系列处理器主要针对新兴的安全市场,以一种全新的安全处理器设计为智能卡和其他安全CI开发提供独特的咒位系统设计,并具有特定的反伪造方法,从而有助于防止对硬件和软件的盗版。(6)SortngARM和Xseal系列SortngARM处理器将htiel处理器技术和ARM体系结构融为一体,致力于为手提式通信和电子类设备提供理想的解决方案。Xscale微处理器结构则提供全性能、高性价比、低功耗的解决方案。1.2嵌入式实时操作系统在70年代,嵌入式软件还是执行一些单线程的程序,80年代早期开始,嵌入式系统的程序员开始用商业级的操作系统编写嵌入式应用软件,这使得开发人员进一步缩短了开发周期,降低了开发成本并提高了开发效率。1981年,RaedySystme公司开发出了世界上第一个商业嵌入式实时内核VTRX犯。此后一些公司纷纷推出了自己的嵌入式操作系统,这使得应用开发人员从小范围的开发中解放出来,同时也使嵌入式系统有了更广阔的应用空间闭。90年代以后,随着对实时性要求的提高,实时内核发展为实时多任务操作系统(RToS),并作为一种软件平台逐渐成为目前国际上嵌入式系统的主流]sl。经过多年的发展,目前世界上已经有一大批十分成熟的实时嵌入式操作系统。一般来说使用嵌入式操作系统主要由于以下几个原因:(1)需要操作系统的支持。当应用软件过于复杂,开发难度大,安全性和可靠性都难于保证,就需要操作系统的支持。(2)在多任务嵌入式系统中,合理的任务调度必不可少。单纯通过提高处理器的速度无法达到这样的目的,这就要求嵌入式系统的软件必须具有多任务的调度能力。(3)嵌入式实时操作系统提高了系统的可靠性。在控制系统中,出于安全方面的考虑,要求系统不能崩溃,而且还要有自愈能力。这不仅要求在硬件设计方面提高系统的可靠性和抗干扰性,而且也要求在软件设计方面提高系统的抗干扰性,尽可能地减少安全漏洞和不可靠隐患。实时操作系统的引入大大减少了干扰,使得干扰只能引起若干个进程中的一个被破坏,并可通过系统监控进程对其进行修复。
 
以太网LED图文显示系统的设计(4)强大的联网功能。大部分传统的嵌入式操作系统是孤立的,但在网络日益重的今天,嵌入式系统与hietnret的连接势在必行,这使得系统变得复杂,就需要操作系的支持。(5)嵌入式实时操作系统提高了开发效率,缩短了开发周期。在嵌入式实时操作统环境下,开发一个复杂的应用程序,通常可以按照软件工程中的解藕原则将整个程分解成多个任务模块。而且嵌入式实时操作系统充分发挥了32位CPU的多任务潜力。嵌入式操作系统的发展非常迅速,目前在市场上有一些主流的嵌入式操作系统,主要分为两类:商业性的和免费型的。前者属于商业化产品,功能稳定、可靠,有完的技术支持和售后服务,但往往价格昂贵;后者在价格方面具有优势。下面是部分主的嵌入式操作系统的介绍:()lPalm05是著名的网络设备制造商3COM旗下的palincomPutni公司的产品,PDA市场上占有很大的市场份额,它具有开放的操作系统应用程序接口(妙D,开发上以根据需要自行开发所需要的应用程序。(2)wnidowsCE3.0是一种针对小容量、移动式、智能化、犯位的模块化实时嵌入操作系统。它是从整体上为有限资源的平台设计的多线程、完整优先权、多任务的操系统。他的优点是基于Wnidows背景,界面比较漂亮,容易为用户接受。(3)vxwokrs操作系统是美国Wind几ver公司于1983年设计开发的一种商业的实时入式操作系统,具有高性能的系统内核和友好的用户开发环境,美国PJL实验室研制著名“索杰纳,,火星车采用的就是这个操作系统[4]。它是目前使用最广泛、市场占有率高的嵌入式操作系统。它支持多种处理器,如xs6、MC68x、POWERpC等。(’)自由免费软件嵌入式Li~的出现对嵌入式操作系统带来了冲击,因为它有着天独厚的优势。首先,Linux是开放源码的,不存在黑箱技术,遍布全球的众多的爱者又是Li~开发的强大的技术后盾;其次,Li~的内核小、功能强大、运行稳定、统健壮、效率高;第三,价格上极具竞争力;第四,支持数十种CPU芯片;第五,Lni沿用了Unix的发展方式,遵循国际标准,可以方便的获得众多软硬件厂商的支持;最后,Li~内核在网络方面是非常完整的。(5)林C/OS一n是源代码公开的实时嵌入式操作系统。它具有一些很好的特点,例如,公开源代码、可移植性较强、可裁减方便、占先式内核、可确定性、稳定可靠[1s。林/cos一自1992年以来已经有很多成功的商业应用。3课题的研究背景及国内外发展状况大连理工大学硕士学位论文控制LED屏幕显示系统常用的是8位或16位的单片机,它们在运行速度、寻址能和功耗等方面存在问题,己越来越难以满足实际应用的场合,并且常采用RS232、S485的方式与PC机进行近距离的通信。因此本文试图通过采用基于ARM核的处理和基于以太网的远距离通讯方式来解决这些问题。我国LED显示屏的发展可以说基上与世界水平同步,国内的LED显示屏发展经历了三个阶段:(l)1990年以前LED显示屏的成长形成时期一方面,受LED材料器件的限制,LED显示屏的应用领域没有广泛展开;另一方面,示屏控制技术基本上是通信控制方式,客观上影响了显示效果。这一时期的ELD显示在国外应用较广,国内没有广泛使用。(2)1990一1995年,LED显示屏迅速发展的时期进入90年代后,国民经济高速增长,对公众场合发布信息的需求日益强烈,LED显屏的出现正好适应了这一市场形势,因而在LED显示屏的设计制造技术与应用水平上得到了迅速的提高。LED显示屏经历了从单色、双色图文显示屏,到图像显示屏,一到全彩色视频显示屏的发展过程。无论在器件的性能(超高亮度及蓝色发光灯等)和系的组成(计算机化的全动态显示系统)等方面都取得了长足的进步。(3)1995年以来,LED显示屏应用领域更为广阔近年在全彩色LED显示屏、256级灰度视频控制技术、多级群控技米等方面均有国先进、达到国际水平的技术和产品出现。我国LED显示屏的发展可以说基本上与世界平同步,至今己形成了一个具有相当发展潜力的产业。其中南京洛普股份有限公司是业从事大型公众信息显示屏的企业,产品已批量出口在本行业中获有较高的知名度[0l。目前LED电子显示屏的显示向更高亮度、更高耐气候性、更高的发光均匀比、更高可靠性、全色化、多媒体方向发展,系统的运行,操作与维护也向集成化、网络化、能化方向发展。二十一世纪的显示技术将是平板显示的时代,LED显示屏作为平板显的主导产品之一将有更大的发展。(1)高亮度、全彩化蓝色及绿色超高亮度LED产品出现以来,成本逐年快速降低,使ELD全彩色显示屏品成本下降,推广速度加快。同时,随着控制技术的发展和屏体稳定性的提高,使全色LED显示屏的亮度、色彩、白平衡均达到比较理想的效果,完全可以满足户外全天的环境条件要求。(2)标准化、规范化基于以太网的LED图文显示系统的设计材料、技术的成熟及市场价格基本均衡之后,ELD显示屏的标准化和规范化将成LED显示屏发展的一个趋势。近几年业内的发展中,几番价格回落调整达到基本均衡产品质量、系统的可靠性等将成为主要的竞争因素,这就对LED显示屏的标准化和规化有了较高的要求。行业规范和标准体系的形成,1509000系列标准的应用,使LED示屏行业的发展趋于有序[7]。(3)产品结构多样化随着信息化社会的形成,信息领域愈加广泛,LED显示屏的应用前景更为广阔。计大型或超大型ELD显示屏为主流产品的局面将会发生改变,适合于服务行业特点和业性要求的小型LED显示屏会有较大提高,面向信息服务领域的LED显示屏产品门类品种体系将更加丰富,部分潜在市场需求和应用领域将会有所突破,如公共交通、停场、餐饮、医院等综合服务方面的信息显示屏需求量将有更大的提高,大批量、小型的标准LED显示屏在ELD显示屏市场总量中将会占有多数份额。总之,在LED大屏幕材料研制方面,单色、多色LED点阵模块产品己经很成熟,前的发展方向为全彩色LED显示屏;在产品方面,LED大屏幕朝标准化、大型化和小化的方向发展。1.4本论文的研究目的和目标及主要工作本论文的设计目标是实现一种可以通过以太网进行实时控制的ELD显示屏,从而省传统LED显示屏需要铺设专用线路的成本,并且只要有网络的地方可以对其进行制。主要内容包括:(1)研究了嵌入式实时操作系统内核林C/os一n,在对其原理和设计理解的基础上,将其移植到了基于ARM核的微控制器LPC2210上。(2)对嵌入式TCP/正协议栈wLPI进行了研究,通过编写网卡驱动程序和wL正的操系统模拟层程序,将其移植到了抖C/OS一11中。(3)设计了基于以太网的LED图文显示屏的控制器和显示屏电路,并且作为实验,做了一个能显示4个汉字的32又32像素的显示屏,经调试显示效果良好。(4)利用汇编和C语言结合的方式,编写了LED点阵显示屏控制器程序。(5)上位机使用C++编写了一个远端控制的界面程序,来控制接入以太网的图文的显示内容。大连理工大学硕士学位论文嵌入式操作系统p/cOS一n的移植.1p/cos一日嵌入式操作系统简介嵌入式操作系统是嵌入式系统软硬件资源的控制中心,它以尽量合理的方式组织多用户共享嵌入式系统的各种资源。目前嵌入式应用领域的发展趋势是采用实时多任务作系统RTOS(RealT加eOPeartingSystem)。应用软件(用户代码)拜C/05一11(与处理器类型无关的代码)05COR卫.C05FLAG.C05MBOX.C05MEM.C05MUTEX.COSesQ.C05SEM.C05TASK.C05TIME.C拜C/05一11.C拜C/OS一n配置文件(与应用程序有关)05CFG.HINCLUDES.H移植拼eo/s一11(与处理器类型有关的代码)05CPU.H05CPUA.ASM05CPUC.C软件硬件CPU定时器图2.1pC/05一11的文件结构[8]Fig.2.1FilesUrteutreof拜C/05一11当系统需要实时响应多个外设并且要处理多个并发的任务时,传统的单片机系统就
 
能对资源的分配以及任务调度不当导致系统死锁,从而降低了系统的可靠性,此时就需要引入TRO[s9,‘01。RTOS是嵌入式系统启动后首先执行的背景程序,他作为主控程序管理整个系统的资源,对系统中的各个任务进行调度。用户的应用程序是运行于RTOS上的各个任务,每个任务均有一个优先级,RTOS根据各个任务的优先级和任务所处的状态,动态的在各任务间进行切换[‘Jl。林/cos一11是一个公开源代码的实时操作系统内核,它提供了实时系统所需的基本功能。核心部分代码只有8.3KB,短小精悍。拜C/os一n的特点主要有[81:开源、可裁减和扩展、可占先、可确定性、多任务。拜C/OS一n内核大部分由C语言实现,有很好的移植性,在多种不同的CPU上实现只需做很少的工作。开放性、移植的简化以及内核的可裁减使其在与其它商业化嵌入式软件的竞争中占有了一定的市场。事实表明,该系统能适应通讯类产品的实时应用。图2.1表示的是拼C/os一n的文件结构以及与硬件的关系。2.22.2.1pC/05一11的分析临界段管理代码的临界段指的是不可分割的代码。一旦这部分代码开始执行,则不允许任何中断打入。为确保临界段代码的执行,在进入临界段之前要关中断,而临界段代码执行完以后要立即开中断。微处理器一般都有关中断/开中断指令,用户使用的C语言编译器必须有某种机制能够在C中直接实现关中断/开中断的操作。拜CO/S一11定义两个宏m(~)s来关中断和开中断,以便避开不同C编译器厂商选择不同的方法来处理关中断和开中断。拜Co/S一11中的这两个宏调用分别是:05--ENTE--RCRITICALO和05_EXI几C班TICALO。因为这两个宏的定义取决于所用的微处理器,故在文件05夕P.uH中可以找到相应宏定义。每种微处理器都有自己的05CP.UH文件。2.2.2任务管理拜C/OS一n可以管理多达64个任务,但目前版本的拜C/OS一n有两个任务己经被系统占用了。保留了优先级为0、1、2、3、05LOW王STP班O一3、05LOWESTPRIO一2、05一OWEST一PRIO一1以及05少OWESTP一RIO这8个任务优先级以被将来使用。05LOWESTPRIO是作为定义的常数在05CF.GH文件中用定义常数语句#defineocnstnat定义的。因此用户可以有多达56个应用任务。必须给每个任务赋以不同的优先级,优先级可以从。到05工oWEST--PRIO一2。优先级号越低,任务的优先级越高。拜/cos一11总是运行进入就绪态的优先级最高的任务。任务状态如图2.2所示[sJ。大连理工大学硕士学位论文一般情况下,每个任务都是一个无限的循环。每个任务都处在图2.2所示的5种状态,这5种状态是休眠态,就绪态、运行态、挂起态(等待某一事件发生)和被中断态。态相当于该任务驻留在内存中,但并不被多任务内核所调度。就绪意味着该任务己图2.2pC/05一H任务的状态Fig.2.2Satteof环CO/S一11,taks备好,可以运行了,但由于该任务的优先级比正在运行的任务的优先级低,还暂时运行。运行态的任务是指该任务掌握了CPU的控制权,正在运行中。挂起状态也以叫做等待事件态WATI创G,指该任务在等待,等待某一事件的发生。.最后,发生时,CPU提供相应的中断服务,原来正在运行的任务暂不能运行,就进入了被中断。图2.3中的函数使任务从一种状态变到另一种状态。2.3时间管理拜C/OS一H(其它内核也一样)要求用户提供定时中断来实现延时与超时控制等功能。定时中断叫做时钟节拍,它应该每秒发生10至100次。时钟节拍的实际频率是由用的应用程序决定的。时钟节拍的频率越高,系统的负荷就越重。拜C/OS一n提供了这样一个系统服务:申请该服务的任务可以延时一段时间,这段时的长短是用时钟节拍的数目来确定的。实现这个系统服务的函数叫做OSTimeD1y()。该函数会使井C/OS肛进行一次任务调度,并且执行下一个优先级最高的就绪态任务。时钟节拍何时发生,拜C/OS一n都会将一个32位的计数器加1。这个计数器在用户调用St斌0初始化多任务和,4294,967,295个节拍执行完一遍的时候从o开始计数。2.4任务之间的通信与同步基于以太网的ELD图文显示系统的设计在林C/Os一11中,有多种方法可以保护任务之间的共享数据和提供任务之间的通讯。除了共享数据以外还可以有信号量、邮箱和消息队列。一个任务或者中断服务子程序可以通过事件控制块ECB但vnetCnoortlBlokc)s来向另外的任务发信号。这里,所有的信号都被看成是事件E(veni)。一个任务还可以等待另一个任务或中断服务子程序给它发送信号。只有任务可以等待事件发生,中断服务子程序是不能这样做的。对于处于等待状态的任务,还可以给它指定一个最长等待时间,以此来防止因为等待的事件没有发生而无限期地等下去。多个任务可以同时等待同一个事件的发生。在这种情况下,当该事件发生后,所有等待该事件的任务中,优先级最高的任务得到了该事件并进入就绪状态,准备执行。上面讲到的事件,可以是信号量、邮箱或者消息队列等。当事件控制块是一个信号量时,任务可以等待它,也可以给它发送消息。2.2.5内存管理在ANslc中可以用malloc()和erfeo两个函数动态地分配内存和释放内存。但是,在嵌入式实时操作系统中,多次这样做会把原来很大的一块连续内存区域,逐渐地分割成许多非常小而且彼此又不相邻的内存区域,也就是内存碎片。由于这些碎片的大量存在,使得程序到后来连非常小的内存也分配不到。︸曰︸日曰日曰︸门目目目目Pa币tion浮1Parttiion浮2lll一}}}lll111}}}}}}}}}}}}}}}lll}}}!!!!!!」」llllllllllll}}}lll图2.3多个内存分区Fig.2·3MultiPlememoyrPartition在井/cos一n中,操作系统把连续的大块内存按分区来管理。每个分区中包含有整数个大小相同的内存块。利用这种机制,拜C/oS一n对malloc()和rfeeo函数进行了改进,使得它们可以分配和释放固定大小的内存块。这样一来,malloco和rfeeo函数的执行时间也是固定的了。如图2.3[8],在一个系统中可以有多个内存分区。这样,用户的应用程序大连理工大学硕士学位论文以从不同的内存分区中得到不同大小的内存块。但是,特定的内存块在释放时必须放回它以前所属于的内存分区。显然,采用这样的内存管理算法,上面的内存碎片就得到了解决。3移植pC/05一113.1概述目前,针对ARM处理器核的C语言编译器有很多,如SDT、ADS、IAR、TASKE呵GCC等。目前在国内最流行的是SDT、ADS和GCC。SDT和ADS均为ARM公司自己开ADS为SDT的升级版,鉴于以后ARM公司不再支持SDT,所以不选择SDT。GCC虽持广泛,很多开发套件使用它作为编译器,但与ADS比较其编译效率较低,这对充挥芯片性能很不利,所以,权衡后最终确定使用ADS编译程序和调试〔‘〕。ARM7处理器核具有用户、系统、管理、中止、未定义、中断和快中断七种模式,除用户模式外其它均为特权模式。为了尽量减少任务代码错误对整个程序的影响,的任务模式定为用户模式,可选为系统模式,同时提供接口使任务可以在这两种模切换。带T变量的ARM7处理器核具有两个指令集,标准犯位ARM指令集和16位叮b指令集,为了最大限度地支持芯片的特性,任务应当可以使用任意一个指令集并以自由切换,而且不同的任务应当可以使用不同的指令集,移植代码应该实现这一点。3.2移植介绍所谓移植,就是使一个实时内核能够在其他的微处理器或微控制器上运行。环C/OS一n代码绝大部分是使用移植性很强的ANSIC写的,与微处理器硬件相关的部分是使用语言写的。汇编语言写的部分己经压缩到最低的限度,以使林C/OS一n便于移植到其处理器上。要使拜C/Os一n正常运行,处理器必须满足以下的要求:处理器的c编译器能产生可型代码;处理器支持中断,并且能产生定时中断;用C语言就可以开关中断;处理支持一定数量的数据存储硬件堆栈;处理器有将堆栈指针以及其他CPU寄存器的内出、并存储到堆栈或内存中去的指令。移植拜C/OS一H只需要更改那些和硬件相关的文件,而大部分源代码可以保持不变。更改项如表2,1所示。3.3关于头文件1ne1udes,h和eonf1g.h拜/cos一n要求所有.C的文件都要包含头文件incutdes.h,这样使得用户项目中的每个件不用分别去考虑它实际上需要哪些头文件。使用includes.h的缺点是它可能会包含些实际上不相关的头文件,使每个文件的编译时间增加,但这样做可以增加代码的可基于以太网的ELD图文显示系统的设计表2.1pC/OS一工工需要移植的代码[JlTab.2.lCodesubjeettortansPlnat移植内容类型所属文件描述数据类型数据类型与编译器无关的数据类型堆栈的数据类型05CPU.h开关中断的代码常量函数函数BOOLEAN、I’NTSU、INTSS、INT16U、INT16SINT32U、NIT32S、FP32、FP6405STKOSweENTEReeCRInCALO和OSeeEXI几CRPTICALO05STKGROWTH05TASKSWOSTaskstklnitoOSnliHtoo妞卿no、OSnliHtookEndO、0STasCkreatHook()、OSTaskDe1Hook()、OSTaskSWHookO、0STSakStatHook()、OSTCBIniHtokoo、OSTimeTickHokoO、OSTaskidleHooko定义堆栈的增长方向任务切换时执行的代码任务堆栈初始化函数05CPUC.e函数拜005一n在执行某些操作时调用的函数,一般为空函数0SStartHighRdy()05CPUA.asm函数OSIntC饮SwO中断服务程序05石e妙SRO进入多任务环境时运行优先级最高的任务中断退出时的任务切换函数时钟节拍中断服务程序移植性。在本文的移植中另外增加了一个头文件ocnfig.h,要求所有用户程序必须包含ocnfi.gh,在ocnfi.gh中包含inchides.h和特定的头文件和配置项。而拜C/OS一n的系统文件依然只是包含inchide.sh,所有的配置改变包括头文件的增减均在ocnfi.gh中进行。这样,拜C/OS一n的系统文件需要编译的次数大大减少,编译时间随之减少。2.3.4编写05多PU.H在编写05CP.UH时需要做以下工作:()l为了增强系统的可移植性,拜C/OS一n不使用C语言中的与处理器类型相关short,int和olng等数据类型的定义。在移植中定义了一些不依赖于编译的整数数据类型,这样的数据类型即直观可移植性又强。(2)使用软中断SWI作底层接口ARM处理器核有2个指令集,用户任务还可以有两种处理器模式:用户模式和系统模式,组合起来具有4种方式,各种方式对系统资源有不同的访问控制权限。同时,移植需要兼顾把井C/OS一11内核事先固化在Flash中,事后任务从别的地方调入应用。为了使底层接口函数与处理器状态无关,同时使任务调用相应的函数不需要知道函数位置。本
 
以太网LED图文显示系统的设计同时预留挂接拼C/OS一11系统服务的函数的接口。(3)05_STK‘GROWTH环C/OS一n使用结构常量05_ST--KGROWTH中指定堆栈的生长方式,虽然ARM处理器核对于两种方式均支持,但ADS的C语言编译器仅支持一种方式,即从上往下增长,并且必须是满递减堆栈,所以必须置05_ST--KGROwm为1。2.3.5编写05_CPU_C.C文件编写05_CP让C.C文件所做的工作主要有以下几个方面:(1)编写任务堆栈初始化函数OSTaksskt瓦0t,在编写此函数之前,必须先确定任务的堆栈结构。任务的堆栈结构与CPU的体系结构、编译器有着密切的关系。本文移植的堆栈是满递减堆栈,寄存器的顺序是首先是PC寄存器然后是LR、R12、Rll直到RO,然后是CPSR,最后是全局变量中断计数器OEsntersmu。OEsniersmu用来保存关中断的次数,这样关中断和开中断就可以嵌套了。在调用05一XI--TCFJTICALO时,它的值减少,并且仅在值为O时开中断。每个任务都有独立的OsEntersmu,在任务切换时保存和恢复各自的OsEntersmu。(2)软件中断异常Swi服务程序C语言部分,这部分程序有两个入口参数:功能号sW--I-Num和指向堆栈中保存寄存器的位置Rges,程序中使用了一个swithc语句把各个功能分开。软中断的o、1号功能在05_CPU匕八.5中实现。(3)开中断和关中断宏的编写。拜C/OS一n使用宏05--ENTE--RCFJTICALO和OSesEXI几c班TICALO分别来关中断和开中断。关中断和开中断是为了保护临界段代码。这些代码和处理器相关,是需要移植的代码。在ARM处理器核中关中断和开中断是通过改变程序状态寄存器CPSR中的相应控制位实现的。具体修改寄存器的代码是由汇编语言编写的。OSeeENTE凡CFJTICALO的汇编代码和程序文件05_cP--UA.s中x002号软中断调用相似,05多XI--TCRITIcALO则和x003号软中断调用相似。俨)编写启动高优先级函数0SStartHigRhdy()。环C/OS一n的启动多任务环境的函数叫做OSSt叭O,用户在调用OSSt献O之前,必须己经建立了一个或多个任务。oSStarto最终调用函数OSStartHighRdy()运行多任务启动前优先级最高的任务。而函数OSSt叭Hi沙卫dyo则是通过调用软中断的1号功能来实现的。2.3.6编写05_CPU一S05一PU多.5的移植需要编写4个汇编语言函数:OSSt叭HigRhdy()、ose饮Sw()、OShiiCtXtSwO、0STikclSR()。本文中只给出这几个函数代码实现的算法。(1)OSStartHigRhdy()基于以太网的LED图文显示系统的设计OsstartHigRhdyo使就绪态任务中优先级最高的任务开始运行,函数的伪代码如下所列。voidOSSt压rtHigRhdy(void){调用用户定义的OSTaskSWHook();(l)OSRunnin犷TL)RE;(2)得到将要恢复运行任务的堆栈指针;(3)StaekPoi掀半OSTCBHighRd梦>OSTCBStkPtr;从新任务堆栈中恢复处理器的所有寄存器;(4)执行中断返回指令;(5)}①OsstartHi沙RIdyO必须调用OsTaskswHook()函数;但OSStartHlghRdyO函数只是做了任务切换工作的一半—只是完成了高优先级任务寄存器的恢复,而没有保存当前任务的寄存器。oSTaskswHokoO函数必须检查OSR卫几亩ng标志位,以确定osTasksWHookO函数是被osstartHigRhdy()调用的(OSRunni铭是FALSE),还是在Ei常的任务切换之中(osRunnnig是TUR卫)被调用的。②OSStartHigRhdy()调用完oSTaskswHook()后,将OSR月nning标志设为TURE,这时更高优先级任务的寄存器还没有被恢复。③osstHartigRhdy()要得到更高优先级任务的堆栈指针。osst斌HihgRdv()假设osTCBHi砂Rtdy指向最高优先级的任务控制块。需要恢复的任务堆栈指针总是存储在任务控制块的偏移地址为O的位置。④拜C/os一n中,处于就绪状态任务的堆栈结构看起来就像刚发生过中断一样,所有的寄存器都保存在堆栈中。要想运行最高优先级的任务,需将所有处理器寄存器按顺序从任务堆栈中恢复出来,并执行中断返回指令。osstartHigRhdyO函数中最后一个步骤即时执行中断返回指令,使得CPU从堆栈中恢复程序指针以及CPU的状态寄存器,该操作使得CPU开始恢复执行最高优先级任务的第一条指令。(2)OSC饮Sw()任务级的切换是通过执行软中断指令,或者依据处理器的不同,执行TRAP指令来实现的。中断服务子程序、陷阱或异常处理的向量地址必须指向OSCtxswO。如果当前任务调用系统提供的功能函数,并使得更高优先级任务进入就绪态,产C/OS一11就会借助中断服务子程序、陷阱或异常处理的向量地址找到OSC饮SwO。函数的伪代码如下所列。voidOSCXtSw(void){大连理工大学硕士学位论文保存处理器寄存器;()l在当前任务的任务控制块中保存当前任务的堆栈指针;(2)OSTCBCur一>OSTCBStkPtr=Stac冲ointer;OSTaskswHook():(3)OSTCBC=urOSTCBHig叹dy;(4)OSPrioC=urOSPrioHighRdy;(5)得到将要重新开始运行的任务的堆栈指针;(6)Stac冲oinie二OSTCB凡沙卫d-y>OSTCBStkPrt;从新任务的任务堆栈中恢复处理器所有寄存器的值;(7)执行中断返回指令;(8)}①OSC饮Swo按照同OsTasknlitO函数一样的顺序将处理器的寄存器保存到堆栈中。②当将要被挂起的任务的所有CPu寄存器都已经入栈后,osC饮SwO将堆栈指针保存在当前任务的任务控制块中。③当用户的移植需要扩展任务切换函数的功能时,OSC饮swo调用函数OSTaskswHookO。④OSC饮SwO将指向当前任务的指针指向要恢复运行的任务。⑤OSCxtswo将新任务的优先级复制给当前任务的优先级。⑥从新任务的任务控制块中得到新任务的堆栈指针。⑦OSCxtsw()’恢复将运行任务的CPu寄存器。⑧因为高优先级任务的程序计数器仍然在堆栈中,此时一个中断返回指令使得所有的寄存器都从堆栈中弹出到对应的CPU寄存器中,从而使用户任务恢复运行。(3)05瓦tCXtSw()05加tExitO通过调用05玩itC饮Sw(),在IsR中执行任务切换功能。因为Osnlite饮Sw()是在SIR中被调用的,所以假定所有的处理器寄存器都被正确地保存到了被中断任务的堆栈中去了。OSnItiC饮SwO函数中的绝大部分代码同OSCxtswo函数一样。区别在于,因为SIR己经保存了CPu的寄存器,而不需要再在05顶Etxi()t中保存寄存器。(4)OSTiekISR()拜C/OS一n要求用户提供一个周期性的时钟源,来实现时间的延迟和超时功能。时钟节拍应该每秒发生10一100次。可以使用硬件定时器,也可以从交流电中获得50/6HOz的时钟频率。时钟节拍中断服务子程序的伪代码如下所列。OSTiekISR(void)基于以太网的ELD图文显示系统的设计{保存处理器寄存器;调用05玩tEnterO或者直接给OSnINtesting加1;i(fOShiNtesting==l)OSTCBC-ur>OSTCBStkPtr二Stac沙ointer;给产生中断的设备清中断;重新允许中断(可选);OSTmieTick();OShItExitO;恢复处理器寄存器;执行中断返回指令;}①此时中断已经禁止,可以直接给OShlNtesting(中断嵌套次数寄存器)加1,而不用担心数据被其他中断服务破坏。如果中断嵌套层数远没有达到255,就可以不调用OsnItEnte()r函数。②时钟节拍中断服务子程序检查05玩Ntestnig的数值。如果05玩创estnig等于1,则需要在当前任务的任务控制块中保存堆栈指针。③这里取决于中断源,有些中断设备需要在中断响应时清中断。④此处可以开中断,用来响应更高优先级的中断。也可以不允许中断嵌套。⑤OTsciklsRO必须调用OsTimeTikcO来维持拼CO/S一n内部的定时。定时器允许任务被挂起一定的时间,或者允许PEND类型调用的超时功能。⑥因为执行了这个中断服务子程序,在此必须调用0snItExi()t。0SnItEx(ti)决定是否因为这个中断服务子程序的执行,使得更高优先级的任务就绪。如果更高级别的任务就绪,osnltExiot就不会返回到被中断的任务,而是切换到更高优先级的任务。
 
以太网LED图文显示系统的设计3嵌入式TCP/Pl协议栈wLPl的移植3.1LwIP概述枷正是瑞士计算机科学院(SwedishnIstiutteofCo娜uterSeienee)的AdmaDuknels等开发的一套用于嵌入式系统的开放源代码的TCP/正协议栈[l2]。wLPI既可以移植到操作系统上,又可以在无操作系统的情况下独立运行。LW正将其所有协议栈实现在一个与操作系统内核分离的独立进程中,这样做最大的好处在于其跨操作系统的移植性。应用程序可以驻留在LW正进程中,也可以是一个单独的进程。应用程序与LwPI进程通信的方式根据应用程序执行的方式分成两类:当应用程序与LW正在一个进程中时,可以通过函数调用的形式通信;当应用程序与LW正在不同进程时,可以通过更为抽象的API进行通信。wLPI的特性如下【’3]:支持多网络接口下的正转发;支持CIMp协议;包括实验性扩展的UDP用户数据报协议;包括阻塞控制RTT估算和快速恢复和快速转发的TCP传输控制协议;提供专门的内部回调接口Rwa妙I用于提高应用程序性能;可选择的Bkerelye接口妙(I多线程情况下);在最新的版本中支持ppp;新版本中增加了的护斤ag叮net的支持;支持DHCP协议,动态分配Pi地址。3.2wLPI的内存管理通信系统中的存储管理系统必须能够接受可变缓存,如大至包括带有几百字节数据的TCP段到只有几个字节的CIMp回复[’4]。同时,还需要将数据驻留在不由网络子系统管理的内存中,以此来避免数据拷贝。信息包缓存P(acketbuerffs一busf)是wL正中信息包的内部表示〔‘习。pbusf的结构既支持用动态内存分配的方式来保存信息包内容,也可以将信息包中数据驻存在静态内存中。pbusf同时也可以通过链表连接起来,称作Pbusf链,这样信息包就可以跨越几饰busf。pbusf有三种类型:pBU下一R阁M,pBU下皿oM,pB价espoOL。图3.1表示了BP讲eeRAM类型,其包含了通过pbu仔系统管理的数据。而图3.2则表示了一个pbu滋。链中第一个Pbu璞型是PBU下J跳M,第二个是PB哪--ROM类型,其数据在外部存储器中,不受pbu仔系统管理。图3.3表示了从缓冲池分配出来的固定大小的pbusf。一个pbuf链可以包含多种类型的Pbuf。三种不同类型的Pbu隋不同的用途。PB璐espooL主要用于网络设备的驱动程序,因为分配一个Pbu琏度比较快,适用于中断处理程序中。PB班eeROM主要用于传送那些基于以太网的LED图文显示系统的设计由应用程序管理的内存中的数据,这些数据穿过TCP胆时不需要修改。对PBUFROM来说,一些头的信息被存放在Pbu喂表最前面的PBUFesRAM中,就像图3.2一样。nnneXtttPPP盯10耐耐lllennnottttlennn月月a郎1RefffLLLinkhedaerrrIIIPheaderrrTTTCPheaderrr图3.1有数据的PUB--FRMA结构Fig.3.1PBU几RAM,sUrtetiriewihtdatannneXtttttneXIIIIIIIIIPPPyaloadddddP叮lodddddddalllennnnnlennnnnnnfffia只51Reffffffffffffffffffffftttttttttttttttttttotlennnnnnn月月月月a,s!Refffffff图3.2PBU几RMOpbuf链与PBU几RMApbuf链接Fig.3.2ChainnigofPBU--FROMPbufnadPBU--F即以PbufnnneXtttttneXtttttn已XtttPPP即10幼幼幼P即lodddddaPyaloddddddda.............................................lllennnnnlennnnnlennn,,ottttlonnnnnottlennnnntotlennnnn且且agsl砒rrrrrfl二1Refffff月哪1Refffff图3.3PBUF_P00Lpbuf链表Fig.3.3ChainedlistofPBU几POOLPbu地用于应用程序发送动态产生的数据的情况。在这种情况下,pbu原统不仅要为应用程序数据分配内存,而且还要为其头(header)s分配内存。就像图3.1一样。Pbu啄统不能预先知道什么样的头信息是需要的,于是就假定最坏的情况。头的大小在编译的大连理工大学硕士学位论文时候是可配置的。一句话,进来的Pbu提PBU下--P00L类型,出去的Pbu提PBU下皿OM或者是PBUFRAM类型。支持Pbu哟内存管理是非常简单的,只要满足能够分配和释放相邻的内存,同时还能收缩先前分配内存的大小就可以了。这种内存管理需要用到系统整个内存中的指定区域。这样就可以保证网络系统不会耗尽系统内存而导致其它应用程序受到干扰。在具体的实现上,内存管理通过在每一个分配出去的内存顶部放一个小的数据结构,以此跟踪每一块分配出去的内存。如图3.4,这个结构包含两个指针分别指向前一个印erv)和下一个n(xeo分配的内存块。同时它还包括一个标志位(usde),来表示内存块是否已被分配。通过对空闲内存搜索找到一块足够的内存进行分配,这里采用最先匹配算法。当一个块分配过的内存被释放之后,其usde位清零。为了消除内存碎片,释放后内存管理需要检查下一个和先前一个内存块的usde位,如果任何一个没有使用则进行合并。nnneXtttPPP阳vvv婚.一一UUUSOddddd矛矛公长幼幼幼尹尹尹neXttttt.....曰........................,,‘‘P份vvv咬,...夕夕夕·useddddd价价价妊段所所所nnne洲沈沈沈pppr吧vvvUUUSeddd图3.4内存分配结构Fig.3.4SUrteurteofmemoyralloeation3.3网络接口wLPI中物理网络硬件的设备驱动的网络接口表示与BSD中相似〔’3],网络接口表示的数据接口如下:neti动数据结构s加ctnetif{sturctnetif*next;基于以太网的LED图文显示系统的设计hcxanmae汇ZJ;intnum;srtuct币_dadrpi_addr;s加eti几dadrnetmask;s加ctPi_dadrwg;void(*i即叫(sUrtetpbuf*p,stucrtnetif*i即);int(*ouPtu)t(s加etnetif*neti,fsUrtctPbuf*P,surteti--Pdadr*iPdad)r;void*state;};nxet指针用于将网络接口链入到全局链表中。nxnae域用于表示网络接口的类型,只用在运行时由人工进行配置。nmae由设备驱动设置,应该反映硬件的种类。nurn就用来区分同一种网络接口类型。--Pidadr,nenrtkas,wg分别用来表示护地址,子网掩码,网关。state标示设备驱动所包含的网络接口状态,由设备驱动设置。当设备驱动接受到一个信息包的时候需要调用帅ut指向的函数。而网络接口通过uoPtut指针与设备驱动连接。这个指针指向处于设备驱动中的发送信息包的函数,这个函数将在一个信息包发送出去后,被正层调用。指针。吻ut将在设备驱动初始化的时候赋值。3.4lp处理过程LwP只实现了最基本的PI功能。它能发送、接受、转发信息包。但是不支持分段正信息包并且不能处理有PI选项的信息包[‘31。但是对于大多数应用来说,wL正己经够用了。3.4.1接收信息包对于进来的正信息包网络设备驱动先调用i妇PnutO函数。这里要进行一系列的完整性检查,如正版本信息,头长度以及计算和检查头校验和。协议栈不会接受分段的正信息包,因为代理将分段的正信息包重组,这样任何一个分段的正信息包就被悄悄的清除了。另外,带有PI选项的信息包也被代理给丢弃了。接着,此函数将检查目的地址与网络接口地址是否一致来判定信息包是否是此主机的。对网络接口地址的搜索是线性的,因为网络接口一般不多,没有必要订制复杂的搜索算法。如果进来的信息包的目的是本机,则协议域决定了将信息包送到哪个更高层的协议。3.4.2发送信息包
 
以太网LED图文显示系统的设计对于需要发出的信息包,则调用ip一uPtutO函数。这个函数将调用Pi一ut(e)来找到合适的网络接口去发送信息包。当网络接口确定后,信息包将传送给ip-0吻ut一i()f函数。在这里,所有的正头信息将被填入正信息包,同时正头的校验和将被计算。正信息的源地址和目的地址将作为参数传递给Pi一Putu--ti助函数。然而,源地址也可以省去。在这种情况下,出去的网络接口地址将作为源地址填充。ip--routoe通过线性搜索网络接口地址来找到合适的网络接口。在搜索的过程中,正信息包中的目的正地址将被网络接口的子网掩码屏蔽。如果屏蔽后的目的地址与屏蔽的网络接口地址相等,此接口就被选用了。如果没有符合的,则默认的网络接口被选中。默认网络接口或者是在系统启动时设置,或者是在运行时人为设置。如果默认网络接口地址与目的地址不相等,则选用网络接口结构中Wg域指明的地址做为连接级的目的地址。这种简单的路由形式掩盖了一个事实,那就是一个网络可能有很多路由器连在上面。但是对于最基本的情况,一个局域网只有一个路由器连在上面,这样就这可以工作了。由于传输层协议UDP和TCP在计算校验和的时候需要知道目的正地址,所以出去的网络接口在传递信息包给正层的时候需要决定网络接口[15]。这里可以通过传输层直接调用ip--rout(e),因为出去的网络接口在信息包到达正层的时候已经知道网络接口了,就没有必要搜索网络接口链表了。传输层网络层网络接口层图3.5工CMP处理Fig.3.5ProeessnigofICMP3.4.3转发信息包如果网络接口中没有进来信息包中的目的地址,则需要转发。这个过程通过调用Pi_ofwrard()函数实现。在这里,TTL域将减小直到零,此时这个信息包将被丢弃。由于正头变化了,护头的校验和就需要重新计算。最终,信息包被发送到合适的网络接口。3.4.41CMP处理过程基于以太网的ELD图文显示系统的设计在wL正中,CIMp的处理相当简单。通过Pi-Inputo接口到的CIMp信息包传递ic兀甲‘iPnutO,然后其CIMp头将被解开,据此采取正确的动作。一些CIMp信息被传递上层协议,然后这些被上层协议的特殊函数小心的处理。目的地址无法到达的CIMP息包被送到传输层协议,通常是IJDP,然后由函数cimP多es七UnraehcO处理。使用ICMPECHO消息来探测网络的方法用的比较广泛。因此,为了提高性能,里对cIMpjcHO的处理做了优化。实际的处理发生在icmp--lnputo中,其中包括交换进来信息包的源地址和正目的地址,将cIMp类型改成显示答复(echorPeI力,调节cIMp校验和。然后信息包被传送到PI层传送。图3.5115]为CIMp的处理过程。3.5UOP处理过程UDP是比较简单的协议,常用于在不同的进程间分离信息包。每一个UDP会话期状态被存在一个PCB结构中。PCB结构如下:uPd少bc的数据结构surtetuPd夕eb{sUrtetuPd一eb*nxet;sturetiPesaddrlocalesiP,des甘P;u16一loea1Jort,destJ0rt;us_tflgas;u16tehecksumlen;void(*reev)(void*arg,sUrtetuPd一eb*Pcb,surtctPbuf*p);void*rec--varg;};1刃P的PCB存放在链表中,当UDP数据报来到的时候将会搜索此链表。UDP的PCB结构包含一个指向下一个PCB结构的指针。一个UDP会话期包括PI地址,端口号,这些数据保存在loea--lip,des甘p,loca吵ort,des--Ptort。flags将保存U’Dp的校验和策略,如完全关闭校验和,只计算数据报一部分的校验和OJDPLiet)。如果采用UDLite,chksmueln域将用来指明需要计算数据报的多少个部分。当被PcB指明的会话期到来的时候就用到ervc和erc几agr。数据报到来的时候就调用由recv指向的函数。因为UDP比较简单,其输入输出的处理比较简单。如图3.0115】。发送数据时,应用程序调用udp一snedo,这个函数在udpeeouPtutO之上。这里做一些必要的校验和,同时填大连理工大学硕士学位论文充UDP头。由于填充的时候有时需要知道正源地址,所以函数ipJouteo有时也会用到。最后,信息包由中一Putu--ti()f函数发送。当一个UDP数据报来到的时候,正层调用udp一PnutO函数。应用层传输层网络层网络接口层图3.6UDP过程Fig,3.6PoreeuderofUDP3.6Tcp处理过程TCP是一种传输层协议,用于为应用层提供可靠的字节流服务。TCP协议是这里提及的协议当中最为复杂的,而TCP协议的代码大概为整个LW护协议的50%。3.6.1概述基本的TeP处理过程主要由六个函数分担:tep一即ut(),tcpesporeess(),t叩JeceiveO,tcP--’wnte(),tep_neuquee(),tPc一Putut()。当应用程序需要传送TCP数据时,ctp二wrti(e)被调用,然后其将控制权传给ct--Pneuque(e)。TCP数据在此被分成适当大小的TCP段,如果必要的,还会将这些段放在传送队列中。然后由函数切c一u切u()t检查现在是否能发送数据,例如,接收者窗口是否有足够的空间。发送数据使用中一。ut(e)和ip-ouPtu--ti()f。在ipjPnuto函数验证过正头之后,输入处理便开始了。首先要进行正确性检查,还要决定TCP段属于哪一个TcP连接。然后段被tcpeeprocesso处理。如果连接处于接受数据的状态,则tep一eceive()被调用。图3.7[”]为TeP的处理过程。3.6.2数据结构基于以太网的LED图文显示系统的设计因为LW护用于小系统,故其TCP数据结构的实现要尽可能小。由于在使用数据结网络接口层图3.7TCP过程Fig.3,7PoreeudreofTCP的时候有个权衡,即数据结构复杂度与代码复杂度的权衡,在这里为了使数据结构尽量小,只能牺牲代码复杂度了〔’“]。TCP的PCB是相当大的:ctpespbc的数据结构surtettcPJeb{surtcttePwePeb*next;enu幻以tcP一stateState:void(*aecPet)(void*arg,stucrttPc夕bc*newPbc);void*aeePe气arg;surtetiP_dadrlocaleeiP;ul勺loca吵ort;st川ctiP_addrdes--tiP;u16_tdest--Port;u32一rev-nxt,rev-Wnd;/*接收变量*/u16tlmr;u32tmss;*/最大段大小*/us挤flags;
 
以太网LED图文显示系统的设计u16t毗est;/*rtt预测*/u32一srtqe:*/成预测的序列号*/s32)sa,sv;/*砒的平均值和方差*/u32trt。;*/重传的超时值*/u32tlastack;*/最后接收到的确认*/us一dPuacks;*/复制的确认数量*/u32一cwnd;u32)ssthresh;*/拥塞控制变量*/u32一sndeeack,sn--d鲜t,sndW--nd,snd‘Wll,sndeew12,ns--dlbb;/*发送变量*/void(*reev)(void*arg,s加ctteP一bc*Pbc,sUrtetPbuf*P);void*rec--varg;sUrtetteP一egunsnet,unacked,ooseq;/*队列*/};rttest,srtqe,as,vs用于往返时间的预测。用于往返时间预测的段的序列号存放在esq中,而段的发送时间存在rttest中。平均往返时间和往返时间差存放在as和vs中。这变量用于计算超时重传时间,然后将结果存在rt。中。而lastack和dupacks用于实现重传快速恢复。lastack域存放最后一个确认信号的序列号。d即acks中存放着lassttack中的列号的收到的确认数。当前拥塞窗口被存放在cwnd域,而缓慢启动闽值存放在ssbrtesh。sn--dack,snd‘nxt,snd‘wnd,sn--dwll,snd--wu,sn--dblb用于发送数据。函数指针vc和erc--varg用于向应用层传送接收到的数据。在发送数据时用到三个队列:unsnet,acked,ooesq。从应用程序接收到的但是没有发送的数据,则存放在unesnt队列中,未认数据则放在unackde队列中,而超出队列的数据存放在oosqe队列中。.7wLIP在pC/05一11上的实现7.1体系结构相关部分/srezareu访euld/eaerh目录下ce.h、epu.h、per.fh中有一些与ePu或编译器相关的定,如数据长度,字节序等。这应该与用户实现环C/OS一11时定义的数据长度等参数是一的[‘’j。per.rh在这里不需要修改。对cc.h,增加对ini和unsingdenit的类型定义:t即edefunsingedintu32一:t冲edefsingedini532一;对Pc.uh,因为ARM默认为小数端对齐所以增加定义:基于以太网的ELD图文显示系统的设计#defineBYTEORDERLITTLEENDIAN由于C语言中是按32位对齐的,而LwPI中的结构是按数据长度来访问数据的,所以在。.ch中,定义了一些宏用来使数据紧密的排在一起:#definePAC--KSTRUCT一万EILD(x)x_atrtibut-e一(P(aeked))#de五nePACK‘多TRUC--TSTRUCT_attribute一(印acked))#definePACKSTRUCTBEGIN#de五nePACKSTRUCTEND3.7.2操作系统相关部分操作系统相关部分在sys_aer.hh和ys砂rhc.c中实现。(1)SyS-arhc.h在拜C/OS一11下的定义#iufdefSYSARCHH#defineSYSARCHH#defineLWPISTKSZIE1024//Lw正进程的栈大小为1024B#defineLW护eeTAS玫MAXS刀定义最多5个wL正任务#defineLW护weSTAR几pRIOS泥w正进程优先级从5开始#defineMAX‘QUEL〕ES20#de血eM尤又QUEU卫eeENTRIES20//消息队列中最多消息数t冲edefs恤et{05一EVENT*pE;//拜C/OS一11中指向事件控制块的指针void*pvQEntries[MAX一Q泥U卫we万NTR压s];//消息队列}T几pESCR,*P电DESCR:PytedefOSeeEVENT*sy--ssem--t;pytedefP之DESCRsysesmbo犯t;tPyedef创TSUsys‘threa--dt;#Clldif(2)sys-arch.e在拼C/05一11中的实现①系统初始化ys--sni(ti)sys一ntio需要在TCp/护进程创建前被调用。首先通过调用osMmeCreateO为消息队列分配空间,其空间大小为系统定义的最大队列数,然后初始化每一个LwPI进程的定时事件表。②ys屯sem-t信号量大连理工大学硕士学位论文wL正中需要使用信号量通信,其提供了四个函数接口:ys--sserr--l-newo,--ssemwerfeeo,sys一e--msi,a1o,sys_are--Shem-waitOll’}。由于拼e/05一xl己经实现了信量05EVENT的各种操作,并且功能和LW正上面几个函数的目的功能是完全一样的,以只要把环C/OS一11的函数重新包装成上面的函数,就可以直接使用了。③yss--mbo--xt消息wLP使用消息队列来缓冲、传递数据报文,因此要在sys-arhc中实现消息队列结构。消息来说,需要实现sys-mbox-newo,syseembo--xerfe(),sys口mbox-posto,ysaer--hmbo--xefoth()。队列本身的管理利用拼C/OS一n自己的OSQ操作完成,然后使用O/S一H中的内存管理模块实现对消息的创建、使用、删除回收,两部分综合起来形成LwPI的消息队列功能。④s”-arC址timeouts函数LW正中每个与外界网络连接的线程都有自己等待超时时间。这一点表现在每个线程对应一个ys--stimocut结构体队列,包括这个线程的t加ocut时间长度,以及超时后应调的timocut函数,该函数会做一些释放连接,回收资源的工作。如果一个线程对应的--stimoeut为空,说明该线程对连接做永久的等待。timocut结构体己经由Lw正自己在ysh中定义好了,而且对结构体队列的数据操作也由wL正负责。⑤yss--threa-d-nwe创建新线程wL正可以是单线程运行,即只有一个tPcip线程(tPcipeehrteda),负责处理所有的.pu/Pc连接,各种网络程序都通过tPcPI线程与网络交互。但wL正也可以多线程运行,以高效率,降低编程复杂度。在林C/OS一n中,没有线程的概念,只有任务。它已经提供了创建新任务的系统调用STaskCreate(),因此只要把OSTaskCreateO封装一下,就可以实现sys一threa--d珍ew。需注意的是wL正中的hrtaed并没有拼C/OS一H中优先级的概念,实现时要由用户事先为w正中创建的线程分配好优先级。⑥网络设备驱动程序详细的介绍在第五章。基于以太网的LED图文显示系统的设计4LEO屏幕显示系统的硬件设计4.1系统总体设计本设计的目标是实现一种可以通过htimeet控制的LED图文显示屏,以节省传统LED显示系统需要铺设专用线路的成本。以太网E(htme)et是当今局域网采用的、最通用的通用协议标准[‘8]。基于TCP皿协议的以太网使得整个网络只有一种底层通信协议,可以满足控制系统各个层次的要求,可以便携地访问远程系统或与nItneret连接,从而能够实现办公自动化网络与工业控制网络的无缝联接。近年来,以太网正在从不同的途径进入到工业自动化和过程控制市场,应用范围也有很大的扩展[19〕。上述设计的ELD屏幕显示系统一般作为一个独立的系统存在,通过接入以太网与PC机进行远距离的通信,实现了只要有nIt的et的地方就能对显示屏进行控制。基于ARM7核的32位高性能微处理器LPC2210作为显示屏控制器的核心部分,通过外接一个以太网控制器RTL8019AS,实现了与网络通信的功能。RTL8019AS符合EhtemetH与IEEE802.3,10BASES,10BASEZ,10BASET标准;具有睡眠模式,可有效降低功耗;可在半双工或全双工模式下提供10N伪ps的以太网接入。复复位电路路路电源和晶振电路路路串行口通信模块块图4.1系统电路的整体框图Fig.4.1Bloekdiagarmofsystmeeireuit整个系统的结构图如图4.1所示,在该系统中,ARM微处理器LPC2210为主要部件的LED显示屏控制器,可以看作是以太网上的一个独立的节点,在这个控制器上运行以太网通信协议LwPI,以便进行网络通讯。同时通过在接入网络的上位机上运行本设计中编写的应用程序,就可以实现对每一个接入nItemet上LED图文显示屏进行远程
 
以太网LED图文显示系统的设计控制,更新其显示内容。系统中的Jtga(JointTestActionGroPu)接口主要用于在线调试,nash和SRAM是存储程序和数据的地方。其它部分的电路在后文中将有详细的描述。4.2主控制器LpC2210的引脚接法LP2c210是基于一个支持实时仿真和跟踪的16/32位ARM7TDMI一sMTcPu。对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降低超过30%,而性能的损失却很小[20]。图4.2LPC2210的引脚接法Fig.4.2UsgaeofLPC2210’万O由于LPC2210的144脚封装、极低的功耗、多个32位定时器、8路10位ADC、PWM输出以及多达9个外部中断使它们特别适用于工业控制、医疗系统、访问控制和电子收款机伊05)。通过配置总线,LPC2210最多可提供76个GPIO。由于内置了宽范围的串行通信接口,LPC2210也非常适合于通信网关、协议转换器、嵌入式软件调制解调器以及其它各种类型的应用[20J。LPC2210芯片包含一个支持仿真的ARM7TDMI一S微控制器、与片内存储器控制器接口的ARM7局部总线、与中断控制器接口的AMBA高性能总线(AHB)和连接片内外设功能的VLSI外设总线(VPB、ARMAMBA总线的兼容超集)。LPC2210将基于以太网的LED图文显示系统的设计ARM7TDMI一s配置为小端(Little一nedin)a。LPC2210的外设功能(中断控制器除外)都连到了VPB总线,AHB到VPB的桥将VPB总线与AHB总线相连。片内外设与器件脚的连接由引脚连接模块控制,软件可以通过控制该模块让引脚与特定的片内外设相连接[1]。本设计中LPC2210引脚的详细接法如图.42所示。AO~A20为Flash、SRAM和卡芯片RTL8019AS的地址总线。如果存储器配置成了32位宽度,地址线AO和Al无用;如果存储器组配置成了16位宽,则不需要AO;8位宽的存储器组需要使用AO,本设计中的存储器组配置成了16位宽。DO~D巧为Flash、SRAM和网卡芯片RTL8019A的数据总线。nTRST、TDI、TMS、TCK、RTCK、TDO和豆RST为JTAG口的数据和控制引脚。TDxO和RxDO为与串口进行通信的引脚。其它的引脚功能在后边的具体电路中有详细的介绍。4.3复位电路EEEXTERN人毛卜企MORYBANK333EEEXTERNAL加王MORYBANKZZZEEEXTERNALN田MORYBANKIIIEEEXTERNALMFMORYBANKOOOBBBOOTBLOCK(RE·MAPPDEFROMON.CHIPPPRRROMMEMOR均均RRRESERVEDADDRESSSPACEEE1116KBYTEON一HIPSTATICR人MMMRRRESERVEDADDRESSSPACEEE图4.3Lpe22lo存储器映射[20]Fig.4.3LPC2210me们以eyrm叩图.43为复位后从用户角度看到的整个地址空间映射。AHB外设分配了ZMB的地址范围,它位于4GBARM存储器空间的最顶端。每个AHB外设都分配了16KB的地址空间。V卫B外设也分配了ZMB的地址范围,从3.SGB地址点开始。每个VPB外设大连理工大学硕士学位论文在VPB地址空间也都分配了16KB的地址空间,由于每个外设空间的规格相同,这样就简化了每个外设的地址译码。所有外设寄存器都按照字地址进行分配(32位边界),这样就不再需要使用字节定位的硬件来进行小边界的字节(8位)或半字(16位)访问。不管字还是半字寄存器,都是一次性访问,例如,不可能对一个字寄存器的最高字节执行单独的读或写操作。4.3.2复位电路由于ARM芯片的高速、低功耗和低工作电压导致其噪声容限较低,对电源的纹波、瞬态响应性能、时钟源的稳定性和电源监控可靠性等诸多方面也提出了更高的要求。本复位电路使用了专用微处理器电源监控芯片SP7OSS,以提高系统的可靠性[1l。由于在进行TJAG调试时,RnST和nTRST是可由TJAG仿真器控制复位的,所以使用了三态缓冲门74HC125进行驱动,电路如图4.4。在图.44所示的复位电路中,信号RnsT连接到廿C2210芯片的复位脚RESET,信号nTRST连接到LPC2210芯片内部JTAG接口电路的复位脚TRST。复位开关SW接到了芯片SP708S的手动复位引脚MR,其输入为低电平有效,内部有70林A上拉电图4.4系统复位电路Fig.4.4Reseteireuitofhtesysetm流。正常情况下RST引脚输出高电平,74HC125的两个三态缓冲门截止,RnST和nTRST在上拉电阻Rl和R2的作用下,输出高电平,系统可正常运行或进行JTAG调试。当用户按下复位键sw,引脚丽面被拉低到.08v以下时,RsT端输出一个低电平信号,使74HC125的两个三态缓冲门导通,RnST和TnRST输出低电平,从而控制系统复位。4.4电源和时钟电路基于以太网的LED图文显示系统的设计4.4.1电源电路LPCZ000系列ARM7微控制器均要使用两组电源,FO口供电电源为3.3V,内核片内外设供电电源为1.8V,所以系统设计为.33V应用系统。首先,由POWER电源口输入gV直流电源,二极管Dl用来提高系统供电的安全性,C4和Cl起滤波作用,以提高电源的供电质量。之后LM78os将电源稳压至sv,由DLO芯片(低压差电源片)提供LPC221o所需要的3.3v和1.sv两路电压[23)。LDO芯片采用了SPXI117M3一1.8和SPXlll7M3一3.3,有很多DCD/C转换器可以成sv到3.3V和1.8v的电压转换,这里选用这两种型号,是因为它们有输出电流大,输出电压精度高和稳定性高的特点。系统电源电路如图.45所示。SPXI117系列LD芯片输出电流可达800n1A,输出电压的精度在+1%以内,还具有电流限制和热保护功能广泛应用在手持式仪表、数字家电和工业控制等领域。为了改善电源的瞬态响应和稳性,输出端接了4.4.2系统时钟电路时钟电路用于向系统提供工作时钟。廿C2210微控制器可使用外部晶振或外部时钟源,若使用片内PLL功能及SIP下载功能,则这两种时钟源的频率范围都是10一25MHz。片内的PLL电路兼有频率放大和信号提纯的功能,因此,系统可以以较低的外部时钟信号获得较高的工作频率,以降低因高速开关时钟所造成的高频噪声。虽然内部PLL电路可用于调整系统时钟,但是由于处理器最高频率的限制,只能达到60MHZ。
 
以太网LED图文显示系统的设计本时钟电路使用了11.0592MHz的外部晶振,电路如图.46。用IMO的电阻R4并接到晶振的两端,使系统更容易起振。选择n.0592MHz的外部晶振的原因是使串口波特率更精确,同时能够支持LPC2210微控制器内部的PLL功能及SIP下载功能。图4,6系统时钟电路Fig.4.6Cloekerieutiofhetsystem4.5F1ash和SDRAM存储器接口电路LPC2210微控制器内部含有一个存储器控制器EMC,它是一个AMBAAHB总线上的从模块,它为AMBAA壬IB系统总线和外部(片外)存储器器件提供了一个接口。该模块可同时支持多达4个单独配置的存储器组,每个存储器组都支持SRAM、ROM、FlashEPROM、BurstROM存储器或一些外部FO器件。每个存储器组的总线宽度为8、16或32位,但是同一个存储器组不能使用两个不同宽度的器件。Flash存储器是一种可在系统进行电擦写,掉电后信息不丢失的存储器。它具有低功耗、大容量、擦写速度快、可整片或分扇区在系统编程的特点,并且可由内部嵌入的算法完成对芯片的操作。Flash在系统中通常用于存放程序代码、常量表以及一些在系统掉电后需要保存的数据。SRAM不具有掉电保存数据的功能,但是其存取速度很快,因此主要用于程序的运行空间、数据及堆栈区。本电路扩展了4Mbit的SRAM(IS61VL25616AL)和16Mbit的FALSH(SST39钾160),为了便于程序的调试及最终固化应用程序,使用了两个地址空间Bakno(oxs0000000一oxsoo7fffD和Baknl(oxsl000000一oxsllffn均,它们分别由eso和CSI管脚选中。当调试程序时,通过JUMPI跳线将SRAM选为BaknO;当需要将调试好的程序固化到FLASH中时,将FLASH选为Banko地址,SRAM选为Bankl地址。Bnako可以用来引导程序运行,若使用Bnako引导程序运行,调整JIJN口0,使系统复位时BOOTI和BOOTO为0b01。存储器连接使用了16位总线方式,数据总线使用了DO~D15,地址总线使用了Al一AZO,BLSO和BLSI信号用于控制SRAM的低字节和高字节的写操作。扩展的存储器接口电路如图4.7所示基于以太网的LED图文显示系统的设计图4,7存储器接口电路Fig.4.7nIterafeeeicrutiofhteflashnadsra幻nmemoyr4.6串口电路当要使用SIP功能时,需要使用LPC2210的UARTO与上位机的串口进行通讯。而本设计中使用了SIP功能,因此设计了串口通信电路。RS一232标准是是美国电子工业协会EAI(EleetorniehidustriesAssoeiation)与BELL等公司一起开发的通信协议[2‘},它适合于数据传输率在。一2kb0ps范围内的通信。是目前PC机与通信工业中应用最广泛的一种串行接口,也被定义为一种在低速率串行通讯中增加通讯距离的单端标准。典型的RS一232信号在正负电平之间摆动,在发送数据时,发送端驱动器输出的正电平在巧~+1SV之间,负电平在一5一15V之间。当无数据传输时,线上为TTL电平,从开始传送数据到结束,线上电平从TTL电平到RS一232电平再返回TTL电平。接收器典型的工作电平在+3~+lZV与一3~一1ZV。由于发送电平与接收电平的差仅为ZV至3V左右,所以其共模抑制能力差,再加上双绞线上的分布电容,其传送距离最大为约巧米,最高速率为20kb/s。RS一232是为点对点(即只用一对收、发设备)通讯而设计的,其驱动器负载为3一k7o。所以RS一232适合本地设备之间的通信。PS3232E是SIPex公司生产的一种RS232接口芯片,使用单一电源电压供电,电源电压在3.0V一5.5V范围内都可以正常工作,其额定电流为300麻。只需外接四个0.1口的电大连理工大学硕士学位论文容,保证数据传输速率在12okbps下保持RS232输出电平。可以很方便地完成TTL电平与RS232电平之间的转换。SP3232E内部有一对调整充电泵,由增压充电泵产生+5.5V、反向充电泵产生一5.5V的输出电压[22]。由于电源电压可在3.ov~5.5v之间变化,充电泵以间断方式工作,如输出电压低于5.5V,则充电泵工作,如输出电压超过5.5V,则充电泵停止工作。每个充电泵需要一个浮动电容C(16,C17)和一个储存电容C(14,C15)来产生v+、v一电源。在实际应用中,器件对电源噪声很敏感,因此,Vcc需要对地加去祸电容C13。其电路图如图4.8所示。图4.8串行通信接口电路Fig.4.8Cireuitdiagrmaofserialeon卫nunleationntierafee4.7TJAG接口电路在JTAG调试当中,边界扫描旧。unda-yrScn)a是一个很重要的概念。边界扫描技术的基本思想是在靠近芯片的输入输出管脚上增加一个移位寄存器单元。因为这些移位寄存器单元都分布在芯片的边界上(周围),所以被称为边界扫描寄存器B(。und工y~ScnaRegsiertCe)ll。当芯片处于调试状态的时候,这些边界扫描寄存器可以将芯片和外围的输入输出隔离开来。通过这些边界扫描寄存器单元,可以实现对芯片输入输出信号的观察和控制。对于芯片的输入管脚,可以通过与之相连的边界扫描寄存器单元把信号(数据)加载到该管脚中去;对于芯片的输出管脚,也可以通过与之相连的边界扫描寄存器“捕获”C(妙TIJRE)该管脚上的输出信号。在正常的运行状态下,这些边界扫描寄存器对芯片来说是透明的,所以正常的运行不会受到任何影响。这样,边界扫描寄存器提供了一个便捷的方式用以观测和控制所需要调试的芯片。另外,芯片输入输出管脚上的边界扫描(移位)寄存器单元可以相互连接起来,在芯片的周围形成一个边界扫描链B(uondyar一scnaChain)。一般的芯片都会提供几条独立的边界扫描链,用来实现完整的基于以太网的LED图文显示系统的设计测试功能。边界扫描链可以串行的输入和输出,通过相应的时钟信号和控制信号,就可以方便的观察和控制处在调试状态下的芯片[24]。对边界扫描链的控制主要是通过T”T(estAccessPo)rtConrtoller来完成的。T”是一个通用的端口,通过TAP可以访问芯片提供的所有数据寄存器D(R)和指令寄存器(R)I。对整个T妙的控制是通过TAPCOntroller来完成的。TA卫总共包括5个信号接口TCK、TMS、TDI、TDO和TRST:其中4个是输入信号接口和另外1个是输出信号接口。本电路采用A卫乃江公司提出的标准20脚JTAG仿真调试接口,JTAG信号的定义以及与LPC2210的连接电路如图.49所示。图中JTAG接口上的信号RnST和TnRST与前文中讲到的复位电路连接(参考图.44),形成线“与”的关系,这样通过JTAG和系统的复位电路都可以控制系统的复位。在测试时钟返回信号引脚RTCK上接一个4.k7o的下拉电阻,那么当系统复位后,该引脚上的低电平使LPC221O内部的TJAG接口使能,这样就可以直接进行JTAG仿真调试了。如果用户需要使用Pl.26一PI.31作FO,不进行JTAG仿真调试,则可以在用户程序中通过设置PNISELZ寄存器来使LPC2210内部的JTAG接口禁能。图4.9JTAG接口电路Fig.4.9Jtaginte血eeeireuit4,8ELO显示屏扫描驱动电路4.8.1LEO器件发光基本原理发光二极管(lihgte而ttingdidoe,LED),是一种把电能转换成光能的特种器件,通常ELD是用半导体材料制作的正向偏置的PN结二极管,当在PN结两端注入正向的电流时如图4.10所示,注入的非平衡载流子在扩散过程中复合发光[25]。
 
以太网LED图文显示系统的设计发光二极管的结构主要由PN结芯片、电极和光学系统构成。我们知道,发光是一种能量转化现象。当系统受到外界激发后,会从稳定的低能态越迁到不稳定的高能态;当系统由不稳定的高能态重新回到稳定的低能态时,能量差以光的形式释放数来,就会产生发光现象[26〕。制作半导体发光二极管的材料是重掺杂的,热平衡状态下的N区有很多迁移率很高的电子,P区有较多的迁移率较低的空穴。由于PN结阻挡层的限制,在常态下,二者不能发生自然复合。而当给PN结加以正向电压时,导带中的电子则可越过PN结的势垒进入到P区一侧。于是在PN结附近稍偏于P区一边的地方,处于高能态的电子与空穴相遇后便产生发光复合。这种发光复合所发出的光属于自发辐射,辐射光的波长决定于材料的禁带宽度Eg。4.8.2LEO器件的驱动方式经过对LED器件的发光原理进行分析后,我们可以得到这样的结论:只要在ELD器件上加上足够的正向电压,那么流过它的电流就会使它发光,这就是LED器件的驱动。在实际应用中,往往需要调节LED器件的发光强度,通常我们是通过调节流经LED器件的电流的平均时间来实现的。常见的LED器件的驱动方式有:直流驱动、脉冲驱动和扫描驱动,本设计中使用的驱动方式为扫描驱动。(1)脉冲驱动所谓脉冲驱动方式,就是利用人眼的视觉暂留效应,以脉冲的方式对LED器件进行供电,使之间歇性地点亮。采用这种驱动方式需要对以下两个方面进行考虑:脉冲电流的幅值和其重复颇率。首先,脉冲电流幅值的选择,当脉冲驱动的平均值与直流驱动的电流值相等时,我们人眼的感觉是相同的,也就是说两者的发光强度相当。如图4.11所示,平均电流I。是瞬时电流I的时间积分,对于矩形波来说,有如下表达式[271基于以太网的LED图文显示系统的设计‘:一(‘/t)f‘dtI。红F(ton/T)其中n0tT/就是占空比的一种描述,为了使脉冲驱动方式下的平均电流流oI相同,就需要使它的脉冲电流幅值满足1;==T(/t。)I:=(T/tno)I。(4.1)(4.2)几与直流驱动电衅.3)月月和韧夏夏图4.11LED的脉冲驱动Fig.4.11Pulse面veofLED可见脉冲驱动时,脉冲电流的幅值应该比直流驱动电流大T/tno倍。其次是脉冲重复频率的选择,通过对视觉暂留特性的分析,要使人眼感觉不到LED器件闪烁,那么脉冲电流的重复频率必须高于24Hz。脉冲驱动的主要应用有两个方面:扫描驱动和占空比驱动。图4.招行扫描列控制原理及波形图Fig.4.12户neiPlenadwaveofm1sofrowse咖ingcolUmneontrollnig(2)扫描驱动大连理工大学硕士学位论文扫描驱动是通过数字逻辑电路,使若干ELD器件轮流导通,用以节省控制驱动电路。LED显示屏是将发光灯按行按列布置的,驱动时也就按行按列驱动。在扫描驱动方式下可以按行扫描,按列控制;也可以按列扫描,按行控制。所谓“扫描”的含义,就是指一行一行地循环接通整行的LED器件,而不问这一行的哪一列的LED器件是否应该点亮,某一列的ELD器件是否应该点亮,由所谓的列控制电路来负责。本论文采用按行扫描按列控制的方式。图4.12所示为一个m行n列结构的LED显示屏,当采用行扫描列控制的驱动方式时,从Hl到Hm轮流将高电位接通各行线,使连接到各行的ELD器件接通正电源,但具体哪一个ELD导通,还要看它的负电源是否接通,这就是列控制所要完成的工作。例如在LED显示屏上需要LEDll熄灭,LEDZI点亮,那么当扫描到Hl行时,Ll列的电位就应该为高:当扫描到HZ行时,L1列的电位就应该为低。4.8.3L印点阵工作原理和显示时间分析()lLED显示屏工作原理LED显示屏以发光二极管为像素,由LED点阵显示单元拼接而成。最常见的ELD点阵显示单元有5*7,7*9,8*8结构,前两种主要用于显示各种西文字符,后一种常用于显示各种汉字字符[9z〕,本论文采用的是8*SLED点阵,它的外观及等效电路图如图4.13所示。12354‘.7图4.138*8点阵显示单元Fig.4.138*8dotmartixdisPlayingmoudle根据驱动方式的不同,LED大屏幕显示方式可分为静态显示和动态扫描显示两种。静态显示是指将一幅画面输入以后要保持到下一幅画面的输入;动态显示是指将画面分为若干部分分别进行刷新[0s]。静态显示每一个像素需要一套驱动电路,如果显示屏为*nm个像素屏,则需要*nm套驱动电路;动态扫描显示则采用多路复用技术,如果是P路复用的话,则每P个像素需一套驱动电路,*nm个像素仅需*n耐p套驱动电路。另外,基于以太网的LED图文显示系统的设计对于静态显示方式,需要较多的译码驱动装置,需要的引线也比较多;对于动态扫描显示方式,可以避免以上不足,但是容易造成显示亮度低、屏幕闪烁等问题。在实际的LED大屏幕显示中,很少有采用静态驱动的。显示数据通常以字节的形式顺序存放在单片机的存储器中。在行扫描列控制显示时,把显示数据从存储器中取出传送到每一行对应的列驱动器上,这就存在一个列数据传输方式的问题。从控制电路到列驱动器的数据传输可以采用并行方式或串行方式,它们各有优缺:数据并行传输的速度比较快,但是随着屏幕的增大,点阵模块数量的增多,线路会越来越复杂;数据串行传输的速度比较慢,但它可以大大简化传输线路,对于大屏幕来说,采用串行传输方式比较合适[30J。采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,与此同时,列驱动器中每一列都把当前数据传向后一列,并从前一列接收新数据,一直到一行的各列数据全部传输到位后,才能并行地进行显示。对于串行传输来说,数据要经过并行到串行和串行到并行两次变换,因此列数据的准备时间可能相当长,在行扫描周期确定的情况下,留给行显示的时间就少一些,以至影响到LED的亮度。解决串行传输中列数据准备和列数据显示的时间矛盾问题,可以采用重叠处理的方法。即在显示本行各列数据的同时,准备下一行的列数据,这就需要列数据的显示具有锁存功能。本行已准备好的数据打入并行锁存器进行显示时,串并移位寄存器就可以准备下一行的列数据,而不会影响本行的显示。(2)显示时间的分析对于以动态扫描方式工作的显示系统,扫描时间的确定较为重要,根据人眼的视觉暂留时间,若每秒显示二十四帧以上,便可得到稳定的显示,取每秒二十五帧,即完成对全屏的一次扫描时间为4m0s,那么,只要每次完成对全屏的扫描时间不超过该值,将会得到较为稳定的显示。从理论上讲,显示屏的大小是任意的,但从上面的分析可知,显示屏做得越大,即屏幕的点阵规模越大,往显示屏上所送的数据就越多,数据传输与控制的时间也会增加,即完成一屏扫描的时间也将越长,然而,40ms的时间却是固定的,多于4Oms会有闪烁感。在设计显示屏的大小时,该因素是必需考虑的。为了满足这一要求,关键在于提高处理器的程序执行速度,可以选择更快的CpU,或数字信号处理芯片(DsP)。事实上,ELD显示屏控制器,要求的数字信号处理能力并不高,主要要求的是显示数据的访问和控制信号的产生。对于这两项功能,采用基于ARM核的32位嵌入式RISC微处理器是完全可以胜任的。基于ARM核的32位微处理器的速度不仅比8位/16位单片机执行程序的速度要高得多,而且存储容量要大得多,因此,本论文采用基于ARM核的犯位嵌入式RISC微处理器组成LED屏幕显示系统的控制器,与
 
以太网LED图文显示系统的设计传统的基于8位八6位单片机的ELD显示系统相比,在不显著增加系统成本的情况下,可支持更大可视区域的稳定显示,同时可存储更多的显示内容。4.8.4LEO显示屏行驱动行驱动用到的芯片主要有同步4位二进制计数器DM74LS161A、4线—16线译码器DM74LS154和P沟道增强型MOS管CEM4953。DM74LS161A是一个可编程的计数器,也就是说它的输出值可以被设定为任意的电平值,本设计中DM74LS161A的数据输入管脚A、B、C、D都接到了电源上,通过在LOAD管脚加上一个低电平信号,当CLOCK管脚上有一个时钟脉冲时,A、B、C、D的设定值将会相应的出现在输出管脚QA、QB、QC、QD并以此为基数开始计数,这样计数器就会通过QA、QB、QC、QD在输出管脚输出16种组合。DM74LS154的管脚接到了低电平,使得当DM74LS154的输入端A、B、C、D输入信号时,在其输出端相应的输出16种互斥状态之一,也就是16个输出管脚只有一个管脚输出低电平,剩余的巧个管脚都输出高电平,从而控制显示屏的某一行点亮。DM74LS161A的输出接到DM74LS154相应的输入管脚,DM74LS16lA从0计数到15,DM74LS154就会输出16种不同的状态。图4.14CME4953的输出特性Fig.4.14OuPtutCharaeteristiesofCEM4953行驱动的主要芯片采用了CEM4953,它是LED显示屏设计中的专用芯片,其驱动性能较其它芯片更优,且能够提供的驱动电流范围很大,通常能够提供0~SA左右的电流,且输出电流的稳定性较好。它内部集成了两个P沟道的MOS管,每一个管子都有两个输出,本设计将这两个输出并到一起作为一路输出,接到LED点阵模块的某一行上,提供行控制信号。其输出性能如图4.14所示。基于以太网的LED图文显示系统的设计处理器给出四位行计数信号(或者经过16进制计数器给出),经过译码器之后产生16路行选通信号,加到LED模块的各行上,从而实现行扫描输出。由于一个显示单元是犯行,所以将上面16行和下面16行的对应行连接到一块,一次行信号的输出同时控制上下两行。行驱动的电路图如图4.15所示。图4.15LED显示屏的行驱动电路图Fig.4.15Cireuitdiagr田刀ofhteELDsereen,sorwdrive4.8.5LED显示屏列驱动显示屏的列驱动采用的芯片主要有串入并出移位寄存器SN扭LS595N和达林顿管阵列芯片ULN2803AG。因为一般的ELD的工作电流在巧一2011】A,而SN74HC594的输出最大电流只有20IllA,为了更好的保护LED显示屏,所以在SN74HC594后边又加上了ULN2803AG,以增加列电流的最大值。SN74LS595N是一个的8位的串行输入并行输出的移位寄存器,输出端带有8个锁存器和8个三态输出门,管脚RCLK接收到高电平后将移位寄存器中的内容锁存到后端的锁存器中,而移位寄存器仍可以在端口SRCLK的时钟控制下,继续进行移位操作,锁存器中的内容保持不变。本电路中输出使能端口OE接到了低电平上,使输出使能,从而锁存器中的内容可以马上就被输出。通过把上一个SN74Ls595N的移位输出管脚QH’接到下一个SN74LS595N的移位输入管脚SER,可以将SN74LS595N扩展为更长的移位寄存器。管脚sRCLR获得一个低电平信号后,可以将移位寄存器中的内容直接清零。UNL2803AG高电压、高电流的达林顿阵列集成芯片,内部集成了8对高压NFPN达林顿管,它们可以承受500mA的大电流,并且为开关型的电感负载提供了一个钳位二极管。大连理工大学硕士学位论文ULN2803AG其实是一个反相的驱动器,它的输出端的逻辑状态与输入端的逻辑状态相反,可以将小功率微弱信号经过功率放大及驱动后变换为所需要的功率。列驱动的整体工作过程是这样的:从处理器的SPI口送过来的显示数据,经由第一个SN74LS595N的管脚SER串行输入到每一个级联的SN74LS595N中,等到一行显示数据输送完毕后,处理器送出一个锁存信号将移位寄存器中的显示内容直接一起打入到寄存器后边的锁存器中,结合上文讲的行信号,就可以控制当前行将显示信息显示出来。送完上一行显示信息后,再送下一行,同时在行信号的配合下,通过扫描方式控制整个LED显示屏的显示。列驱动的电路如图4.16所示。图4.16LED显示屏的列驱动电路图Fig.4.16CcriuitdiagrmaofhteLEDserene,seolu刀比ndrive4.9以太网接口电路4.9.1TRL801gAS接口芯片工作原理由台湾Reatlke公司生产的RTL8019AS,是8/16位SIA总线的网卡,集成了MAC和物理层的功能,它能够与NE2000软件兼容。它的功能逻辑包括接收逻辑、CRC产生校验逻辑、发送逻辑、地址识别逻辑、F正O和F正O控制逻辑、协议PCA、DMA和缓冲控制逻辑。(1)主要性能:基于以太网的LED图文显示系统的设计①符合Eht二etn与正EE802.3,10BASES,10BASEZ,1B0ASET标准;②全双工,收发可同时达到10Mbps的速率,具有睡眠模式,可有效降低功耗;③内置16妞的SRAM,用于收发缓冲,降低对主处理器的速度要求;④支持8/16位数据总线,8个中断申请线以及16个FO基地址选择;⑤可自动检测UTP,AUI,BNC,还支持对IOBASET拓扑结构的自动极性修正;⑥TRL8019AS与主机有3种接口模式,即跳线模式、PPn模式、TR模式;⑦允许4个诊断LDE引脚可编程输出;⑧采用100脚的PQFp封装,缩小了PcB尺寸[3z]。(2)RTL8019AS内部寄存器和内部RAM的地址划分:表4.1RTL8019AS的内部寄存器表[33118一IFResetPortRTL8019AS的内部寄存器都是8位的,通过芯片管脚SAO一SA4可寻址犯个寄存器,地址为ooH一IFH,这些地址被映像到四个页:PAGEO,PAGEI,PAGEZ,PAGE3,由命令寄存器CR中的PSO和PSI位进行选择。前三页与NE2000的寄存器兼容,第四页是针对RTL8019AS特别定义的,对于其他兼容NEZ000的芯片无效。10-H17H是远程DMA地址,都可以用来做远程DMA端口,只要用其中的一个就可以了,用于复位的地址包括18H一IFH,8个地址中的每一个都可用于RTLSO19AS复位。寄存器表如表4.1所示。RTLSO19AS的内部RAM的大小是16K,地址从x0400o一x07月?af它是按页结构存储的,每256字节作为一页,因此16位的RAM的地址的高8位又叫页码,从页0x40到页xo7,f一
 
以太网LED图文显示系统的设计共有64页,这64页被用来接收和发送数据包用。一般把前面的12页用来存放发送的数据包,后面的52页用来存放接收的数据包。当然也可以配置成前面52页用来接收,而后面的12页用来发送。或者也可以不使用那么多的缓冲区,比如只用犯页来做为缓冲区,前面的6页用来发送,接下来的26页用来接收,而把空出来的32页给处理器使用,用来存储别的数据[34]。(3)本地DMA和远程DMA:要接收和发送数据包都必须读写RTLSO19AS的内部的16K的RAM,这个过程是通过DMA进行读和写的。网卡的内部RAM是一块双端口的16K字节的RAM。所谓双端口就是说有两套总线连结到该RAM,一套总线是网卡控制器读/写网卡上的RAM,另一套总线是处理器读/写网卡上的RAM。前者又叫本地DMA(LocalDMA),后者又叫远程图4.17远程和本地DMAFig.4.17RemotenadloealDMA图4.17中[32]虚线框住的部分为RemoteDMA,也就是处理器对网卡RAM进行读写的总线,对8019来说就是SIA总线。没有框住的部分(左边的部分),就是LoaclDMA,亦即网卡控制器对网卡RAM进行读写的总线。网卡控制器读写网卡RAML(ocalDMA)的优先级比处理器读写网卡RAM的优先级要高。优先级要高的意思是:①当两者都要请求控制总线时,LocalDMA优先获得控制权。②高优先级的LocalDMA可以中断RmeoteDMA,而RmeoteDMA不能中断LocalDMA。基于以太网的LED图文显示系统的设计③在RmeoteDMA,也就是处理器对网卡RAM读写的过程进行中可以被LocalDMA中断,LoealDMA中断了RemoteDMA,然后进行LoealDMA的数据传输,LoealD入IA传输完毕之后继续刚才被中断的RmeoteDMA,以完成RmeoteDMA的传输。(4)发送和接收数据包的过程:发送缓冲区的大小一般设置成至少两个最大数据包的长度,这样当一个包在发送时,另一个待发送的包已存入缓冲区,前一个包发完后,立即发送后一个包,这样就可以不间断的发送数据,提高效率。如果处理器要发送数据,那么通过写TPSR和TBCRI、TBCRZ以给出发送缓冲区首地址和数据包的长度,然后将待发送的数据通过远程DMA.存储到设定的区域中,最后启动发送命令,RTL8019AS会自动按照以太网协议完成数据的发送,发送过程中硬件进行CRC校验算法,发送完成后加发32位CRC校验码,同时置位中断状态寄存器的相应位,等待外部处理器进行进一步处理。图4.18接收缓冲区环Fig.4.18ReeeivingbueffrnrigRTL8019AS寄存器组中有一对寄存器PSTART、PSTOP,PSTART规定了接收缓冲区的起始页,与之对应PSTOP规定了接收缓冲区的终止页。同时还有两个重要的寄存器CU卫只、BNRY,CURR是写缓冲区的指针,指向可以写入的页。BNRY是读缓冲区的指针,指向已读取的最后一页。这四个寄存器组和之后,形成了一个接收缓冲区环,如图4.18所示[33】。网络上有数据到来时,通过本地DMA将数据读入接收缓冲环,指针CURR后移一页,然后通过远程DMA将接收缓冲环中的数据读入存储器中,指针BNRY亦后移一页,当然只有缓冲区中有数据才可以这样做。4.9.2以太网帧格式与收发帧格式大连理工大学硕士学位论文以太网协议不止一种,本文讨论的是灯C894中定义的以太网帧格式。它的帧结构如图4.19所示。物理信道上的收发操作均使用这个帧格式。其中,前导序列、帧起始位、CRC校验由硬件自动添加/删除,与上层软件无关。前导位RP}帧起始位DS}目的MAC地址AD}源MAC地址ASI类型YTPE62bitZbit48bit48bit16bit数数据域DATAAA填充PADDD校验FcSSS<二1500字节(46字节补032bitTYPE说明:0800IP包;0806ARP包;814CSMNP包;8137:IXP/SPX;小于0600H值用于IEEE802l随,表示数据包长度。DATA说明:DA+SA十TYPE二14字节+DATA二1514字节,即最大传输包长度<二1514PAD说明:最小包长度不小于60字节,最小DAAT长度46字节,不够的补O。图4.19RFC894以太网帧格式Fig.4.19R卫C894ehtemetrf即meofn加以t但经过8019处理过的数据包格式并不是以太网帧的真子集,而是如图.420所示。8019自动添加了“接收状态、下一页指针、以太网帧长度(以字节为单位)”三个数据(共4字节)。这些数据的引入方便了驱动程序的设计。接接受状态态下一页指针针以太网帧长度度目的MAC地址DAAA源MAC地址AAASsbitsbit16bit48bit48bit类类型竹PEEE数据域DATAAA填充PADDD校验FCSSS16bit(=1500字节可选32bit图4.20RTL8019接收包帧结构Fig.4,20rf田刀eofnnatofhteRTL8019AS’ereeivnigPacket发送数据包的格式是802.3帧的真子集,其前导序列、帧起始位、CRC校验在发送时由硬件自动添加。如图.421所示。目目的MAC地址AAAD源MAC地址SAAA类型TYEEEP数据域DATAAA填充PADDD校验CFSSS48bit48bit16bit数据域DATA<=1500字节可选32bit图4.21Fig..421r田neofnnatRTL8019发送包帧结构ofhteRTL8019AS’sendnigPaeket4.9.3RTL801gAS与以太网的接口基于以太网的LED图文显示系统的设计本设计中的以太网接口电路是以RTL8019AS芯片为核心的,LPC221O处理器是总线开放的,所以电路设计为16位总线方式对TRLSO19AS进行访问,即数据总线DO~D巧与芯片的SDO~SD巧连接,由于RTL8019AS的工作电源是SV而LPC2210的万O电压为3.3V,所以在总线上串接4700的保护电阻。砚T一ST一I为芯片的复位引脚,通过LPC2210的Po.12脚对其进行复位。创TJ无I为芯片的中断信号输出端,接到LPC2210的中断输入引脚EINI,2,当TRL8019AS产生中断时,通过此引脚告知处理器,以对中断事件进行响应并处理之。RTL8019AS芯片工作在跳线模式,其基地址为ox300,所以电路上的sA6、SA7、sA10~sA19均接地,sAg接电源。SAS与地址总线的A22相连,SAS与LPC2210的外部存储器Bar永3片选C3s相连,当SAS为l,SAS为0时,选中RTL8019AS芯片,即其操作地址为x083400000~x08340001F。以太网接口电路的电路图如图4.22所示。
 
以太网LED图文显示系统的设计5软件设计5.1基于LpC2210的L印图文显示屏控制器软件设计5.1,1LpC2210的控制器软件整体设计和启动代码嵌入式开发所使用的语言通常为汇编语言和C语言。汇编语言的代码生成效率很高,程序执行速度快,但是不同系列的处理器支持的汇编语言指令差别很大,程序的可读性和可移植性都较差、程序开发周期比较长。C语言则是比较通用的程序设计语言,既可用来编写计算机的系统程序,也可用来编写一般的应用程序。C程序最大的优点就是可读性强,移植性很好,但是与汇编语言相比,其代码生成效率要低10一20%。综合考虑,本设计采用C语言和汇编语言嵌套的方式。对时间有严格要求的任务切换函数、中断入口和出口程序采用汇编语言编写;而由于主程序实现功能较多,而且对时间要求不太严格,因此采用可读性和移植性很强的C语言编写。()l控制器软件的整体设计初初始化此/S0一工工、TCP/IPPP协协议栈栈创创建显示任务、接受网络图5.1显示屏控制部分总体软件框图Fig.5.1Softwarebloekdiagrmofhetsereen,eonrtoller首先对显示数据做一下介绍,它可分为两类,一类是固化在FLASH之中的固定数据,另一类是从上位机接收的存储于SDRAM之中的显示数据。固化的显示数据在开机时进行显示,直到LPC221O接收到上位机下载的显示数据之后,改为显示新收到的数据。安基于以太网的LED图文显示系统的设计排固化数据的显示,一方面在开机时不会出现显示空白,使显示屏具有一开就亮的效果,适应人们使用的心理状态,另一方面也便于脱开上位机进行维修。控制器软件的主要功能是接收上位机控制软件发送过来的显示数据及显示控制信息。应用软件部分首先建立了两个任务:TCP数据接收任务和显示屏显示任务。TCP数据接收任务不断的询问是否收到了新的显示数据,如果收到了,就将其存储到应用程序空间中;显示屏显示任务根据显示方式控制信号将显示数据区中的数据送到显示屏上显示。接收以太网数据采用的是中断方式,当控制器的网卡检测到上位机送给本显示屏的数据后,网卡产生中断信号,处理器获得此事件后,将接收到的数据存储起来,以方便应用程序的使用。显示屏控制部分的程序状态图如图5.1所示。(2)启动代码启动代码是芯片复位后进入C语言的manio函数前执行的一段代码,主要是为运行C语言程序提供基本的运行环境,如初始化外围部件、存储器系统等。因此启动代码的功能有点类似PC机中的BIOS和Vxwokrs中的Bootloader。由于飞利浦未提供该芯片的启动代码,所以需要自己编写启动代码。开开始始设设置存储器映射模式式初初始化部分引脚脚初初始化存储器加速模块块初初始化串口口初初始化实时时钟钟禁禁止相关中断断结结束束图5.2系统基本初始化TargeRtesentltiO流程图Fig.5.2Flowhcartofhtesyst咖atiebasieniitial九netionTargeRtesetli五to启动代码可以划分为五个文件:Startup.s、仅Q.s、stack.s、hePa.s和target.c。st叭Pu.s包含了异常向量表和系统初始化代码,写好之后一般无需改动;RIQ.s包含中断服务程大连理工大学硕士学位论文序与c程序的接口代码,可根据实际使用的中断情况进行少量修改;stac.ks和hepa.s保存C语言使用的堆和栈的开始位置;target.c包含目标板特殊的代码,包括异常处理程序和目标板初始化程序,可根据程序的需要修改。图5.2给出一个很重要的目标板初始化程序中的函数TgaretResethi(ti)的流程图,从中可以看出在进入maino函数前对系统进行的基本初始化工作的具体步骤。5.飞.ZR丁LSO1A9s网卡控制器的驱动程序设计LW正的网络驱动有一定的模型,/scrn/eti厂ethmeetif。文件即为驱动的模板,用户为自己的网络设备实现驱动时可以参照此模板。在Lw正中可以有多个网络接口,每个网络接口都对应了一个Sturctnetif,这个neti泡含了相应网络接口的属性、收发函数。LW护调用neti哟方法neti-f>iPnutO及neti-f>。Pututo进行以太网packet的收、发等操作。在驱动中主要做的,就是实现网络接口的收、发、初始化以及中断处理函数[35]。驱动程序工作在正协议模型的网络接口层,它提供给上层(正层)的接口函数如下:()l网卡初始化函数voidethemeti--fnilt(sUrtetnetif*netiD该函数对网络接口的属性、即表进行初始化设置,同时对网卡芯片RTL8019As进行一下复位和初始化工作。对网卡的操作过程如下:①使芯片处于停止模式,亦可延时10一20ms,以确保芯片进入停止模式。②设置中断屏蔽寄存器n姓R,屏蔽所有中断。③设置接收、发送缓冲区的范围,构造缓冲环,此过程通过设置寄存器TPSR、PSTART、PSTOP来实现。④初始化读缓冲环指针BNRY、写缓冲环指针CIJRR。⑤设置接收配置寄存器RCR、发送配置寄存器TCR、数据配置寄存器DCR。⑥设置多址寄存器MARO~MARS,一般设置为xooo,设置网卡地址寄存器PARO~PARS。⑦清除所有中断标志位,开启中断。CR二x022,启动芯片。(2)网卡接收数据函数voidehtmeeti--fiPnut(s加ctnetif*neti勺该函数从网络接口接收以太网数据包并把其中的正报文向正层发送。在中断方式下,由网卡sIR调用。该函数大致的实现过程如下:①关闭中断,接收数据时不允许中断介入,防止接收的数据被破坏。读取寄存器BNRY、CURR,利用这两个寄存器的值判断是否真的收到了数据,如果没有,返回,否则进行下面的步骤。②取出4个字节的8019首部,第一个字节表示接收的状态,第二个字节表示下一个包的指针,第三、四个字节表示接收包的长度。基于以太网的LED图文显示系统的设计③根据首部做一下判断,如果接收状态错误或者下一个包的指针错误或者接收包的长度大于1536,则不作接收处理,返回。如果没有错误,则继续往下进行。④写读页地址寄存器RSARO、RSARI,也就是缓冲环的写指针,表示从此处读取数据。写想要读取的字节数寄存器RSCRO、RSCRI。并将数据存储起来。⑤更新寄存器BNRY,打开中断,之后将接收到的数据交给上层协议处理。(3)网卡发送数据函数e几tehtemeti妙Putut(sturetnetif*neti,fsUrtetPbuf*P,s恤etiP一addr*Piadd)r该函数给正层传过来的PI报文加上以太网包头并通过网络接口发送。大致的实现过程如下:①根据上层传过来的数据*p,得到数据的长度。②写读页地址寄存器RSARO、RSARI,也就是缓冲环的写指针,表示从此处写入数据。写想要写入的字节数寄存器RSCRO、RSCRI。启动远程DMA,将数据存储起来。③终止远程DMA,设置要发送的页的起始地址,即发送页寄存器TPSR。④设置要发送的字节数寄存器TBCRO、TBCRI。启动发送命令,将数据发送出去。⑤检测发送状态寄存器TPSR,如果发送成功,则函数返回,否则重发,可以限制重发次数,例如不能大于6次。(4)网卡中断处理函数SIRvoidhet彻eti匀sr(void)当RTL8o19AS接收到数据或者发送完数据都会产生中断,处理器响应该中断,并进入中断处理函数,函数RTL8019ASJSRO实现中断处理,具体实现过程如下:①读取中断状态寄存器,如果芯片复位了或者接收溢出了,就重新初始化,调用函数ResetA刀dnliNtie()。②如果正确接收了一个数据包,则告知接收函数可以接收。如果接收的数据包有误,则丢弃接收到的包。③如果正确发送了一个数据包,则中断返回,否则,重发此数据包。以上的函数都可以分为协议栈本身的处理和对网络接口硬件的操作两部分,但硬件操作是对上层屏蔽的。5.1.3丁Cp接收、处理网络数据的任务Lw护提供了一些正式的API,这种API的实现实际上是在系统中单独建立了一个ctPip任务,由这个任务调用RAw妙I来处理网络通信,其他的网络任务都是利用消息机制与tPcPI任务通信来收发数据。可以看到这种好I只能用于多任务系统中。具体的好I函数分为两种,一种用来对收发的数据包nehtu哒行操作,nehtu屿Pbu卜一对应。另一
 
以太网LED图文显示系统的设计种用于netocnn的各种操作,netocnn是抽象化的网络连接。建立TCP接收、处理网络数据的任务需要的neteonn函数主要有netconn-pwe、neteom牡delete、neteonn--bnid、netconn-。onneet、neteonneslistne、neteom牡accPet、netconnjeev、neteom--iWnte和netconnclose。下面将分别介绍一下这些函数:s如etneetonn*neteonn‘pwe(nuxnenetcom--lt即et即e),建立一个新的连接数据结构,根据是要建立TCP还是UDP连接来选择参数值是砚TCONN一TCP还是N’ETC0阅火UCP。调用这个函数并不会建立连接并且没有数据被发送到网络中。voidneteom犯delete(s加etneteonn*eon)li,删除连接数据结构eonn,如果连接已经打开,调用这个函数将会关闭这个连接。流netconn少nid(surtetneteonn*eonn,s加et--Piaddr*addr,unsi,edshortpo)rt,为参数ocml指定的连接绑定本地正地址和TCP或UDP端口号。如果dadr参数为NIJLL则本地正地址由网络系统确定。intneteonn-connect(surtetneteomt*eo,mrs加eti--Pdadr*dadr,unsingedshortport),对UDP连接,该函数通过dadr和port参数设定发送的UDP消息要到达的远程主机的PI地址和端口号。对TcP,netocm七c0nnec()t函数打开与指定远程主机的连接。intneteonn‘listne(s加etnetconn*conn),使参数eonn指定的连接进入TCP监听(TepLISTNE)状态。sturetnetconn*n啡eonn-aee即t(usrtctneteonn*eonn),阻塞进程直至从远程主机发出的连接请求到达参数ocml指定的连接。这个连接必须处于监听(LISTEN)状态,因此在调用netocnn‘accPeot函数之前必须调用netocm--llistneo函数。与远程主机的连接建立后,函数返回新连接的结构。surtetne化uf*neteo翻几--reev(surtetneteonn*eom)l,阻塞进程,等待数据到达参数eonn指定的连接。如果连接已经被远程主机关闭,则返回NULL,其它情况,函数返回一个包含着接收到的数据的nbetuf。intneteonn二wnte(s恤etneteonn*eonn,void*data,intlne,皿51,edintflags),这个函数只用于TCP连接。它把data指针指向的数据放在属于ocnn连接的输出队列。eln参数指定数据的长度,这里对数据长度没有任何限制。这个函数不需要应用程序明确的分配缓冲区伪ueffsr),因为这由协议栈来负责。flgas参数有两种可能的状态,如下所示:#defineNETCONNNOCOPY0X00#defineNETCONNCOPYx001当nags值为NETcONN一COPY时,data指针指向的数据被复制到为这些数据分配的内部缓冲区。这就允许这些数据在函数调用后可以直接修改,但是这会在执行时间和内基于以太网的LED图文显示系统的设计存使用率方面降低效率。如果flgas值为砚TCO闻火NOCoPY,数据不会被复制而是直接使用data指针来引用。这些数据在函数调用后不能被修改,因为这些数据可能会被放在当前指定连接的重发队列,并且会在里面逗留一段不确定的时间。当要发送的数据在ROM中因而数据不可变时这很有用。如果需要更多的控制数据的修改,则可以联合使用复制和不复制数据。intnetco扭七close(sUcrttneteonn*conn),关闭参数conn指定的连接。在wL正中,所有t叩/ip协议栈都在一个进程当中,这样tPc/ip协议栈就和操作系统内核分开了。而应用层程序既可以是单独的进程也可以驻留在tPc/ip进程中。如果应用程序是单独的进程可以通过操作系统的邮箱、消息队列等和tPc/Pi进程进行通讯。如果应用层程序驻留tPc八p进程中,那应用层程序就利用内部回调函数口扭wa”)I和tPc/Pi协议栈通讯。对于环co/s一11来说进程就是一个系统任务。在LWPI的进程模型中,整个t叩n/i协议栈都在同一个任务(tPcI--Pthraed)中。应用层程序既可以是独立的任务,也可以在t叩i刀hraed中利用内部回调函数口扭wa妙D和tPc八p协议栈通讯。本设计中创建TCP任务的函数是这样的:osTaskcreatEextT(cPTas,k(void*)0,&TASKTC--Pstakc[499),TASKTCPeeP班O,TASKTCP‘D,&TASKTCP_staek[0],500,(void*)o,O);该函数创建了一个名字叫TCPTask的任务,并将其作为应用程序的一部分,该任务负责将网卡接收到的数据拷贝过来。上位机通过网络送过来的数据的主要部分是将要显示的数据,但是不只是这些,还包还一些控制信息,比如,控制显示屏的显示方式,使显示屏可以滚动显示、闪烁显示等。本设计中将数据包中的前四个字节定义为控制信息,从第四个字节之后才是需要显示的信息。因此该任务接收到网络信息后需要将控制信息和显示信息分开,之后将他们分别存储到两个全局的变量中。存储控制信息的变量叫c0NTRO--LsTYEL,TCPTask任务首先将接收到的数据的前四个字节取出来放到CoNTRO--LSTYLE中,然后将第四个字节之后的数据存到数组DIS--P32中,本设计中做的显示屏为32*32像素的,为了便于显示方式的控制,DslP_32定义成ulnt犯的具有32个字节的数组,如果显示屏的大小有变化,则需要根据实际情况大连理工大学硕士学位论文做一些变动。本设计中初步实现了闪烁显示、上移、下移、左移、右移、稳定显示六种显示方式,该任务的程序流程图如图5.3所示。到到DslPALL数组中中图5.3TCP数据接收任务的程序流程图Fig.5.3FlowehartofTCPdataereeivnig住巧k5.1.4显示任务程序设计本设计中使用了一路LPC2210的SPI口,SPI是一个全双工的同步串行接口,一个SPI总线可以连接多个主机和多个从机,但是在同一时刻只允许有一个主机操作总线。在数据的传输过程中,总线上只能有一个主机和一个从机通信。在一次数据传输中,主机总是向从机发送一个字节数据(主机通过Mosl输出数据),而从机也总是向主机发送一个字节数据(主机通过MISO接收数据)。SPI总线时钟总是由主机产生。SPI的引脚有四个:SCK、SSEL、MISO、MOSI。SCK是串行时钟,用于同步SPI接口间数据传输的时钟信号,它只有在数据传输时才被激活。SSEL为从机选择引脚,它是一个低有效信号,用于指示被选择参与数据传输的从机。在主SPI模式下,该信号基于以太网的LED图文显示系统的设计不能用作GPoI。MSIO是一个单向的信号,它将数据由从机传输到主机。当器件为从机时,串行数据从该端口输出。当器件为主机时,串行数据从该端口输入。当从机没有被选择时,将该信号输出为高阻态。MOSI也是一个单向的信号,它将数据从主机传输到从机。当器件为主机时,串行数据从该端口输出。当器件为从机时,串行数据从该端口输入。本设计中SCK作为时钟输入信号接到所有SN74LS595N的管脚SRCKL,MOSI作为第一个SN74LS595N的数据输入端。sPI功能模块有5个寄存器,表5.1为它们的简单描述[Jl。通过设置寄存器sPCR的相应位,将SPI设置为主模式,数据的移动方向为MSB(位7)在先。SPI发送数据使用的是下面的这个小函数:uintsMSneDdata(uintsdat)a{SOPDR=data;while(0=(SOPSR&x080));//等待SP正置位,即等待数据发送完毕ertum(SOPDR);表5.1SPI寄存器映射Tba.5.1称gisertmPaPngiofhetSPI访问复位值SPDRSPCCRSPINT描述SPI控制寄存器,该寄存器控制SPI的操作模式SPI状态寄存器,用于监视SPI功能模块的状态SPI数据寄存器,该双向寄存器为SPI提供发送和接收的数据。发送数据通过写该寄存器提供,SPI接收的数据可从该寄存器读出SPI时钟计数寄存器,用于设置计数器寄存器SPI中断标志寄存器,该寄存器包含了SPI接口的中断标志LPC2210的引脚连接模块使同一个引脚可以具有多种功能,即引脚复用,通过配置相关的寄存器P则SELO、P则SELI、P州SELZ控制多路开关来连接引脚与片内外设。SN74LS595N的锁存信号选择的是管脚P0.8,DM74LS161A的时钟信号选择的是管脚P0.22,DM74Ls16Al的数据载入信号选择的是管脚P.023,这三个管脚是通过引脚连接模块将其设置为通用FO口。创建显示任务DispTask的函数是:OsTaskCreateExtD(ispTask,(void*)o,
 
以太网LED图文显示系统的设计&TASKDISP--Satkc[499」,TASKDISP--P班O,TASKDISPesm,&TASKDIS--Pstakc[0],500,(void*)0,//&TaskUse]rData[TASK‘seeD],0);初始化SPI接口将CONTROL_S竹EL里的进行稳定显示右移么?进行右移显示图5.4显示任务DisTPask的程序流程图Fig.5.4FlowehartofdisPla贝ngastkDiPsTask该任务主要负责按照CONTROLSTYLE里存储的控制信息,转到相应的显示控制序中,对显示数据进行正确的显示。该任务的程序流程图如图5.4所示。.ZPc机的图文显示控制软件设计.1.1pC机控制软件的整体设计基于以太网的LED图文显示系统的设计PC端程序,也就是人机界面程序田Ml)。主界面如图5.5所示,软件采用了C什语言,在VC6.0下实现。PC端程序主要包括以下几方面的内容:汉字点阵字模生成程序、显示屏位图设计程序和TCP网络通信程序。汉字点阵字模生成程序主要负责将汉字或ASCn字符的字模信息提取出来,显示屏位图设计程序主要负责控制软件界面上左侧点阵显示的控制,TCP网络通信程序主要负责将得到的点阵信息通过网络送到显示屏上。图5.5显示屏远程控制软件Fig.5.5LongdistaneeconrtolsotfwareofhetdiPslayingseerne此软件的使用方法如下所述:在输入文本的文本框中输入用户想要显示的信息,然后在显示屏的正文本框中写入所要访问的LED显示屏的正地址,之后在显示方式的复选栏中选中所要进行显示的方式,最后点击显示按钮,这时就可以在显示屏上看到所要显示的信息。整个过程如图中所示。用户也可以在界面软件的点阵显示块处,直接画上需要显示的简单图形,然后送到显示屏上进行显示。另外,还可以点击界面上的打开位图按钮,选择一幅图片,点击显示按钮后,控制程序将这幅图片转换成黑白位图,然后进行显示。5.2.2汉字及As引l字符点阵字模信息生成大连理工大学硕士学位论文要将汉字和ASCn字符在显示屏上显示出来,那么我们必须得到它们的点阵信息,然后将这些点阵信息一对一的画在点阵显示屏上就可以了。那么这里的关键就是如何获得汉字和ASCn字符的点阵字模信息。我们知道中文版的DOS显示汉字的方式是在图形界面下画出汉字的,它们己经提供了现成的点阵字库文件。例如常用的16xl6点阵HZK16文件、ASC16,12‘12点阵HZK12文件等等,这些文件包括了GB2312字符集中的所有汉字和所有ASCn字符。现在只要弄清字符点阵在字库文件中的格式,就可以按照自己的意愿去显示汉字和ASCn字符了。下面以HZK16文件为例,分析取得汉字字模的方法。其它字库的字模信息提取方法与此类似。HZK16文件是按照GB2312一80标准,也就是通常所说的国标码或区位码的标准排列的。国标码分为94个区(sectofn),每个区94个位伊ostiino),所以也称为区位码。其中01一09区为符号、数字区,16~87区为汉字区。而10~15区、88~94区是空白区域。如何取得汉字的区位码呢?在计算机处理汉字和ASCn字符时,使每个ASCll字符占用1个字节,而一个汉字占用两个字节,其值称为汉字的内码。其中第一个字节的值为区号加上32(2OH),第二个字节的值为位号加上犯(2H0)。为了与ASCll字符区别开,表示汉字的两个字节的最高位都是1,也就是两个字节的值都又加上了128(80玛。这样,通过汉字的内码,就可以计算出汉字的区位码。具体算式如下:qh=Cl一32一125礼1一160,w=heZ一32一128=cZ一160或qh=C1一oxoa,wh=C2一oxao。hq、wh为汉字的区号和位号,。1、2c为汉字的第一字节和第二字节。根据区号和位号可以得到汉字字模在文件中的位置:locatio=n(94*(叻一1+)(Wh一1))*一个点阵字模的字节数。那么一个点阵字模究竟占用多少字节数呢?我们来分析一下汉字字模的具体排列方式。例如想要显示一个“汉”字,它使用16‘16点阵。字模中每一点使用一个二进制位(Bi)t表示,如果是1,则说明此处有点,若是0,则说明没有。这样,一个16x16点阵的汉字总共需要1*616/8=32个字节表示。字模的表示顺序为:先从左到右,再从上到下,也就是先画左上方的8个点,再是右上方的8个点,然后是第二行左边8个点,右边8个点,依此类推,画满16x16个点。对于其它点阵字库文件,则也是使用类似的方法进行显示。例如HZK12,但是HZK12文件的格式有些特别,如果你将它的字模当作1*212位计算的话,根本无法正常显示汉字。因为字库设计者为了使用的方便,字模每行的位数均补齐为8的整数倍,于是实际字库的位长度是16*l2,每个字模大小为24字节,虽然每行都多出了4位,但这4位都是0(不显示),并不影响显示效果。还有UcDos下的HZK24S(宋体)、HZK24K(楷体)或基于以太网的LED图文显示系统的设计HZK2H4(黑体)这些打印字库文件,每个字模占用24*24/8=72字节,不过这类大字模汉字库为了打印的方便,将字模都放倒了,所以在显示时要注意把横纵方向颠倒过来就可以了。取出32个字节,存储起来图5.6提取字模信息的程序流程Fig.5.6Flowehartofex位习ctingeharacertm曲认jnofn几ation这样我们就完全清楚了如何得到汉字的点阵字模,之后就可以在程序中随意的显示汉字和ASCn字符了。如果在程序中使用的汉字数目不多,也可以不必总是在程序里带上几百K的字库文件,也许你的程序才只有几十K。这样可以事先将所需要显示的汉字字模提取出来,放在另一个文件里,按照自己的顺序读取文件就可以了。本设计中只能显示汉字和ASCn字符,一个汉字占用32个字节,一个ASCll字符占用16个字节,用到的字库有HZK16、ASC16。取出来汉字或ASCn字符的点阵信息后将它们存储在一个数组中,以便网络通信程序将其发送到指定的显示屏上进行显示。提取子模信息,并将其存储起来的程序流程图如5.6。5.2.3控制软件界面点阵显示设计
 
以太网LED图文显示系统的设计为了使用户更直观的体验到显示信息在显示屏上的显示情况,本设计的控制软件部分将显示屏的形状在控制软件上形象的画了出来。用户在文本框中输入将要显示的信息之后,立即就可以在控制界面的这一部分显示出来,使用户对将要显示在显示屏上的信息有一个直观的认识。另外,用户还可以在界面中白色的圆点上单击,画出自己想象中的简单图形,进而在显示屏上进行显示。点击红色的圆点之后,相应的圆点会变成白色。如果不想一个点一个点这样画,那么本软件也实现了一个显示简单位图的功能,通过点击控制软件上的打开位图,选择一幅想要显示的图片,然后点击显示按钮,即可将这幅图片以黑白的方式显示出来。鼠标右键双击对话框,显示的内容会被清除。这部分内容的实现利用了对位图的操作,BMP图像文件格式是肠ocrostf为其Wnidows环境设置的标准图像格式。一个Wnidows的BMP位图实际上是一些和显示像素相对应的位阵列,它有两种类型:一种称之为GDI位图,另一种是DBI位图口eviec一hdi即nednetBimtPa)。GDI位图包含了一种和windows的GDI模块有关的Windows数据结构,该数据结构是与设备有关的,故此位图又称为DDB位图D(veeci一DPenedentBimtPa)。当用户的程序取得位图数据信息时,其位图显示方式视显示卡而定。由于GDI位图的这种设备依赖性,当位图通过网络传送到另一台PC,很可能就会出现问题。Dm是标准的Window位图格式,BMP文件包含了Dm比GDI位图有很多编程优势:例如它自带颜色信息,从而使调色板管理更加容易。且任何运行windows的机器都可以处理Dm,并通常以后缀为.BMP的文件形式被保存在磁盘中或作为资源存在于程序的EX卫或DLL文件中[36]。直接利用画图函数在对话框中将点阵信息画出来也可以,但是这样作的效果不是很好,画面的质量很差,而且当移动对话框时画面不停的闪烁。所以本设计采用了位图方式进行点阵信息的显示。本设计中在VC.6O的环境下利用C一编写了一个类CDbi,利用该类首先将背景位图载入到对话框中,由于点阵显示的点有两种颜色:白色和红色,所以本设计中又利用了白点和红点两个位图,并在程序初始化阶段将其载入,之后利用该类可以方便的对这三种位图进行各种操作,就如类CDib里的各个成员函数所示。关于位图操作的这一部分实现了以下功能,当从对话框中输入将要显示的汉子或(和)AScn字符后,通过点阵提取程序将它们的点阵信息提取出来,然后把它们显示出来,这时还可以通过鼠标左键点击使点阵中某一点变白或变红,以修改点阵信息。不仅如此,用户还可以直接在点阵上点击,画出任意的自己想要的图形。该功能用到的几个函数如下:基于以太网的LED图文显示系统的设计voidCCOmbniDe:gl:OhLButto瓦Down(UNITFnlgas,CPontiponti);该函数是鼠标左击事件的响应函数,其功能是将对话框上的点阵选为红色或者选为白色,它是通过修改点阵信息的数组实现的,该数组是一个全局变量,具体定义是:巩.Bodar田OARDeeL仆正少刃MBER」[BOARD--ROWJ几加田RE],BOARD一L仆正‘NU侧旧ER和BOARDesROWNIJMBER分别代表点阵的行和列的数目。vodiCCombinDe:gl:O证出uttoDnblCkIU(NITFnlgas,CPontiPonti);该函数是鼠标右键双击事件的响应函数,它的作用是将对话框中的信息清除,以便进行新的信息的输入,它是调用UPdateNewO来实现的。BoOLCCombniDelg::poinTotB哪pos(Cponitp,tCpoint&Ptstno)e;该函数是将鼠标点击位置的坐标转换成对话框中白色或红色位图的位置坐标。voidCCmobinDelg:二pu份哪B(YTEbyColo,rCpontiponti,CDC*DPC);该函数利用函数PoniTtBomPPosO转换后的坐标,将对应的位图显示出来。vodiCC0mbnieDgl::DiPsBmPO;该函数是控制界面上打开位图按钮的响应函数,它将一幅图片转换为黑白图片后,将其图像信息存储到数组几匕Bodar中,从而实现简单图像信息的显示。vodiCCombniDe:gl:UPdatNeweO;该函数将变量m--B。ard[1[]的所有值清零,以实现清屏的功能。5..24Pc机的网络通信程序设计(1)TCP/正建立连接的三次握手过程v[3]:第一次握手:建立连接时,客户端发送sny包(sny月)到服务器,并进入SYN二SEND状态,等待服务器确认;第二次握手:服务器收到sny包,必须确认客户的sny(ac目+1),同时自己也发送一个s皿包(s扣=k),即sny+ack包,此时服务器进入SYNRECv状态;第三次握手:客户端收到服务器的s”+ack包,向服务器发送确认包ack(aCk==k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。(2)客户机用及务器模式在TCP仰网络应用中,通信的两个进程相互作用的主要模式是客户机/服务器模式,即客户端向服务器发出请求,服务器接收到请求后提供相应的服务。客户机用及务器模式的建立基于以下两点:首先,建立网络的起因是网络中软、硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。其次,网间进程通信完全是异步的,相互通信的进程间既不存在父子大连理工大学硕士学位论文关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立一种联系,为二者的数据交换提供同步,这就是基于客户机/服务器模式的TCP胆。客户机/服务器模式在操作过程中采取的是主动请求方式:首先服务器方要启动,并根据请求提供相应服务:计算机网络是相互连接的独立自主的计算机的集合,最简单的网络形式由两台计算机组成。本设计实现了一种接入nItmeet网络的显示屏,通过在显示屏的控制器上实现TCP胆协议栈,可以将其看成一台接入网络的计算机。前文已经介绍了控制器上网络协议的实现,并且介绍了应用程序的编写方法,本节将介绍与其对应的PC上这部分程序的实现。①打开一通信通道并告知本地主机,它愿意在某一公认地址端口上(周知口,如h仰为80)接受客户请求。②等待客户请求到达该端口。③接收到重复服务请求,处理该请求并发送应答信号。接收并发服务请求,要激活一新进程来处理这个客户请求。新进程处理此客户请求,并不需要对其他请求做出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。④返回第二步,等待另外的客户请求⑤关闭服务器。客户方:①打开一通信通道,并连接到服务器所在主机的特定端口。②向服务器发出服务请求报文,等待并接收应答;继续提出请求。③请求结束后关闭通信通道并终止。从上面的描述过程可知:①客户与服务器进程的作用是非对称的,因此编码不同。②服务进程一般是先于客户请求启动的。只要系统运行,该进程一直存在,直到正常终止或者强迫终止。(3)WindowsSocket的实现WnidowsSockats是MierosotfWnidows的网络程序设计接口,它是从Be次eleySokcets扩展而来的,以动态连接库的形式提供给我们使用。WnidowsSokcets在继承了Bekrelyeoskcest主要特征的基础上,又对它进行了重要扩充。这些扩充主要是提供了一些异步函数,并增加了符合Wnidows消息驱动特性的网络事件异步选择机制。它为上层应用程序完成网络数据通讯,而不关心底层网络链路的通讯情况,真正实现了底层网络通讯对应用程序的透明。基于以太网的LED图文显示系统的设计oskcet编程中用到一个很重要的结构体sockdadi泣in,它用来指定一个连接到某一个Socke的本地或远端的终端地址。具体定义如下:sUrtctSokcadd--rin{shortsi--nafmily;刀地址族u‘shortsin夕ort;刀端口号s恤etniaddrsinaddr;刀正地址hcarsin-zeor[8];//一般填充。};同嵌入式协议栈Lw正一样,WindowsSocket也提供了一些接口函数,用于完成网络上主机之间的通讯[38]。下面将具体介绍这些函数:Sockeot调用返回一个整型oskcet描述符,你可以在后面的调用中使用它。一旦通过socket调用返回一个socket描述符,应该将该socket与本机上的一个端口相关联(往往当在设计服务器端程序时需要调用该函数。随后就可以在该端口监听服务请求;而客户端一般无须调用该函数)。bndio函数将oskceto建立的套接字与一个具体的端口联系起来。BndiO函数在成功被调用时返回O;遇到错误时返回“一1’’并将en刀0置为相应的错误号。另外要注意的是,当调用函数时,一般不要将端口号置为小于1024的值,因为1一1024是保留端口号,我们可以使用大于1024中任何一个没有被占用的端口号。ocmleeot函数用来与远端服务器建立一个TCP连接,遇到错误时返回一1,并且emr。中包含相应的错误码。进行客户端程序设计时无须调用。hindo,因为这种情况下只需知道目的机器的企地址,而客户通过哪个端口与服务器建立连接并不需要关心,内核会自动选择一个未被占用的端口供客户端来使用。slitneo用于监听是否有服务请求。在服务器端程序中,当oskcet与某一端口捆绑以后,就需要监听该端口,以便对到达的服务请求加以处理。当listne遇到错误时返回一1,emr。被置为相应的错误码。acc即0t用于连接端口的服务请求。当某个客户端试图与服务器监听的端口连接时,该连接请求将排队等待服务器accPe()t它。通过调用acc即()t函数为其建立一个连接,accPeot函数将返回一个新的socket描述符,来供这个新连接来使用。而服务器可以继续在以前的那个socket上监听,同时可以在新的socket描述符上进行数据sned()(发送)和recvo(接收)操作。esnd()和ercv()这两个函数是用于面向连接的socket上进行数据传输。
 
以太网LED图文显示系统的设计当所有的数据操作结束以后,调用closeo函数来释放该oskcet,从而停止在该:ocket上的任何数据操作。也可以调用shutdowno函数来关闭该socket。该函数允许你只停止在某个方向上的数据传输,而一个方向上的数据传输继续进行。如可以关闭某socket的写操作而允许继续在该socket上接受数据,直至读入所有数据。客户端和服务器端程序的建立过程如图5.7所示创建套接字S将S绑定到一个本地地址和端口上将S设置为监听模式,准备接收客户请求创建套接字等待客户请求的到来,到来后接受连接请求,并返回一个新的套接字向服务器发出连接请求用新的套接字和客户端进行通讯和服务器端进行通讯关闭套接字返回,等待另一客户请求图.5Fig.5.7Por服务器端和客户端程序孚知肛meofhtesevrernadhteelient5.3软件调试方法5,3,1测试p/cos一日移植代码当做完拼C/os一n的移植工作以后,紧接着的工作就是验证移植的拼/cOs一n是否能正常工作。首先,应该不加任何应用代码来测试移植好的拼C/OS一n也就是说首先测试内核自身的运行状况。测试内核可以采用以下的4个步骤:()l确保C编译器、汇编编译器及链接器正常工作;(2)验证OSTkasstkli五to和OSSt翻rtHi沙区d沁函数;(3)验证OSC饮Sw()函数;基于以太网的LED图文显示系统的设计(4)验证OSnItC饮SwO和OSTicklSRO函数;这四步完成后,就可以保证移植后拜C/Os一n是正常运行的,然后就可以加载用户程序T。5.3.2网络连接的测试本部分的测试中用到了一个网络分析软件EhteeralNwetokrAnalyzer,它是一款免费的网络协议分析程序,基本类似于tPcdu工np,具有设计完美的GUI和众多分类信息及过滤选项,支持Unix、Wnidows。借助这个程序,我们既可以直接从网络上抓取数据进行分析,也可以对由其他嗅探器抓取后保存在硬盘上的数据进行分析。还能交互式地浏览抓取到的数据包,查看每一个数据包的摘要和详细信息。Ehteeral有多种强大的特征,如支持几乎所有的协议、丰富的过滤语言、易于查看TCP会话经重构后的数据流等。图5.8UDP数据测试对话框Fig.5.8DialoUgeboxofUDPdatatest(1)UDP测试本测试中嵌入式系统的p设置为192.168.1.21,端口号设置为1028。上位机的正设置为192.168.1.20,端口号也设置为1028。在嵌入式系统中,为了验证嵌入式系统与nItmeet的连通性,在收到IJDP数据包的时候,会将接收到的数据回送给源机。具体的测试过程是这样的:在图5.8所示的UDP数据测试对话框的发送数据框中输入嵌入式系统的正,然后在其下面的文本框中输入测试数据wnag,点击发送按钮,在接收数据文本框中会相应的输出测试数据wnag。图5.9所示的为用EtherrealNewtokrAnalyzer捕获PC机和嵌入式系统之间交换的数据数据。从图上可以看出,使用的协议为1刃P,数据包中的数据为77616。67,它们分别是字母w,a,n,g的ASnC码。图中第三行表示的是PC机向嵌入式系统发送的数据,源地址是192.168.1.20,目的地址是192.168.1.21。图中的第四行表示的是嵌入式大连理工大学硕士学位论文系统向PC机返回的数据,源地址是192.168.1.21,目的地址是192.168.1.20。此数据验证了该嵌入式系统与nIte扭et己经连通,在传输协议为UDP时,具备了与nItmeet交换数据的功能。(2)TCP测试本文设计一个嵌入式W王B服务器,用于测试TCP协议是否正确运行,它使用的是HTTp超文本传输协议。因为系统的wL正协议栈是运行在环C/OS一H上面的,所以wEB服务器是作为拜005一n的一个任务存在的,由拜C/OS一n提供的任务创建系统函数OSTaskCreateO创建。图5.9PC机和嵌入式系统之间UDP数据交换Fig.5.9UDPdataexhcnagebe七万enePCnadembeddedsyestmHTTP服务器程序可以设计的很简单,因为HTTP的服务器端只是一个字符解析的协议,对客户端发送的请求进行字符解析、判断然后响应。本文主要是为了测试系统的网络连接,因此只是实现了对HTTPGET请求的响应,去掉了其它的功能[39][40]。首先需要把嵌入式系统接入到主机所在的网络,包括用网线连接,设置嵌入式系统和主机的护地址,子网掩码以及网关,使它们都在一个网段内。然后打开nIetmetExPlorer,在地址栏中输入,嵌入式系统的正地址:192.168.1.21。就可以得到简单的WEB网页,如图5.10所示。图5.n是用Ehterael对TCP网络数据抓包的结果。此数据基于以太网的比D图文显示系统的设计验证了该嵌入式系统与nItmeet己经连通,在传输协议为TCP时,具备了与htimeet交换数据的功能。图5.10嵌入式系统端的WEB服务器Fig.5.10认呢Bservernohete在bleddedsystem图5.11TCP数据的截取Fig.5.llCpautreofTCPdata5.3.3显示屏的调试
 
以太网LED图文显示系统的设计显示屏的调试主要是为了检验显示电路是否有问题,本设计是这样调试的:使用SPI口对显示屏电路进行送数,首先送过来满屏的“1”,然后送过来满屏的“0’’,如此闪烁进行显示。让显示屏闪烁显示,是为了防止LED通电时间过长,而缩短ELD的寿命。如果发现某些点在该点亮时却没有点亮,那么,该点的LED就坏掉了。图5.12是显示实际汉字时的图形,从图上可以看出显示屏电路正常工作。图5.12显示屏的显示结果Fig.5.12OuPtutofhteLEDseeren基于以太网的LED图文显示系统的设计结论本文按照预定的目标实现了一种可以接入互联网的LED图文显示屏,经测试能够正确的接收PC机传过来的数据,并进行显示,显示效果良好。本设计所作的工作主要有:()l考虑到LDE显示屏系统的整体速度和成本的情况下,本文选择了基于ARM核的32位微处理器LPC2210,操作系统选择的是开源的嵌入式操作系统拌C/OS一n。(2)设计了LED显示屏系统的控制器和显示屏体电路,为了检验设计的正确,做出了一个能显示4个汉字的32x32像素的显示屏。(3)本设计中的显示屏系统可以通过网口连接到nIt~上组成网络,并且可以由网络上的任意一台PC机进行实时控制。本设计在以下方面需要改进:()l本ELD显示系统只是可以显示文字和一些简单的黑白图片,因而该系统在图形图像方面需要在做些工作,使本系统可以显示立体、彩色图像。(2)在很多地方nItmeet还是没有覆盖到,在这些地方可以考虑采用无线通讯的方式。(3)基于嵌入式的数据库技术己经趋于成熟,在点阵显示系统中建立数据库,将会使点阵显示系统更方便更改显示数据、配置信息等。大连理工大学硕士学位论文参考文献【1]周立功.AMR嵌入式系统基础教程.北京:北京航空航天大学出版社,2005.1.[2]OliveV.05forembeddedsystems.MieroeletronieEngineeringVolume:54,Issue:1一2,Deeember,2000,PP.113一121.[3〕MullerburgM.SoftwareIntensiveEmbeddedSystems.InfomrationandSoftwareTeehnology,1999,41(14):979一984.【4〕探矽工作室.嵌入式系统开发圣经.中国青年出版社,2002:1.20.【5〕张小方,李向华.此/S0一H在仪器仪表中的应用.仪器仪表学报,2003:131一13.4【6]吕正,姚和军.发光二极管的发展现状与市场前景【J].现代计量测试.2002(3):8一11.【7]南京洛普公司LDE显示屏的检测方法【]J.现代显示.2001(1):11一1.2[8〕JenaJLabrosse.MieroC/05一11thereal一timekernel,seeondedition[M〕.Beijing:BeijingUniversityofAeronauties&AstronautiesPress,2003.【9]陈翌等.嵌入式软件开发技术.北京:国防工业出版社,2003.【10〕郑宗汉.实时系统软件基础.北京:清华大学出版社,2003.【11〕陈明计等.嵌入式实时操作系统SmanRTOS51原理及应用.北京:航空航天大学出版社,2003.〔12]毛德操等.嵌入式系统一采用公开源代码和StorngA朋/Xsacel处理器.浙江大学出版社.[13〕AdmaDunkels.DesignandImplementationoftheLwIPTCP/IPStaek,2001.[14]J.Postel,J.Reynolds.AStandardfortheTransmissionofIPData盯阴5overIEEE802Networks.RFC1042.InternetEngineeringTaskForee,February1988.[15]StevensW.R.TCP/IP1llustratedVol.1:TheProtoeols.AddisonWesley,1995.[16〕D.C.Sehmidt,T.Suda.Transportsystemarehiteetureforhigh一perfomraneeeonununieationsubsystem.IEEEonJournalonCo咖unieation,Vol.11no.41993.[17〕价IPI.9.3soureeeodes.http://www.sies.se/”adma/lwip/dwnoload.html.【18〕徐蓉萍,杨磊.开放式控制器的研究【J〕.自动化与仪表.2003(4):11一13.【19〕张广辉.基于交换式以太网的嵌入式控制系统【J〕.自动化仪表2003,24(6):5一7,【20]广州周立功单片机发展有限公司.HP工LPIS单片16/32位微控制器一LPC2210.【21]艾德才.微机原理与接口技术.北京:中国水利水电出版社,200.4[22]Addison一Wesley.NEXTSTEPGeneralReferenee:Release3,Volumes1andZ,1994.【23〕周立功等.AMR嵌入式系统试验教程(一).北京:北京航空航天大学出版社,2004.n.【24」OPNE一JTAG开发小组.AMRJATG调试原理.【25]邓明富.未来重要光源一发光二极管【J〕.物理通报.2003(7):47一48.【26」诸昌铃.LDE显示屏系统原理及工程技术〔M].成都电子科技大学出版社,2000.12.〔27〕TakahashiK,ete.FulleolorLEDdisplaypanelfabrieatedon8silieonmierorefleetor[J〕.IEEE(Cat.No.97HC36021),1997.【29〕周水清.ELD大屏幕信息发布技术与应用研究.武汉理工大学硕士学位论文,2002.基于以太网的LED图文显示系统的设计【3川张华,樊庆文等一种经济型大屏幕LDE显示系统〔J」.自动化信息.2002.1:25一2.6[31]Datasheet:Dua1P一ChannelEnhaneementModeMOSFTE,CME4953.[32]IwIP一ALightweightTCP/IPS七aek.http://~.sies.se/一adma/lwip/.[33]TRL8019ASDATASHEETREALTEKCorporation,2000.【34〕袁学文,庞辉,肖文华.以太网控制器RTL8019AS的原理与应用【J〕.电子质量.2003(5):108一110.〔35]葛用明,林继宝.嵌入式系以太网接口的设计.电子技术应用200.2[36〕DavidJ.Kruglinski,SeotWingo,GeorgeShepherd著,希望图书创作室译.ProgrammingMierosoftyisualc++6.0技术内幕(第五版).北京:北京希望电脑公司,2002.3,[37]RiehardW.Stevens.TCP/IPillustrated,volumel:theprotoeols[M].NewYork:Addison一Wesley,2002.[38]AdmaDunkels著,焦海波译.TCP/IP协议栈L,IP的设计与实现.【39]历鲁卫等.基于ARM嵌入式Web服务器的研究与设计.计算机工程设计,2004..5〔40〕BenthamJ.TCP/IPLeanWebServersfor助beddedSysteosM[〕.哪PBooksCo,2002.
 
以太网LED图文显示系统的设计部分显示任务代码voidDiPsTaskv(oid){untisij,one--row,disPwestemP;untisehnage,sena,timer,wtinkle,move:unit32disP-32temP,disP-mod叼emP;MSpi玩10://初始化sPI接口IOCLR=IOCLR}LS154一;IOCLR=IOCLR}LS154多;IOSE=TIOSET}LS154一A;IOSET=10SET}LS154一;Sc~;0刀行扫描增量time,0;//定时增量hcnage=氏刀上下移动显示增量move二o;//左右移动显示增量wti刊目e=ox氏//闪烁显示标志whlie(1){diPs--lntodeeetemP=CONTRO--LSTYEL;i和SIp‘UP一disp-n10d--eterrPl)//上移{ofr(i=O;i<16;i料){IOCLR=HC595es仁S;ofr(on--ero仁0;one一row<==1:oneJ0w++){i(f(i+noe一ow*16+ehnage)<32){disPee32temP=DISP少2[i+one--row*16+ehnage];}else{dis几32te哪=0;}ofro=3j>=oj一){disPesstemP=disP_32temP>>j*8;cr--vdata=MSenDdatad(isp一stemP);刀发送显示数据}}IOCLR=LS154esA;IOSET=IOSET!LS154se八;IOSET=HC595_CS;DelaNyS(l);IOCLR=oxcf3fi月王scna++;太网的LED图文显示系统的设计(sfcna>15)sean=0;IOCLR二LS154--B:IOCLR=LS154ar八;IOSE卜IOSET!LS154eeA;IOSE卜IOSET}LS154esB;}tlrner++;i(ftime>r=一25)刀增加上移增量的值{sean=0;time=r0;hc皿ge料;i(fehna罗>32){chnage=O;}berka;}}//ofr(i二0;i<16;i++)}//上移elsei(fDISp一ETF一disP一od--ete哪)//向左移动{ofr(i=0;i<16;i料){IOCLR=HC595夕S:ofr(one一ro二0;one一row<=l;one{di印_32ten1P=DISP一2[i+one一row*16]<=0;j一){dis--PstemP=diSP-32temP>>j*8:rc--vdata=MSneDdata(dis几ste娜)://发送显示数据IOCLR=LS154AIOSET二IOSET!LS巧4eeA;工大学硕士学位论文IOSET=HC595夕S:DelaNyS(1):IOCLR=oxcf3nn:;fscan+十;i(fsean>15){sean=0;IOCLR=LS154~B;IOCLR=LS154weA;IOSET=IOSET}LS154esA;IOSE=TIOSET}LS154eeB;}hmer十+;i(ftime>r=128)增加左移增量的值{scna=O;move十+;i(fmove>32){move=0;breka;}}//ofr(i=0;i<16;i料)}刀向左移动/彻hlleerutnr(0);
 
 
 
 
 
 
  • 上一篇资讯: 浅谈不孕症与子宫肌瘤
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师