USB-GPIB控制器的硬件電路設計
USB是PC體系中一套全新的工業(yè)標準,通用可編程接口GPIB(General Programmable Interface BUS),是Cy-press公司在其EZ-USB FX以及FX2系列單片機里設計的一個可由用戶編程的接口,具有快速、靈活等特點;可使用多種協(xié)議完成與外圍器件的無縫連接,如EIDE/ATAPI、IEEE1284、Utopia等。對其可以根據(jù)需要進行編程,且運行中不需要CPU的干預,僅通過一些CPU標志和中斷與增強型8051內核通信。作為自動化測試儀器的互聯(lián)標準歷史悠久,使用廣泛,組建費用低廉且操作方便,特別是連接臺式機的時候尤其顯得靈活高效。在很多對測試速度要求不高以及對測試儀器體積不作要求的情況下,GPIB總線也有相當?shù)膬?yōu)勢。因此,將USB所具有的獨特優(yōu)點引入到以GPIB為標準的自動測試系統(tǒng)中,設計基于USB總線的GPIB控制器,對提高便攜式和無外接插槽的自動測試系統(tǒng)整體性能有很大促進作用。
1 系統(tǒng)總體設計方案
硬件電路的設計分為硬件和固件兩部分。硬件要實現(xiàn)PC機與USB芯片的通信以及USB與GPIB接口邏輯之間的通信;同樣,固件也要滿足USB接口和GPIB邏輯協(xié)議。設計思路就是USB接口與PC機實現(xiàn)通信,并且提供給GPIB的信號線,最終建立兩者之間的通信,硬件總體框圖如圖1所示。
USB主芯片選取了Cypress公司CY7C68013控制芯片,芯片結構如圖2所示。CY7C68013集成了以下特性:USB2.0收發(fā)器、SIE(串行接口引擎)和增強型8051微處理器;8051程序從內部RAM開始運行;4個可編程BULK/INTERRUPT/ISOCH-RONOUS端點;8位 16位外部數(shù)據(jù)接口;通用可編程接口(GPIF);3.3V電源系統(tǒng);矢量USB中斷;獨立的數(shù)據(jù)緩沖區(qū)供SETUP和DATA包控制傳輸;集成I2C控制器,頻率可達100或400 kHz;4個FIFO,可與ASIC和DSP等無縫連接;專門的FIF0和GPIF自動矢量中斷?! ∶绹鳱I公司推出的TMS9914控制芯片是一款高性能CMOS的GPIB接口專用芯片,滿足IEEE488協(xié)議的要求;工作在TMS9914模式下,能夠將GPIB母線上的信號按照GPIB協(xié)議進行解碼和譯碼轉換為用戶可用的格式,同時將用戶發(fā)過來控制GPIB的信號進行處理,按照協(xié)議要求發(fā)送到GPIB母線上;內部有16個寄存器,分成兩組,一組是只寫寄存器,有8個;另一組是只讀寄存器,有8個。TMS9914內部各個寄存器的狀態(tài)決定或標志著芯片及GPIB的工作狀態(tài)。在GPIB接口設計中,只有通過編程對寄存器進行正確編排,才能實現(xiàn)對GPIB的各種操作。
2 硬件設計
2. 1供電方式
設計中采用了USB總線供電方式。USB接口從PC機能獲取的電壓為5V,而USB控制芯片CY7C68013的工作電壓為3.3V,GPIB控制芯片TMS9914的工作電壓為5V,所以本設計中選用了Maxim公司的MAX882進行電壓變換。從PC經USB電纜到B端口來的5V電源,經去耦合和濾波電路后直接提供給系統(tǒng)中要求在5V正常工作的芯片,如TMS9914、75LS160、75LSl62等;而經MAX882分壓后得到3.3V則提供給USB控制芯片CY7C68013以及LVC245。這樣就可保證整個控制器正常工作。電路中的SN7524,是專門為USB接口電路設計的,抑制USB數(shù)據(jù)線的瞬時電氣噪聲,如圖3所示。
2.2 外接EEPROM電路
系統(tǒng)上電后,USB內核首先檢查I2C總線上是否有EEPROM。如果有,并且其第一位數(shù)據(jù)是0xC2,則EZUSB FX2將EEPROM中的內容全部拷貝到內部RAM中,然后重列舉,并開始執(zhí)行RAM中的固件程序。由于CY68013芯片已經將I2C總線集成,設計轉化為對I2C總線上掛接的EEPROM的設計;由于采用的是24LC64的EEPROM,整個串行I2C總線電路實現(xiàn)的原理如圖4所示。
3 固件程序設計
本設計針對的主芯片CY7C68013是以軟件為框架的IC。CY7C68013芯片的固件開發(fā)所使用的集成開發(fā)環(huán)境為KEIL μVision2,編程語言為德國Keil公司的C51。把編輯、編譯、匯編、連接、調試等各階段都集成在一個程序內,先用編輯器編寫程序,接著調用編譯器進行編譯、連接后直接運行,因此可以縮短開發(fā)周期。
固件程序負責處理PC機發(fā)來的各種請求,主要負責設備與外圍電路進行數(shù)據(jù)傳輸。完成一個完整的事務傳輸,除了開發(fā)環(huán)境Keil包括的文件,還需要Fw.c(固件架構原是程序代碼)、Dscr.a51(USB描述符表)、Ezusb.lib(EZUSB函數(shù)庫對象程序代碼)、Periph.c(用戶函數(shù),也就是設計中實現(xiàn)GPIB功能要編寫的函數(shù))以及相關的中斷跳轉函數(shù)USBjmpTB.OBJ。功能函數(shù)里的TD_Poll()負責完成用戶指定的功能,應該包括一個執(zhí)行用戶外圍功能的狀態(tài)機。從這個函數(shù)返回的話,高優(yōu)先級的任務應該首先執(zhí)行。 void TD_Poll(void)
if(!(EP2468STAT&bmEP2EMPTY)){
if(!(EP2468STAT&bmEP6FULL))//判斷端點2的FIFO緩沖區(qū)是否滿
{APTRlH=MSB(&EP2FIFOBUF);//自動指針1
APTRlL=LSB(&EP2FIFOBUF):
AUTOPTRH2=MSB(&EP6FIFOBUF);//自動指針2
AUTOPTRL2=LSB(&EP6FIFOBUF);
count=(EP2BCH<<8)+EP2BCL;
for(i=0x0000;l??? EXTAUTODAT2=EXTAUTODAT1;//將端點2中斷的數(shù)據(jù)復制到端點6
}
EP6BCH=EP2BCH;//設置端點6
SYNCDELAY;
EP6BCL=EP2BCL,
SYNCDELAY:
EP2BCL=0x80;} //設置端點6的字節(jié)數(shù)
}
評論