Abstract: This paper proposes a multi-serial extension system solution based on ARM9 & CPLD & TL16C554. There is first a general introduction of the micro-processor S3C2440, CPLD chipset EPM3128 and four-channel serial extension chip TL16C554. Following the brief introduction, the paper presents hardware design of multi-serial extension system. Finally the paper describes the CPLD hardware
process and the WinCE driver program of TL16C554 , and the application program design of TL16C554 based on WinCE.
Key words: WinCE, Multi-serial extension, TL16C554, ARM9, CPLD
随着当今科学技术的发展,智能化及自动化设备越来越多,其中以计算机网络设备及现场总线的发展最为典型。在大型集中控制现场如停车场主控制系统、多点温度采集系统等,要进行采集和测试的通信点数和通信终端较多,多个串口通讯系统应运而生。普通设备的主控制器通常采用简单的单片机,其往往只有一到三个串口,不能满足多采集点的系统要求。为了完成主控制器对多点的通信及控制,需要进行串口扩展,TL16C554是最为常见的4 串口扩展芯片,有很强的灵活性和实用性。基于ARM9 内核的S3C2440 处理器在嵌入式系统的应用相当广泛,可以运行WINCE 操作系统,此处理器的强大功能及外围接口芯片的丰富性,使得系统的开发相对容易,同时也方便扩展16C554。嵌入式多串口扩展系统功能强、应用场所广泛,具有广泛的市场前景。
1 方案分析
为了使多串口扩展系统的应用场合更加广泛,应选择驱动程序及应用程序开发周期短的方案,因此本设计的方案采用ARM9+CPLD+TL16C554 的硬件框架,软件平台基于WINCE 操作系统,其应用程序和驱动程序的开发周期较短。系统框图如图1 所示。
系统的设计包括硬件设计以及 16C554 的WINCE 驱动程序的开发和应用程序的开发。
硬件设计中ARM9 主处理器采用三星公司的S3C2440:其主频最高可以达到533MHz,本系统使用400MHz;总线速度使用100MHz;具有SD 卡接口,支持USB 下载相关内核及镜像;支持多种分辨率的TFT液晶屏;无需围电路的触摸屏接口;外扩64M 的SDRAM,64M 的NAND FLASH;三路UART 通用异步串行口;支持总线方式扩展外设,本系统的另外8 路串口就是通过总线方式扩展两片16C554 实现的。
CPLD 采用ALTERA 公司推出的MAX3000 系列的EPM3128ATC100:具有128 个宏单元;先进高速的I/O接口;具有80 个可用的I/O 口。其高速的硬件运行速度满足本系统的100MHz 的总线扩展速度,I/O 口也满足本系统扩展16C554 的需求。
16C554 采用TI 公司生产的TL16C554AI , 其内部有四个增强型的ACE(AsynchronousConun unicationsElement)异步收发的并/串转换组件TL16C550,波特率通过寄存器的编程可改变,最高可达1Mbps,具有16 字节FIFO 收发深度,可大大减少收发中断次数,提高处理器的效率;具有可独立控制的发送、接收、线路状态和MODEM 状态中断,方便主控制器控制16C554 的收发状态;具有断线产生和检测以及内部故障诊断功能,提高了通信的稳定及可靠性;完善的系统分级中断控制。本系统处理器WINCE 驱动产用中断方式检测16C554 的收发情况。
软件设计中,系统WINCE 应用程序存放在SD 卡中,可针对不同的应用场合编写不同的应用程序。主处理器S3C2440 根据SD 卡内的应用程序控制CPLD+16C554 的串口扩展板,向八路串口收发数据。系统实物完成图如下图2 所示。
2 硬件设计
本系统具体硬件设计采用的方式是S3C2440 的地址线、控制线直接进入CPLD 芯片EPM3128,然后经过CPLD的逻辑运算输出16C554 的片选信号线,16C554 根据片选信号对内部的相应模块进行串口数据处理,处理的数据直接与主控制芯片S3C2440 进行传输。其中一片TL16C554 的外围电路连接如下图3 所示。
图3 中,TL16C554 的并行数据线D0~D7 与ARM9 控制器S3C2440 的数据总线DATA0~DATA7 经过总线驱动芯片LVTH162245 输出相连的;TL16C554 的八个片内寄存器地址线A0~A2 与S3C2440 的地址总ADDR0~ADDR2 经过总线驱动芯片LVTH162245 输出相连的;而总线驱动芯片的方向则由S3C2440 的控制总线经过EPM3218 的逻辑运算输出控制;每片TL16C554 的内部有四个串口模块的片选信号nGCSA~nGCSD,本系统使用两片TL16C554,因此需要8 个片选信号,第一片挂在S3C2440 总线的BANK1 上,第二片挂在总线的BANK2 上,每片都用到S3C2440的高位地址线ADDR23、ADDR24 做为片选线,这四根总线ADDR23、ADDR24、nGCS1、nGCS2 连到EPM3218,然后经过CPLD 译码之后的八根片选信号UART_nCSA1~nCSD1、UART_nCSA2~D2 分别连接到TL16C554 的八个片选上。TL16C554 的读写信号线nIOW、nIOR 也是与S3C2440 的读写总线LnOE、LnWE 及总线片选nGCS1、nGCS2 经过EPM3218 的译码之后相连的;TL16C554 的复位及上电启动需要一定宽度的低电平来完成,本系统直接与S3C2440系统的复位信号相连;本系统TL16C554 采用的是中断方式的收发模式,因此nINTN 直接连接到高电平,使芯片中断使能;TL16C554内部四个模块都有一个中断信号INTA~D,两片总共八个中断信号线分别直接连接到SDC2440 的八个外部中断引脚上,因此任何一个串口通信事件产生中断都全直接使S3C2440 进入中断服务状态,并做相应的中断数据处理。
3 软件设计
本系统的软件设计主要包括 EPM3218 的VHDL 硬件语言程序;TL16C554 的WINCE 驱动程序,多路异步串口
通信系统的WINCE 应用程序,以下将分别简单介绍。
3.1 EPM3218 的VHDL 语言程序
CPLD 程序的开发采用的环境是Quartus II V4.1,它是由Altera 公司推出的一个多平台综合性设计环境,包括各种形式的设计输入、功能仿真和时序仿真等功能。其中设计输入分为图形设计文件、VHDL 程序文件,Verilog HDL 程序文件等。VHDL 的逻辑综合比VerilogHDL 更加严谨,对于大型系统来说VHDL 的设计输入是首选。
本系统CPLD 的程序设计就是采用VHDL 硬件描述语言,它与常规的顺序执行的计算机程序不同,从根本上讲它是并发执行的。
系统中的CPLD 程序主要实现的是对S3C2440 的相关总线片选信号进行译码,从而对TL16C554 进行片选及
读写操作。部分程序代码如下所示:
B_DIR_1 <= (NOT LnOE); -- S3C2440 总线驱动芯片LVTH162245 的方向控制信号
UART_nCSA1 <= nGCS1 OR (NOT ADDR24) OR (NOT ADDR23); --TL16C554 的片选A
UART_nCSB1 <= nGCS1 OR ADDR24 OR (NOT ADDR23); --TL16C554 的片选B
UART_nCSC1 <= nGCS1 OR (NOT ADDR24) OR ADDR23; --TL16C554 的片选C
UART_nCSD1 <= nGCS1 OR ADDR24 OR ADDR23 ; --TL16C554 的片选D
UART_nIOW1 <= LnWE; -- TL16C554 的写信号线
UART_nIOR1 <= LnOE; -- TL16C554 的读信号线
3.2 TL16C554 的WINCE 驱动程序的实现编写 WINCE 驱动首先要确定它是属于哪种驱动,WINCE 驱动程序分本机设备驱动和流设备驱动。本机设备驱动程序是被静态地链接到GWES,它们不作为一个单独的DLL 存在。有一些类型的设备,如键盘、显示器等对操作系统都有一定的接口,是专门用于WINCE 的。所以它们都属本机设备驱动。流接口驱动程序是以动态链接库形式存在的,由设备管理器统一加载、管理和卸载。若是按照结构分,又可分为分层的驱动程序和不分层的驱动程序。分层的驱动程序由两层组成:上层是模型设备驱动程序(MDD),下层是依赖平台的驱动程序(PDD)。其驱动模型见图3。
本系统采用流式驱动程序来完成TL16C554 的WINCE 驱动。
流接口驱动程序要实现的DLL 接口包括:
◆ EUT_Init:设备管理器初始化一个驱动程序;
◆ EUT_Deinit:设备管理器卸载一个驱动程序;
◆ EUT_Open:打开一个设备驱动程序时应用程序通过CreateFile()函数调用此函数;
◆ EUT_Close:在驱动程序关闭时应用程序通过C1oseHandle()函数调用;
◆ EUT_Read:设备驱动程序处于打开状态时应用程序通过ReadFile()调用此函数;
◆ EUT_Write:设备驱动程序处于打开状态时应用程序通过WriteFile()调用此函数;
◆ EUT_Seek:对设备的数据指针进行操作,由应用程序通过SetFilePointer()函数调用;
◆ EUT_IOContorl:上层的软件通过DeviceIoControl()函数调用此函数;
其中 EUT 代表串口扩展芯片设备驱动的设备文件名。
然后添加一个注册表文件,命名为extenduart.reg:
[HKEY_LOCAL_MACHINEDriversBuiltInextenduart]
"DeviceArrayIndex"=dword:0
"Irq"=dword:17 //逻辑中断号
"IoBase"=dword:08000000 //为TL16C554 片内A 路寄存器在S3C2440 总线的起始地址
"IoLen"=dword:2C
"Prefix"="EUT"
"Dll"="extenduart.Dll"
"Order"=dword:0
"Priority"=dword:0
"Port"="EUT1:" //串口号为EUT1
"FriendlyName"="S2440 EUT1"其中: "Irq"=dword:17 , 是第一片TL16C554 的A 路串口在WINCE 驱动中的逻辑中断号;"IoBase"=dword:08000000,是TL16C554 串口芯片A 路串口寄存器的起始地址,对于其他B、C、D 路串口的注册表信息与A 路串口类拟,限于篇幅在此处省略。
3.3 多路异步串口通信的WINCE 应用程序
在本系统中我们用 CSerialPort 类对TL16C554 驱动进行了串口应用程序的封装,该类基于多线程,其工作流程如下:首先设置好串口参数,如波特率等;然后开启串口监视工作线程监测串口接收到的数据(S3C2440以中断方式接收数据)或其他串口事件,再以消息方式通知主线程,从而激发消息处理函数来进行数据处理,这是对接收数据而言的;发送数据可以直接向串口发送。下面是对CSerialPort 类使用方法的简单描述:
CSerialPort m_SerialPort; /* 定义扩展串口对象 */
m_SerialPort.OpenPort(_T("EUT1:"), 19200); /* 以19200 的波特率打开扩展串口EUT1*/
m_SerialPort.m_pReceiveCallback = (ReceiveCallback*) (receiveByte);
/* 监听串口接收数据的回调函数 */
m_SerialPort.WriteChar(&byte, 1); /* 从扩展串口发送一个字节数据 */
结 语
本文利用ARM9 处理器+CPLD+16C554 的方案设计基于WINCE 的多路串口扩展系统的软硬件,并成功应用于多终端采集系统中,表明系统方案的正确性。同样利用此方案可以扩展更多的串口芯片从而提高系统串口通道数,另外系统中SD 卡内的应用程序可以灵活配置,从而适应更多的应用场合。系统具有广泛的应用前景。
参考文献
[1] Volnei A. Pedroni. Circuit Design with VHDL[M]. Beijing: Publishing House of Electronics Industry.2007.
[2] Douglas Boling. Programming Windows Embedded CE 6.0 Developer Reference[M]. Washington,USA:arrangement with the original publisher.2008.
[1] 邓川云,樊庆文等.基于嵌入式WinCE的远程数据采集系统[J].微计算机信息.2009,6-1:94-95.
[3] 周建设.Windows CE 设备驱动及BSP开发指南[M].北京:中国电力出版社,2009.
[4] 薛大龙,陈世帝,王韵.Windows CE 嵌入式系统开发从基到实践[M].北京:电了工业出版社,2008.
[5] 赵建领.Protel 电路设计与制版宝典[M].北京:电了工业出版社,2007.
[6] 王海祥,陈美君.基于ARM9的串口扩展设计[J].计算机与现代化,2008,12:84-87.
[7] 周建芳,黄凤辰.基于TL16C554的水情中心站多路数据接收[J].中国科技信息,2005,18:10.
本文作者创新点:使用嵌入式 ARM9 处理器与CPLD 处理器带串口扩展芯片进行多串口扩展系统设计,系统稳定可靠,可广泛用于多终端采集系统。