高速USB接口設(shè)計(jì)
Void TD_PoLL(void):此函數(shù)在設(shè)備運(yùn)行時(shí)被重復(fù)的調(diào)用,應(yīng)包括完成特別任務(wù)的代碼。在該函數(shù)返回前,優(yōu)先級(jí)高的任務(wù)可能己完成。若它返回值為假,EZ―USBFX2將不會(huì)影響設(shè)備請(qǐng)求和USB總線設(shè)備掛起事件。若需要大量的處理時(shí)間,EZ-USBFX2會(huì)通過多次調(diào)用TD_PoLL函數(shù)將時(shí)間分段。
BooL TD_suspend(void):此函數(shù)是在設(shè)備進(jìn)入掛起狀態(tài)前調(diào)用,在其中加入適當(dāng)?shù)拇a,配置設(shè)備的工作狀態(tài),可使設(shè)備處于低功耗狀態(tài)并返回真值。可以改動(dòng)TD_Suspend的程序代碼,使其返回為假,可使EZ-USBFX2不進(jìn)入掛起狀態(tài)。
Void TD_Resume (void):當(dāng)外部要求重新啟動(dòng)時(shí),設(shè)備會(huì)通過調(diào)用此函數(shù)對(duì)處理器重啟,即TD_SUspendO函數(shù)的逆操作。此時(shí),設(shè)備在正常電源下重新啟動(dòng)。設(shè)備請(qǐng)求函數(shù)主要完成對(duì)來自主機(jī)的命令和請(qǐng)求的處理工作。
4.2 固件主程序
fw.c是固件程序的主程序文件,負(fù)責(zé)處理主機(jī)發(fā)出的各種USB設(shè)備請(qǐng)求。該程序首先初始化所有的內(nèi)部狀態(tài)變量,然后調(diào)用TD_InitO函數(shù)初始化,并打開中斷。然后,固件程序開始列舉USB設(shè)備,直至在端點(diǎn)0上接收到SETUP包為止。一旦接受到令牌包,框架將開始交互的任務(wù)調(diào)度。
整個(gè)系統(tǒng)實(shí)現(xiàn)過程中,設(shè)置一些重要寄存器。表1列出EZ―USBFX2為異步從屬FIFO自動(dòng)模式時(shí),需要配置的相關(guān)寄存器。本文引用地址:http://www.ex-cimer.com/article/188948.htm
5 FPGA程序的設(shè)計(jì)
編程思路:由于CY7C68013設(shè)置為異步SlaveFIFO模式,根據(jù)異步FIFO讀寫狀態(tài)圖,選擇狀態(tài)機(jī)來編寫進(jìn)程。其狀態(tài)圖如圖3所示。
6 結(jié)語
以CY7C68013和FPGA接口為例描述了USB芯片的SlaveFIFO固件程序流程和設(shè)計(jì)思想,并且在項(xiàng)目中得到了實(shí)際應(yīng)用,并且數(shù)據(jù)連續(xù)傳輸無誤碼,無丟失。
評(píng)論