
HCNT[1:0]與GPIF的低位地址線相連,選擇需要訪問的HPI寄存器。#HBE也接至地址線,作為字節(jié)使能信號。HHWIL與輸出信號線CTL0相連,決定傳送的字節(jié)是第一個半字還是第二個半字。#HDS1與HR#W一起接至CTL1, CTL1作為寫選通信號。#HDS2與CTL2相連,CTL2作為讀選通信號。#HRDY與輸入信號線RDY0相連,用于查詢HPI口的狀態(tài)。HINT與FX2的INT0連接,作為外部中斷信號。
四、固件設計
CYPRESS公司的EZ-USB FX2開發(fā)套件提供給用戶一個固件函數(shù)庫(Ezusb.lib)和固件框架(Frame work),兩者均是基于KEIL C51進行開發(fā)的。固件函數(shù)庫提供了一系列的函數(shù)來加速USB固件程序的開發(fā),使用時只需在程序中包含EZUSB.H和EZREGS.H兩個頭文件,并在項目中鏈接Ezusb.lib就可以直接使用固件庫中的各個函數(shù)了。
在使用固件框架來進行特定的固件開發(fā)時,固件框架已經(jīng)幫我們實現(xiàn)了初始化、重枚舉、源管理等功能。對用戶而言,只需要在固件架構的預留位置處添加代碼,就可以完成特定的功能,從而開發(fā)出一個功能完善的USB外設。由于用到了GPIF,就必須在TD_init()函數(shù)中添加功能代碼,完成GPIF的初始化以及端點配置等工作,并在TD-poll()函數(shù)中添加其它代碼來完成各種輔助功能。
為了充分利用EZ-USB FX2內部的特殊機制來達到更高的傳輸速率,我們采用GPIF 的FIFO讀寫模式與HPI口進行大批量數(shù)據(jù)的傳輸。在整個傳輸過程中,并不要求8051對數(shù)據(jù)進行處理,所以采用自動打包的方式(置AUTOIN=1),數(shù)據(jù)經(jīng)過FIFO直接發(fā)送到HPI內存(寫HPI)或PC機(讀HPI)。
在進行GPIF波形設計時,我們使用了CYPRESS公司提供的GPIF Designer開發(fā)工具,它提供了一個非常體貼的可視化窗口,只需在圖形界面上進行簡單的修改,就可以自動生成復雜的波形描述符,大大減輕了編程的工作量。
FIFO讀和FIFO寫的波形編輯圖分別如圖4(a)、(b)所示。


固件初始化代碼如下:




五、主機應用程序設計
主機端的應用程序負責向HPI口發(fā)送/讀取大量數(shù)據(jù),存成相應的文件并顯示波形,使用VC++6.0進行開發(fā)。
EZ-USB FX2開發(fā)套件提供了主機端驅動程序(ezusb.sys),可適用于絕大多數(shù)實際應用。在編寫主機應用程序的時候,只需調用相應的WIN32 API函數(shù)向驅動程序提交各種申請,就能由驅動程序來完成相應的讀、寫數(shù)據(jù)等各種功能。
應用程序首先調用API函數(shù)Createfile()打開設備,并返回設備的句柄,然后調用DeviceIocontrol()函數(shù),通過返回的句柄把申請服務的代碼(IOCTL)和相應的輸入輸出緩沖區(qū)提交給驅動程序,由驅動程序完成相應的服務。
下面是從設備中讀取4 096個字節(jié)的代碼:


執(zhí)行完上述代碼后,如果讀取成功,就可以在輸入緩沖區(qū)得到讀入的數(shù)據(jù),否則就彈出對話框,提示出錯。然后再調用相應函數(shù)將輸入緩沖區(qū)的數(shù)據(jù)在電腦屏幕上進行實時顯示。
GPIF與HPI進行通信時,首先將固件下載到USB單片機中,使其正常工作。然后使用自定義的主機命令對HPIC和HPIA進行初始化,之后由主機程序打開需要傳輸?shù)臄?shù)據(jù)文件,通過GPIF的FIFO模式以HPI的自增模式將數(shù)據(jù)下載到DSP的內存中。
六、結束語
上述方案較好地實現(xiàn)了GPIF與HPI的通信功能,并達到了很高的傳輸速率。在運行過程中,GPIF無需CPU干預,只需對其進行正確設置就可以正常工作。該方案還可進行進一步的擴展,可應用于數(shù)據(jù)采集、圖像處理等多個領域。
參考文獻
[1]Cypress EZ-USB FX2 Technical Reference Manual(Version2.1)[Z].2001.
[2]許永和.EZUSB FX系列單片機USB外圍設備設計與應用[M].北京:北京航天航空出版社,2002.





