异步通讯技术的分析、设计与实现-毕业论文_第1页
异步通讯技术的分析、设计与实现-毕业论文_第2页
异步通讯技术的分析、设计与实现-毕业论文_第3页
异步通讯技术的分析、设计与实现-毕业论文_第4页
异步通讯技术的分析、设计与实现-毕业论文_第5页
免费预览已结束,剩余51页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

厦门大学软件学院毕业论文异步通讯技术的分析、设计与实现本科毕业论文(科研训练、毕业设计)题 目:异步通讯技术的分析、设计与实现姓 名:学 院:软件学院系:专 业:软件工程年 级:学 号:指导教师(校内): 职称: 指导教师(校外): 职称: 年 月第56页-共56页摘 要异步串行口是一种最基本的通信接口,虽然异步串行通信受到传输距离和速率的限制,但由于它简单实用,至今仍然应用于各个领域之中。异步通讯卡作为路由器的一种常见扩展卡,使路由器实现了配置监控、Modem拨号、终端服务等多种扩展功能。文中通过对异步通信原理以及EIA-RS-232接口标准的分析,介绍了几种常见的异步通信模型。同时,对异步通讯卡的主要应用模型进行了深入浅出的介绍与分析。最后结合异步卡芯片TL16C752B的特性,通过对通用UART驱动框架的分析、设计与实现,详细介绍了如何在通用UART驱动框架上进行TL16C752B芯片驱动的设计、开发与测试。关键词: 异步 串行 RS-232 TL16C752B UARTAbstractAsynchronous Serial Interface is one of the most fundamental communication interfaces. Though asynchronous serial communication is restricted by the transferring distance and the rate, it still applies to various fields because it is simple. Asynchronous communication adapter is one kind of common expansion equipments of Router. It makes the Router can realize various extended functions such as data supervisory control, Modem dial-up, terminal service and so on. The paper analyzes the theory of the asynchronous communication and the interface standard of the EIA-RS-232, and introduces some common models of the asynchronous communication. And then it introduces and analyzes the main application models of asynchronous communication adapter. Finally, in light of characteristic of the TL16C752B, the paper introduces how to design, develop and test TL16C752B driver system on the generic framework of the UART driver through analyzing how to design and implement the generic framework of the UART driver. Key words: asynchronous serial RS-232 TL16C752B UART目录第一章 引言8第二章 异步通讯原理分析92.1 概述92.2 原理分析92.3 RS-232标准分析10第三章 异步卡应用模型分析143.1 设备监控和配置143.2 Modem拨号143.3 终端服务153.4 反向Telnet.16第四章 异步卡平台简介174.1 目标平台(RG-R3600)简介:174.2 RGNOS简介:174.3 开发语言184.4 开发环境18第五章 TL16C752B特征分析195.1 简介195.2 主要引脚195.3 寄存器205.4 寄存器映射表225.5 数据流控制模式23第六章 异步卡功能指标分析25第七章 通用UART驱动框架分析与设计267.1 框架的必要性267.2 框架总体结构267.3 框架全局数据结构287.4 框架接口说明297.5 各功能以及处理流程说明34第八章 异步卡芯片TL16C752B驱动总体设计378.1 硬件架构378.2 软件实现378.3 总体设计38第九章 异步卡芯片TL16C752B驱动详细设计399.1 数据结构399.2 编码设计39第十章 系统测试设计4610.1 测试连接图4610.2 速率测试4610.3 奇偶校验测试4610.4 数据位测试4710.5 停止位测试4710.6 接口流控测试47第十一章 系统运行结果48结论49致谢语50参考文献51附录52ContentsChapter 1 Introduction8Chapter 2 The Theory Of The Asynchronous Communication92.1 Summarize92.2 Theory Analysis92.3 RS-232 Standard10Chapter 3 Asynchronous Communication Adapters Application Models143.1 Supervise And Configure143.2 Modem Dial-Up143.3 Terminal Service153.4 Reverse Telnet16Chapter 4 Asynchronous Communication Adapters Platform174.1 Target Platform (RG-R3600)174.2 RGNOS Introduction174.3 Development Language184.4 Development Entironment18Chapter 5 TL16C752B Character Analysis195.1 Introduction195.2 Main Pin195.3 Registers205.4 Registers Mapping225.5 The Patterns Of Flow Control23Chapter 6 Requirement Analysis25Chapter 7 Generic Framework Of UART Driver267.1 Purpose267.2 The Architecture Of The Framework267.3 Global Data Structure287.4 Interface Provid By Framework297.5 Main Functions And Process Flow34Chapter 8 TL16C752B Driver Integrated Design378.1 Hardware Structure378.2 Software Implement378.3 Integrated Design38Chapter 9 TL16C752B Driver Detailed Design399.1 Data Structure399.2 Coding Design39Chapter 10 Testing Design4610.1 Connection Chart4610.2 Speed Testing4610.3 Parity Testing4610.4 Data Bits Testing4710.5 Stop Bit Testing4710.6 Flow Control Testing47Chapter 11 System Demonstration48Summary49Acknowledgement50References51Supplement52第一章 引言计算机是数字设备,采用二进制数字(位)表示数据,这样,从一台计算机通过网络向另一台计算机传输数据意味着通过传输介质发送位串。1 如果数据的各个有效位在导线上是逐位传输,如图1-1所示,这样的通信被称为串行的。图 1-1 串行通信示意图广义上说,若发送方在发送数据前无需与接收方协调,则这种通信称为异步的。这样,发送方在发送间歇可以等待任意长的时间,并且只要数据准备好,即可发送。接收方在数据到达时必须准备好接收数据。异步通信在网络通信中占据了重要的作用,路由器、交换机通过扩展异步通信卡,可以方便、简单地与多种设备,如PC、终端以及Modem等实现互连,从而实现配置监控,Modem拨号传输,终端服务、反向Telnet服务等重要功能。异步通信卡作为路由器一种不可或缺的扩展卡,其驱动系统的开发也变成了一项必需的工作。为了有效地控制成本,以有利于技术沉淀,我们在总结以往经验的基础上,提出并设计了通用UART驱动框架,框架实现了绝大部分芯片兼容的接口与方法。以后具体芯片驱动的开发便建立在框架之上,只需覆盖或修改框架中与具体芯片不兼容的函数与方法。从而使得添加或修改异步卡芯片驱动变得简单,达到了技术沉淀、成本控制的目的。第二章 异步通讯原理分析2.1 概述所谓异步通信,是指发送者和接收者之间不需要协调,发送者可以在任何时刻发送一个字符,并可在发送另一个字符前延迟任意长的时间。但是,一旦开始传输一个字符,发送方一次就将所有的位逐个地全部送出,在位与位之间没有延迟。接收者则只要数据到达,就可以接收数据。异步通信比较适合于像键盘等那些并不是经常有大量数据传送的设备,例如PC机的COM口就是采用异步通信方式。2.2 原理分析在异步通信中,发送方可以在任意时刻发送一个字符,当发送方不再发送数据时,它使导线处于负电压状态,而这代表位值为1(见下一节RS-232标准分析)。为了区分线路的空闲状态和一位真正的1,RS-232标准要求发送方在传输字符的各位之前先传输一位额外的0,这一附加位就是起始位。虽然在一个字符结束与下一个字符开始之间的空闲时间可以持续任意长,但发送方必须使线路保持空闲状态至少达到某一最小时间,通常所选定的最小时间就是传输一位所需的时间。这样,人们可以认为在每个字符后面总是跟有一位1。在RS-232术语中,这一位称为停止位。1串行通信标准允许传输字符的长度不同,通常允许的字符宽度为58比特。数据位被传输时从字符的最低有效位开始传输。2奇偶校验是检验正在传输的数据是否被正确接收的一种方法。发送设备将根据数据位的内容附加一个0或1,接收设备检查奇偶校验位是否还保持原来的正确关系。如果不正确,则代表传输过程中发生了错误。奇偶校验一般有偶校验、奇校验等方式。偶校验,意指数据位中的1的个数加上奇偶校验位(0或1),使1的总数为偶数。奇校验,意指数据位中1的个数加上奇偶校验位,使其1的总数为奇数。2波特率,传输硬件的工作速率,也就是每秒钟硬件产生的电信号变化的次数。对简单的RS-232模式来说,波特率就等于每秒钟传输的位数。1在了解异步通信的基本概念后,介绍其工作原理如下:发送端:发送器在任意时刻发送一个字符。从起始位开始,起始位为0,接着是58比特的数据,接着可以跟着1比特的奇/偶校验位,也可以没有,紧跟其后为1或1.5或2位停止位。接收端:当字符的第一位(起始位)到达时,接收器根据传输速率启动一个计时器,并且使用该计时器定时测量每一个后续位的电压。发送器与接收器必须保证每一位上的电压维持时间完全一致,并且使用相同的速率。速率的选择可以有硬件设置、软件设置以及自动检测。如图2-1所示的波形图说明了在用RS-232传输一个字符时导线上的电压是如何变化的。虽然例子中所显示的字符仅包含7位,RS-232在传输中增加了起始位和终止位,这样整个传输需要9位。1图 2-1 串行通信电压示意图2.3 RS-2323标准分析在数据通信中,通常将数据终端设备简称为DTE(Data Terminal Equipment),而将数据通信设备简称为DCE(Data Communication Equipment)。DTE是具有一定数据处理能力以及发送和接收数据能力的设备,而DCE的主要作用是在DTE和传输线路之间提供信号变换和实现编码功能,并且负责建立、保持和释放数据链路的连接。DTE可以是计算机或终端,也可以是各种I/O设备,而与模拟话路相连接的调制解调器(Modem)则是典型的DCE。4为了使不同制造厂家的设备能够互相兼容,美国EIA(电子工业联合会)与BELL 等公司一起于1969 年制订了RS-232-C 标准。标准对串行通信接口的相关问题,如信号线功能、电气特性等都作了明确规定。RS-232标准涉及的是DTE与DCE之间的连接规定,其中所提到的“发送”和“接收”,都是站在DTE的立场上来定义的。2.3.1 电气特性3RS-232采用负逻辑,逻辑0相当于对信号地有+3+15V的电压,逻辑1相当于对信号地有-3 -15V 的电压。逻辑0相当于数据线的0(Space)或控制线的“接通”状态,逻辑1相当于数据线的1(Mask)或控制线的“断开”状态。在通信速率低于20Kb/s,直接连接的情况下,RS-232允许的最大传输距离为15米。2.3.2 接口信号简介RS-232使用的连接器包括DB-25、DB-15、和DB-9等几种类型5,不同类型连接器使用的引脚定义也各不相同。目前,个人计算机配备的RS-232连接器通常为DB-9,其接口如图2-2所示:图 2-2 PC机DB9串口连接器示意图RS-232串行口信号分为传送信号、联络信号、信号地三类。具体如表格2-1所示:表格 2-1 接口信号编号接口信号名称信号方向1Data carrier detection(DCD)DCEDTE2Received data(RXD)DCEDTE 3Transmitted data(TXD)DTEDCE 4Data Terminal Ready(DTR)DTEDCE 5Ground6Data Set Ready(DSR)DCEDTE7Request to send(RTS)DTEDCE8Clear to send(CTS)DCEDTE9Ringing(RI)DCEDTE(1) 联络信号:数据装置准备好(DSR):有效时表明DCE可以使用。数据终端准备好(DTR):有效时表明DTE可以使用。请求发送(RTS):当DTE要发送数据时,使该信号有效,向DCE请求发送。它用来控制DCE是否要进入发送状态。允许发送(CTS):用来表示DCE准备好接收DTE发来的数据,是对RTS 的响应信号。数据载波检出(DCD):用来表示DCE 已接通通信链路,告知DTE 准备接收数据。当本地的DCE收到由通信链路另一端(远地)的DCE送来的载波信号时,使DCD 信号有效,通知DTE准备接收数据,DCE将接收到的载波信号解调成数字信号后,沿接收数据线RxD 送到终端。振铃指示(RI):当DCE收到交换台送来的振铃呼叫信号时,使该信号有效,通知DTE,已被呼叫。(2)数据发送与接收线:发送数据(TxD):通过TxD,终端将串行数据发送到DCE。接收数据(RxD):通过RxD,终端接收从DCE 发来的串行数据。(3)信号地为相连的DTE和DCE提供统一的电势参考点。【说明】DSR/DTR有时连到电源上,一上电就立即有效。这两个设备状态信号有效,只表示设备本身可用,并不说明通信链路可以通信。RTS/CTS 请求应答联络信号是用于半双工Modem系统中发送方式和接收方式之间的切换。在全双工系统中,因配置双向通道,故不需要RTS/CTS 联络信号,使其总是有效。2.3.3 通信模型(1) 采用Modem和电话网进行远距离通信,如图2-3所示:图 2-3 Modem公网远距离通信首先,通过电话机拔号呼叫对方,电话交换台向对方发出拔号呼叫信号,当对方DCE收到该信号后,使RI(振铃信号)有效,通知DTE,已被呼叫。当对方“摘机”后,两方建立了通信链路。若计算机要发送数据至对方,首先通过接口电路发出RTS信号。此时,若DCE(Modem)允许传送,则向DTE响应CTS信号。当DTE获得CTS信号后,通过TxD线向DCE发送串行信号,DCE(Modem)将这些数字信号调制成模拟信号(又称载波信号),传送给对方。当对方的DCE收到载波信号后,向其DTE发出DCD信号,通知其DTE准备接收数据,同时,将载波信号解调为数字信号,从RxD线上送给DTE。(2)采用专用电话线连接,如图2-4所示:由于线路是专有的,所以此时不需要电话机RI信号和DTR信号,可以认为DTE始终是准备好的,两个MODEM始终是连接好的。图 2-4 Modem专线远距离通信(3)使用三线制进行近距离连接(无Modem)图2-5 是零Modem最简单连接方式(即三线连接),图中的2号线(RXD)与3号线(TXD)交叉连接是因为在直连方式下,把通信双方都作为数据终端设备,双方可发也可收。在这种方式下,通信双方的任何一方,只要请求发送(RTS和DTR有效)就能开始发送和接收。图 2-5 无Modem连接第三章 异步卡应用模型分析路由器通过扩展异步通信卡,可以方便、简单地与多种设备,如PC、终端以及Modem等互连,从而实现配置监控,Modem拨号传输,终端服务、反向Telnet服务等重要的扩展服务。3.1 设备监控和配置终端设备(或者PC终端软件)通过异步口和被监控设备相连,异步口用于传输终端和设备之间的监控和配置信息:被监控设备发送的监控信息通过异步口传输到终端上显示,同时从终端输入的配置信息通过异步口传输到被监控设备,应用模型如图3-1所示:图 3-1设备监控和配置模型3.2 Modem拨号路由器通过异步口与Modem相连,Modem拨号连接电信网。主要有两种应用模式: Internet接入:直接通过Modem拨号上网,如图3-2所示; Modem备份线路:通过主线路(比如以太网)连接上网,同时通过Modem连接。这种模式一般用于在主线路出故障的情况下,通过Modem拨号连接上网。此种情况需要路由器在自动检测到主线路断路时,主动进行Modem拨号,并切换到备份线路进行通讯,当主线路恢复时,又主动切换成主线路进行通讯。应用模型如图3-3所示。图 3-2 Internet接入模型图 3-3 Modem备份拨号3.3 终端服务终端服务即只把该程序的用户界面传给客户机,客户机返回键盘和鼠标操作,交由服务器处理。每个用户都只能登录并看到它们自己的会话,这些会话由服务器操作系统透明地进行管理,而且与任何其他客户机会话无关。在终端服务应用模型下,路由器作为终端服务客户端,通过异步卡连接若干终端设备,然后通过WAN连接到异地Unix服务器。应用模型如图3-4所示。图 3-4 终端服务3.4 反向Telnet.反向Telnet是说先Telnet到一台设备(路由器)上,然后再从这台设备通过异步口连接到其他设备上。如果路由器有多个异步口的话,那就可以达到一台设备监控N台设备的目的。应用模型如图3-5:图 3-5 反向Telnet第四章 异步卡平台简介4.1 目标平台(RG-R3600)简介:图 4-1 RG-R3600 路由器RG-R3600系列模块化中心路由器是锐捷网络公司开发的面向企业级的网络产品,采用模块化设计,提供了多个网络/语音模块插槽,支持种类丰富、功能齐全、高密度的网络/语音模块,可实现更多的组合应用。64位的微处理器技术,使用RGNOS(锐捷网络操作系统平台),提供了极其丰富的软件特性,支持哑终端接入服务,支持IPv4/IPv6,VOIP特性等,提供丰富的备份方案及QOS特性;硬件采用模块化结构,具有更高的处理能力和更大的接入密度,既可以在中小型企业网中担当核心路由器,也可以在大型网络中担当汇聚层路由器。适合大中型企业、金融体系、各大公司的办事处和中型Internet 服务供应商的模块化多服务访问平台,可以实现大规模、高密度的专线、拨号、宽带和IP语音接入。4.2 RGNOS简介:RGNOS(Red Gaint Net Operating System),是锐捷网络系列路由器和交换机的网络操作系统平台,是锐捷网络有限公司拥有完全自主知识产权的网络操作系统,可以运行在多种硬件平台之上,并拥有一致的网络界面、用户界面和管理界面,为用户提供了灵活丰富的应用解决方案,并提供了多种灵活方便的升级途径。RGNOS主要特点: 多线程、固定优先级、可抢占、有时间片方式; 优先级仅为核心态和用户态两种; 多线程共享同一个线性地址空间; 线程间通信机制为消息队列、事件组,同步机制为信号量。4.3 开发语言C语言。4.4 开发环境Cygwin下的ppc-eabi-gcc交叉编译器。Cygwin是一个运行于Windows下的Linux模拟环境。它由两部分组成: 一个封装了Linux API功能的DLL文件 (cygwin1.dll) ; 一套模拟Linux环境的工具。 第五章 TL16C752B特征分析65.1 简介TL16C752B是Texas Instruments Incorporated(TI)公司推出的新型UART(Universal Asynchronous Receiver/Transmitters)收发器,每个TL16C752B支持两个异步口,一个异步卡有4个TL16C752B 芯片,支持8个异步口,该器件的主要特点如下:(1)引脚和ST16C2550兼容,内置两套UART系统,可独立工作;(2)最高波特率可以达到1.5Mbps(使用24Mhz晶体时)或3Mbps(使用48MHz振荡器);(3)具有64字节发送/接收FIFO。收/发FIFO的触发等级可通过软件编程实现;(4)具有两种流控制模式:其中软件流控制模式可通过编程Xon/Xoff字符来实现;而硬件流控制模式则可通过设置RTS和CTS引脚及相应的寄存器来实现;(5)波特率可编程;(6)可编程下列串行数据格式:58位数据位;数据奇偶校验或者无校验;1、1.5、2比特停止位。5.2 主要引脚TL16C752B芯片引脚图如图5-1所示:图 5-1 TL16C752B引脚封装图TL16C752B芯片主要引脚含义说明如表格5-1所示:表格 5-1 TL16C752B引脚简介引脚输入/输出有效电平说明A0A2输入通过这几个引脚、读写信号IOR和IOW以及某些特定寄存器的值可以访问及设定片内寄存器。D0D7双向数据线,D0为最低有效位。CSA、CSB输入低电平两套UART的片选信号。TXA/RXATXB/RXB分别表示发送和接收的数据端口。INTA/INTB输出高电平中断信号RESET输入高电平芯片复位信号,电平有效时将复位所有内部寄存器以及输出。XIN/XOUT时钟输入输出信号GND信号地线IOR输入低电平当电平从高变到低时,CPU将会从地址总线指定的内部寄存器读取数据;IOW输入低电平当电平从低变到高时,CPU将通过数据线写数据到地址线以及片选信号指定的内部寄存器。5.3 寄存器TL16C752B共有20个内部寄存器,比较重要的有如下几个:5.3.1 FCRFIFO控制寄存器(FIFO control register),只写寄存器,用来使能FIFOs,清空FIFOs,设置发送和接收的触发等级,选择DMA信号类型。(这里的DMA只是一个名称,不是 “直接存储器访问”)5.3.2 LCR线路控制寄存器(Line control register),控制数据通信的格式:数据位数,停止位数、奇偶校验的类型。5.3.3 LSR线路状态寄存器(Line status register),通过读取该寄存器的信息可以知道FIFO里还有没数据,有没溢出错误以及奇偶校验错误等信息。5.3.4 MCRModem控制寄存器(Modem control register),控制与Modem设备连接的接口。5.3.5 MSRModem状态寄存器(Modem status register),保存了Modem当前状态信息。同时也指示了Modem的控制输入什么时候改变状态。5.3.6 IER中断使能寄存器(Interrupt enable register),该寄存器使能六种中断类型:接收错误、RHR中断、THR中断、Xoff接收、CTS/RTS的电平从低到高。当中断产生时,INT输出信号将会变有效。5.3.7 IIR中断标示寄存器(Interrupt identification register),只读寄存器,按优先级的方式提供中断源。5.3.8 EFR增强功能寄存器(Enhanced feature register),使UART的增强功能生效,或使UART增强功能失效5.3.9 TCR传输控制寄存器(transmission control register),用来存储接收FIFO水线,以启动/停止发送。(有使用硬件流控或软件流控时)。5.3.10 TLR触发等级寄存器(trigger level register),保存了用于DMA以及接收FIFO、发送FIFO的中断触发等级。触发等级从4到60,间隔为4。5.3.11 FIFO RDYFIFO状态寄存器(FIFO ready register),提供接收和发送FIFO的实时状态。5.4 寄存器映射表在RG NOS中,内存空间与IO空间共用一个线性地址,其低地址作为内存空间,高地址作为IO空间。当异步卡与路由器相连后,路由器主机系统会为每个异步卡芯片上的每个UART端口分配一个基地址。由于TL16C752B内置两套可独立工作的UART系统,所以寄存器地址的映射是通过基地址、片选信号(CSA/CSB)、地址线A0A2、以及IOR/IOW信号来实现的。具体映射如表格5-2所示:【说明】7“*” 表示仅当LCR的第7位为1时,访问DLL/DLH。“*”表示仅当LCR为0xBF时,访问EFR以及Xon1/2,Xoff1/2。“+”表示当EFR4为,且MCR6为1时,访问TCR/TLR。“+”表示当片选信号有效、MCR2为1且处于非闭环模式时,访问FIFO RDY。此外,对于MCR7,只有当EFR4为1时才可以更改。在上述说明中,表示该寄存器的第几位,从0开始计数。表格 5-2 TL16C752B寄存器映射A2A1A0读模式写模式000接收保持寄存器(RHR)发送保持寄存器(THR)001中断使能寄存器(IER)IER010中断标示寄存器(IIR)FIFO控制寄存器(FCR)011线路控制寄存器(LCR)LCR100Modem控制寄存器(MCR)MCR101线路状态寄存器(LSR)LSR110Modem状态寄存器(MSR)MSR111临时寄存器(SPR)SPR001*除数锁存高位(DLH)DLH010*增强功能寄存器(EFR)EFR100*Xon-1字符值Xon-1字符值101*Xon-2字符值Xon-2字符值110* Xoff-1字符值Xoff-1字符值111* Xoff-2字符值Xoff-2字符值111+传输控制寄存器(TCR)TCR110+触发等级寄存器(TLR)TLR111+FIFO状态寄存器(FIFO RDY)FIFO RDY5.5 数据流控制模式TL16C752B有2种工作流控制模式:硬件流控制和软件流控制。使用前者可降低软件消耗,通过RTS和CTS引脚的硬件连接可实现自动控制串行数据流,从而提高系统的有效性;后者则通过使用可编程的Xon/Xoff字符来自动控制数据传输。5.5.1 硬件流控当接收方发现接收FIFO 中的数据超过一定数目后(接收水线可以设置),它就将设置RTS设置成无效状态(高电平),RTS连接到对端的CTS,当发送方检测到CTS无效时就要停止发送。当接收方判断FIFO中的数据被接收后,重新置RTS有效(低电平),发送方检测到CTS有效后可以继续发送下一个字节。RTS/CTS流控可以通过软控制,也可以通过芯片根据自己FIFO水线的设置,自动实现流控。5.5.2 软件流控Xon/Xoff软流控的方式和过程同RTS/CTS流控,也是接收方启动流控(通过发送一个Xoff字符给发送方),发送方接收到对端的Xoff字符后停止发送,等待对方的Xon字符后才重新开始发送,Xon/Xoff流控模式只用于传输字符的模式,因为如果传输的是二进制数据,那么真正的数据和Xon/Xoff就无法区分,而可见字符只占用0255某个字段,其他不可见字符都可以作为Xon/Xoff流控字符,芯片是可以设置的。Xon/Xoff流控有一个缺陷:流控字符可能会丢失,比如接收方发送了Xoff字符,并且发送方也接收到该字符并且停止发送。当接收方重新要求发送方发送数据时,发送的Xon字符可能由于线缆插拔,或者接口复位导致Xon没有传到发送方,这时发送方便永远无法启动发送。可行的解决办法就是如果配置为软件流控,那么只要芯片被复位,都会主动发送一个Xon字符。软件流控制模式的使能可通过EFR和MCR这2个寄存器来实现。不同流模式的组合如表格5-3所列(可通过设定EFR的低4位实现)。表格 5-3 软件流控模式(EFR0:3)BIT3BIT2BIT1BIT0TX、RX软件流控组合模式00XX无发送流控制10XX发送Xon1,Xoff101XX发送Xon2,Xoff211XX发送Xon1,Xoff1,Xon2,Xoff2BIT3BIT2BIT1BIT0TX、RX软件流控组合模式XX00无接收流控制XX10接收器比较Xon1,Xoff1XX01接收器比较Xon2,Xoff21011发送Xon1,Xoff1,接收器比较Xon1,Xoff1;Xon2,Xoff20111发送Xon2,Xoff2,接收器比较Xon1,Xoff1;Xon2,Xoff21111发送Xon1,Xoff1;Xon2,Xoff2接收器比较Xon1,Xoff1;Xon2,Xoff20011无发送流控接收器比较Xon1,Xoff1;Xon2,Xoff2第六章 异步卡功能指标分析结合第三章对异步卡应用模型的分析,我们比较容易分析出异步卡所需要具备的基本功能:8(1)支持速率配置,配置范围为:9600-115200 bps;(2)数据位可配置,支持5、6、7、8位;(3)停止位可配置,支持1位、1.5位或2位;(4)支持数据流硬件控制,可通过设置RTS和CTS引脚及相应的寄存器来实现;(5)支持数据流软件控制,可通过编程XonXoff字符来实现。第七章 通用UART驱动框架分析与设计7.1 框架的必要性8通用UART9(Universal Asynchronous Receiver/Transmitters)驱动框架旨在建立UART驱动的设计模式。UART驱动框架好比面向对象设计中父类的概念,而具体芯片的驱动则好比子类。框架提供了UART驱动通用的函数以及接口,尽量兼容各种类型的芯片。对特定芯片驱动的开发只需覆盖框架中相对应的函数即可。离开UART框架,我们只能针对某款产品进行驱动的开发、测试,因此通常只考虑其可用性,并没有考虑到通用性。在发生多款产品使用同种芯片的时候,要么重新写一套驱动;要么在原来代码上修改以适应新的平台。这样做一方面增加了开发和维护的成本;另一方面不利于技术的沉淀,每次修改旧的代码可能需要对原代码进行改动,而这些改动都可能带来新的问题。UART是每个产品都需要使用的,而且市面上的UART芯片基本上都是16C2550兼容的芯片,所以UART这类产品在编写驱动的时候有很多的共性。通过对这些共性的整理,我们设计了UART驱动框架,使今后的UART驱动开发在这个框架内进行,新增驱动的代码更加简洁,编写新的驱动不需要修改旧驱动的任何代码。7.2 框架总体结构7.2.1 与外部模块的关联TTY层是UART驱动的封装层,上层协议以及应用程序通过TTY接口层调用UART驱动。UART驱动与其是直接关联的。UART驱动在处理发送中断时会读取TTY缓冲区中的数据,将其写到串口。在处理接收中断时会获取串口的数据,将其写入TTY的缓冲区。同时,TTY也可以调用UART驱动提供的函数接口将TTY缓冲区中的数据写入到串口。应用程序可以调用_puts(),_putc()函数来直接将数据写入串口,调用_getc()从串口获取一个字符。UART驱动提供了初始化函数供操作系统(OS)调用来初始化UART,如图7-1所示:图 7-1 UART驱动与外部的关联7.2.2 框架结构UART驱动划分为三个子模块,分别为主板资源模块,驱动框架模块,芯片驱动模块。如图7-2所示:图 7-2 通用UART驱动框架主板资源模块:它是由一些资源描述结构组成,一个资源描述结构对应着一个UART端口。这些资源结构组成了特定设备的UART端口的资源情况,如UART芯片型号、中断号、中断方式、基地址、晶振等信息。这些信息是由特定的硬件决定的。每个产品都需要独立编写一份描述本产品UART硬件情况的资源文件。UART驱动框架:UART驱动框架在系统中是唯一的,定义了所有的UART操作、接口的通用行为。在这里为所有的UART驱动定义了一套基于16C2550芯片兼容的操作方法。对于和16C2550兼容的芯片可以直接使用驱动框架提供的方法。芯片驱动:针对特定芯片书写的芯片驱动,用于覆盖非框架兼容的方法,每款芯片都有自己的驱动程序,如果完全和框架提供的方法兼容,则可以省略该驱动的所有方法。7.2.3 框架下的开发模式(1)增加一款新的产品,UART芯片驱动已经存在。只需要编写该产品的资源文件,描述该产品上有多少个UART端口,每个端口对应的芯片型号是什么、时钟频率多少等信息就可以了。(2)增加一款新的产品,UART芯片驱动不存在。需要首先检查该款芯片在驱动编写上与通用16C2550有何不同,将不同之处按照框架的接口重新写一个方法将其替代,然后再编写该产品的资源文件。7.3 框架全局数据结构7.3.1 结构定义8系统中定义了两个全局的结构:(详细定义见附录) UART芯片信息结构(uart_chip_t),里面保存了芯片相关的数据和函数指针,每个结构变量对应一种UART芯片。 UART端口信息结构(uart_port_t),里面保存了端口的数据,每个结构变量对应一个UART端口。7.3.2 主要数据结构之间的关系UART芯片信息结构与芯片一一对应。UART端口信息结构与串口一一对应,每个串口属于一种芯片,它成员变量 chip 指向它所属的芯片。异步卡子系统初始化时,会将UART端口信息结构和TTY结构建立联系,每个UART端口对应一个TTY。UART端口结构成员tty指向其对应的TTY结构,而TTY结构的成员regarea指向其对应的UART端口结构。这些数据结构的简单关系如图7-3所示:图 7-3 数据结构关系7.4 框架接口说明7.4.1 操作系统接口这些函数是UART驱动初始化函数,在操作系统初始化时被调用。(1) uart_init【功能说明】系统的控制台串口初始化,在关串口中断的状态下初始化控制台口和辅口。这个函数是供平台初始化时使用,用来启动控制台,使得_puts()和_getc(),_putc()函数能够使用,作为调试用。【原型】int uart_init(uint baud_rate);【输入参数】baud_rate波特率(无符号整型)。【返回值】0表示初始化成功,其它值表示失败。【主要处理】根据输入的波特率来初始化串口,使用无奇偶校验,8个数据位,1个停止位,无流控的默认方式初始化。【函数的运行要求】:此函数在系统初始化,并且关中断状态下执行。(2) uart_sys_init【功能说明】UART子系统初始化函数,初始化系统中的所有固定的UART端口,并调用uart_tty_init将其和tty相关联。【原型】void uart_sys_init(void);【主要处理】调用uart_tty_init进行端口的初始化。(3) uart_tty_init【功能说明】将串口作为TTY的接口进行初始化。【原型】boolean uart_tty_init(ttytypes thettytype, uart_port_t *uart);【输入参数】tttytypetty的类型。uartuart端口类型的指针。【返回值】TRUE表示初始化成功,FLASE表示失败。【主要处理】根据输入的类型创建TTY结构,将UART的TTY接口函数保存在TTY结构中。关联该TTY和UART端口,重新初始化该端口,打开UART中断。7.4.2 TTY接口这些函数都是将函数指针保存在TTY结构中,由TTY模块调用。(1) uart_txstart【功能说明】发送TTY缓冲区中的所有数据到串口。【原型】void uart_txstart(tty_struct *tty);【输入参数】ttytty结构指针。【主要处理】依次读出指定的TTY上的数据,发送到其关联的串口。(2) uart_rxstop【函数功能说明】:关闭TTY关联的串口的接收中断响应。【原型】void uart_rxstop(tty_struct *tty);【输入参数】ttytty结构指针。【主要处理】关闭TTY关联串口的接收数据中断。串口停止对接收数据的中断的处理。(3) uart_rxrestart【函数功能说明】 重新打开TTY关联的串口的接收中断。【原型】 void uart_rxrestart(tty_struct *tty);【输入参数】ttytty结构指针。【主要处理】打开TTY关联串口的接收数据中断。串口重新对接收数据的中断进行处理。(4) uart_modemsignal【函数功能说明】获取串口的Modem信号。【原型】 ttysignal uart_modemsignal(tty_struct *tty);【输入参数】ttytty结构指针。【返回值】ttysignal结构,保存获取的Modem信号。【主要处理】从寄存器中读取Modem信号,保存在一个ttysignal结构中并返回。(5) uart_config【功能说明】:设置tty对应串口的参数。【原型】boolean uart_config(tty_struct *tty, i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论