基于WINCE的多串口扩展系统的设计
DDR2 经过总线驱动芯片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 路串口类拟,限于篇幅在此处省略。
- Linux嵌入式系统开发平台选型探讨(11-09)
- VxWorks实时操作系统下MPC8260ATM驱动的实现(11-11)
- VXWORKS内核分析(11-11)
- Linux内核解读入门(11-09)
- linux文件系统基础(02-09)
- 基于Winodws CE的嵌入式网络监控系统的设计与实现(03-05)