蔣俊華,侯衛周
(河南大學 物理與電子學院,河南 鄭州 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.