基于ARM和uClinux多串口通讯的设计与实现3王欣罗志祥沈光(华中科技大学光电子科学与工程学院武汉430074摘要以ARM7嵌入式处理器S3C44B0X、TI(TL16C752B为硬件开发平台,设计基于uClinux。关键词ARMuClinux串行设备驱动中图分类号TP316.891引言通用异步接收发送芯片UART产生于上个世纪70年代,是第一块大规模集成电路。1981年的推出的IBMPC采用了8250UART芯片与外设进行数据通信,直到上个世纪末,UART一直是PC中最主要的串行通信接口。嵌入式系统的多串口扩展的应用范围很广。它可以用来做多串口服务器/多串口卡,工业/自动化现场RS-485控制,使用CDMA/GPRSMODEM的无线数据传输,车载信息平台/车载GPS定位系统,远传自动抄表(AMR系统,税控POS/银行终端等金融机具,DSP数据采集和传输系统等。本文给出了系统的多串口扩展完整硬件和驱动解决方案。该方案对于多串口扩展应用以及以Linux/uClinux类的操作系统为基础的驱动开发有一定的指导意义和参考价值。2硬件方案设计目前嵌入式处理器常见的有ARM、PowerPC、MIPS、Motorola68K、ColdFire(冷火等,但ARM占据了绝对主流。由于低端市场上ARM7/9型嵌入式处理器非常火爆,本文就选用了其中一种流行的ARM7型处理器S3C44B0X作为硬件开发平台。因为处理器S3C44B0X不带内存管理单元MMU(无内存分页和地址映射机制,所以不能使用虚拟内存,所以选用支持无存储管理单元微处理器的uClinux操作系统作为软件驱动开发平台。截止到目前,全球范围内有超过40种UART芯片可以选择,大多数UART芯片是以计算机总线转换UART为应用基础的,其管脚、寄存器基本相同。这就使得UART芯片有很好的通用性。本文选用了其中较复杂的通用异步接收发送(UART芯片TL16C752B来扩展异步串行通讯口。2.1UART芯片TL16C752B工作原理图1TL16C752B功能模块图[1]TL16C752B芯片与UART芯片ST16C2550引脚兼容,使用外部晶振时有高达3Mbps的波特率,内置两套UART系统,每套都能独立工作,具有可选的流控功能等。TL16C752B具有64字节发送/接收FIFO,收、发FIFO的触发等级可通过软件编程实现,能减少对CPU中断次数,提高芯片收发效率。TL16C752B芯片功能模块如图1所示。2.2接口电路设计处理器S3C44B0X[2]与TL16C752B之间的硬件连接如图2所示,D0~D7通过总线收发芯片SN74LVC16245A连接CPU数据总线的低8位,是441计算机与数字工程第35卷3收到本文时间:2006年9月20日作者简介:王欣,男,硕士研究生,研究方向:嵌入式系统、数字图像处理。罗志祥,男,副教授,硕士生导师,研究方向:宽带光通信,传感器网络。沈光,男,硕士研究生,研究方向:嵌入式系统。UART的数据输入与输出通道,其中SN74LVC16245A是用来延时和增强数据总线驱动能力;片选CSA、CSB连接Bank4和Bank5的引脚nCGS4、nGCS5,这两个片选可以确定2个UART端口的起始地址,分别是0x08000000、0x0a000000。即高位地址部分已固定,而片内寄存器的地址主要由地址低3位A0~A2确定。只有在片选信号和地址信号都有效时,才能对片内相应的寄存器进行正常读写。要注意的是,Bank4和Bank5的控制寄存器的设置要参考TL16C752B图2S3C44B0X与TL16C752B硬件连接图采用中断方式通知CPU接收到新的字符或字符已发送,这样可以提高系统的实时性。这里中断引脚INTA、INTB直接连接S3C44B0X的外部中断引脚EXINT2~EXINT3。接入TL16C752B的外接时钟频率最好是使用的波特率的倍数。本文使用的是11.0592M的外部时钟,输出的的串口波特率是115200。TL16C752B内部寄存器的映射表及访问方法在参考文献[1]中可查到。3串行设备驱动程序设计3.1uClinux系统内核架构图3uClinux内核架构(字符型设备设备驱动程序是操作系统内核与机器硬件之间的接口。它为应用程序屏蔽了硬件的细节。在应用程序看来,硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作。而事实上,对硬件的所有实际操作都是由用户空间的应用程序调用内核空间的驱动程序来完成操作的。在uClinux(本文使用2.4.20中:、网络接口型。其中字,(比如文件一样被访问。open、close、read和write等系统调用,如图3所示。3.2串行设备驱动的分析在uClinux内核中提供了访问串行硬件的设备,通常叫tty设备(tty是Teletype的简写,也可称为终端设备...