蒋俊华,侯卫周
(河南大学 物理与电子学院,河南 郑州 475001)
ISA总线最早作为一种系统总线,主要用在IBM-PC、IBMPC/XT系列计算机当中,后来成为工业总线标准,并且产生了深远的影响。由于技术的不断发展,ISA总线的传输速率跟不上处理器的速度,从而被其他总线所取代。
然而正是由于ISA总线的低速使得其与现在的外设速率十分匹配,适合作为一种外围设备总线,用于扩展设备接口。并且ISA总线的地址线是非常多的,可以连接数量庞大的设备。综合这两点原因,ISA总线在工业控制领域仍然占有一席之地,并且ISA总线工业领域中的应用还会持续一段很长的时间[1]。
USB外设普及之后,将会使得PC机箱后面的各式各样繁杂的连接线变得简单,大多数老式的接口将被淘汰,如ISA接口、PS/2接口、串并行接口等,取而代之的是各种USB接口的外设[2-3]。但有些接口是USB无法取代的,如显示器接口、SCSI接口和IEEE1394接口等。不过这还是不能阻挡USB接口的发展。
其实除了如显卡这种数据传输量极高和一些对实时性要求特别高的控制设备外,几乎所有的PC外设都可以移植到USB上来,因此USB的PC外设有不可限量的发展空间。正是基于这个原因,本文提出了一种设计方案,通过CH375芯片实现两者之间的转接。
本方案中采用CH375芯片实现ISA总线到USB总线的转接。CH375是一个USB总线的通用接口芯片,支持USB-HOST主机方式和USB-DEVICE/SLAVE设备方式[4]。在本地端,CH375具有8位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接到单片机、DSP、MCU、MPU等控制器的系统总线上[5]。它内置了USB通讯中的底层协议,屏蔽了复杂的底层驱动;通过Windows驱动程序提供设备级接口,通过DLL提供API应用层接口。下图是转接板的整体模块图,板卡通过USB接头和上位计算机连接,通过ISA接口插接在下位机的ISA插槽上。
图1 转接板模块图Fig.1 The adapter plate module diagram
CH375芯片与外围芯片连接电路如图2所示。
图2 CH375外围电路连接图Fig.2 The peripheral circuit connection diagram
UD+、UD-引脚分别连接USB总线的D+、D-数据线。
ACT#是CH375设备状态输出端,当CH375作为USB设备配置完成后,该引脚输出低电平,可以用来指示CH375的状态。
INT#引脚为中断请求输出,将其连接到单片机的中断0引脚。
CS#片选控制输入引脚,将其接到单片机P2.7管脚。
A0是CH375数据端口和命令端口的选择引脚,A0接到单片机的P2.6管脚。
RD#和WR#分别接到单片机的读写信号引脚。
D0~D7是数据总线,分别与单片机的P0.0~P0.7连接。
本设计中用了两个74HC245,分别将数据信号、地址信号和读写控制信号引入到下位机中。采用74LS573芯片作为锁存器。1)74LS573的使能端OE#引脚接地使其一直有效。2)LE为锁存使能输入端,当其从高电平转为低电平时锁存输入的数据(即为锁存P0口的数据)。由于单片机是在ALE的下降沿送出稳定的地址信号,因此可将芯片的LE引脚直接与单片机的ALE连接。3)其他对应连接即可[6]。
ISA总线的地址总线和数据总线是分开的,控制线也比较简单,因而和单片机接口非常方便,可以直接接到ISA总线上。
本设计要完成的软件程序设计主要是:上位机用户界面应用程序和下位单片机程序。
上位机的数据通过USB总线,由USB主机发送给CH375,CH375将接收的数据放入端点缓冲区,接收完后通过中断告知单片机数据接收完毕,然后单片机响应中断,在中断中做相应的处理,即在中断中将数据转换和发送到ISA总线。因此单片机的主要任务是与CH375通讯,接收CH375数据缓冲区中的数据,然后再将数据经过处理转换成ISA总线信号后发送到ISA总线。图3为主程序的流程图。
图4为CH375初始化子程序,其主要是测试和单片机的通讯是否正常,以及设置CH375的工作方式等。本文将CH375的工作方式设置为方式2,即内置固件模式。
图3 主程序流程图Fig.3 The flowing chart of main program
图4 CH375初始化子程序Fig.4 The CH375 initialization subprogram
图5 单片机响应CH375中断子程序Fig.5 The interruption subprogram
图5 是单片机中断子程序,这是下位单片机程序最重要的部分,所有上位机程序发送的数据都是由中断子程序响应、接收和处理的。
中断子程序如下:
CH375_INTER:PUSH PSW ;现场保护
PUSH ACC
PUSH DPL
PUSH DPH
SETB RS0;PSW.3,切换至工作寄存器组1
MOV DPTR,#CH375_CMD_PORT ;命令口地址
MOV A,#CMD_GET_STATUS
MOVX@DPTR,A;获取中断状态并取消中断请求
NOP;如果时钟频率低于16MHz则无需该指令延时,高于30MHz要多加2条指令
NOP
MOV DPTR,#CH375_DAT_PORT;数据口地址
MOVX A,@DPTR;返回操作状态
CLR IE0;清中断标志,对应于INT0中断
CJNE A,#USB_INT_EP2_OUT,CH375_INT_1 ;批量端点下传成功
LJMP CH375_DOWN_OK;USB批量数据接收成功CH375_INT_1: CJNEA,#USB_INT_EP2_IN,CH375_INT_2 ;批量端点上传成功
LJMP CH375_UP_OK;USB批量数据发送成功
CH375_INT_2: CJNE A,#USB_INT_EP1_IN,CH375_INT_3;中断端点
LJMP CH375_UP_INT_OK ;USB中断数据发送成功
CH375_INT_3: SJMP CH375_INT_RET
CH375_INT_RET: POP DPH
POP DPL
POP ACC
POP PSW ;恢复寄存器
RETI ;中断返回
本文采用了先部分后整体的调试方法,这样可以节省时间,最快的速度发现问题。
把整个调试系统分成了两部分,第一部分为上位机程序与单片机的通讯;第二部分为单片机与ISA总线的通讯。分别对此两部分进行调试,调试成功之后再将这两部分组合成整体,最后进行整体调试。
1)上位机与单片机数据传送的调试
上位机部分由程序“调试程序V1.0.EXE”来完成控制,由他可以输入I/O输出板卡的地址以及要发送给ISA总线的数据。其主界面如图6所示。
图6 调试程序主界面Fig.6 The main interface debugging program
单片机部分由Keil C编程软件、仿真器以及USB-ISA转接卡组成。将仿真器的仿真头连接到USB-ISA转接卡单片机位置,由Keil C编程软件、仿真器共同完成仿真功能。Keil C软件的编程和调试界面如图6。
利用仿真器就可以查看数据是否成功到达,调试记录如表1所示。
表1 调试记录Tab.1 Debug record
2)单片机与ISA总线数据传送的调试
单片机部分即可用仿真器仿真,也可以直接用通过编程器烧写了程序的单片机,但相比较而言用仿真调试会比较方便。这部分调试主要是看由单片机发送的ISA总线数据能否被I/O输出卡接收到。数据是否接收到可由显示板来指示,显示卡LED灯的亮灭状态可以指示I/O输出卡是否被选中,以及是否接收到单片机的控制信号。
程序控制向ISA总线的某个地址发送数据,如果显示板能够显示程序中发送的数据信息,则表明单片机与ISA总线通讯成功。
3)系统整体调试
当上述两个部分都调试成功之后,就可以开始系统的整体调试了。上面两步的调试成功说明硬件原理和硬件连接正确,上位机调试程序也没问题,接下来就只剩下单片机对接收到的数据的处理的软件程序调试了。这个部分也相对比较简单,单片机对ISA总线数据的处理跟对扩展存储器的操作一样:指向某个地址然后发送数据。
图7 Keil C调试界面Fig.7 Keil Cdebugging interface
本文将USB和ISA这两种总线的特点融合在一起,设计并制作了USB-ISA转接卡,适应于各种工控系统,在有ISA总线的场合基本上都可以应用此转接卡。ISA总线是一种适合于中低速I/O设备的总线,,因其多地址线和较慢的传输速率,ISA总线在工业领域中仍然应用得非常广泛。而USB总线又是一种非常方便的总线,受到越来越多的使用者的喜爱,USB的优越的特性将会使其具有不可抵挡的发展势头。因此USB总线和ISA总线的结合必将会在工业领域产生深远的影响,可以预期USB-ISA转接卡在工业领域中会有非常广泛的应用前景。
[1]张国云.基于ISA总线的USB接口卡的设计[J].现代电子技术,2005,20(211):12-14.ZHANG Guo-yun.Design of USB interface card based on ISA bus[J].Modern Electronics Technique,2005,20(211):12-14.
[2]易先威,刘伟,何方.基于ISA总线的USB协议栈的设计与实现[J].小型微型计算机系统,2005,26(11):2057-2059.YI Xian-wei,LIU wei,HE fang.Design of USB interface card based on ISA bus[J].MINI-macro System,2005,26 (11):2057-2059.
[3]沈晓红,鲁延峰,李凯.基于FPGA的ISA总线接口逻辑设计[J].微计算机信息,2011,27(7):110-111.SHEN Xiao-hong,LU Yan-feng,LI Kai.The logical design of ISA bus interface based on FPGA[J].Microcomputer Information,2011,27(7):110-111.
[4]魏景斌,刘俊峰,钱稷,等.基于CH375的USB数据传输[J].微计算机信息,2010,26(2):150-152.WEI Jing-bin,LIU Jun-feng,QIAN Ji,et al.Based on CH375 transmit data to USB[J].Microcomputer Information,2010,26(2):150-152.
[5]刘井权,王宪,戴旻.基于单片机的USB接口的设计[J].自动化仪表,2006,27(8):29-31.LIUJing-quan,WANGXian,DAIMin.Design of USB min interface based on single chip computer[J].Process Automation Instrumentation,2006,27(8):29-31.
[6]安晓莉.AT89S51单片机并行I/O端口的扩展[J].电子设计工程,2009,17(8):66-70.AN Xiao-li.Expansion of AT89S51 MCU parallel I/O port[J].Electronic Design Engineering,2009,17(8):66-70.