基于DSP的USB數(shù)據(jù)傳輸系統(tǒng)設(shè)計
1.2 接口的訪問
CY7C68001提供給DSP兩種軟件接口:
(1)命令接口:用來訪問CY7C68001寄存器、End-point0緩沖器及描述表;
(2)FIFO數(shù)據(jù)接口:用來訪問4個1 KB的FIFO中的數(shù)據(jù)。通過編程直接作為FIFO分配給。EP2,EP4,EP6,EP8。這兩個外部接口均可以通過同步或異步方式進(jìn)行訪問。在此均采用異步的方式進(jìn)行訪問,命令口的命令字如下:
在表1中,A/D用于地址/數(shù)據(jù)的選擇,當(dāng)其為0時,表示本操作為數(shù)據(jù)讀或?qū)?;?dāng)其為1時,表示本操作為地址寫。R/W用于讀/寫操作的選擇,當(dāng)其為0時,進(jìn)行寫,當(dāng)其為1時,進(jìn)行讀。A[5:0]用于地址/數(shù)據(jù)的選擇,當(dāng)Bit7=0時,D[3:0]為數(shù)據(jù)半字節(jié);D[5:4]為未用,命令字為8位,故命令字?jǐn)?shù)據(jù)分二次讀出或?qū)懭?;?dāng)Bit7=1時,D[5:0]包含將要尋址的命令寄存器地址。
2 USB軟件設(shè)計
USB的軟件設(shè)計包括三方面:固件設(shè)計、驅(qū)動程序設(shè)計和主機端應(yīng)用程序設(shè)計。
2.1 固件設(shè)計
所有基于微控制器及外圍電路功能設(shè)備的正常工作都離不開固件的參與,固件的作用就是輔助硬件工作。沒有固件的參與和控制,硬件設(shè)備無法實現(xiàn)預(yù)期的功能。USB設(shè)備也不例外,必須編寫固件程序來輔助硬件完成USB的通信任務(wù)。由于采用不帶MCU內(nèi)核的USB接口芯片,USB的應(yīng)用層協(xié)議應(yīng)該通過對TMS320C6416的編程來實現(xiàn),USB固件的加載必須靠DSP的控制CY7C68001來完成。在CCS中用C語言完成固件程序的編寫,程序流程圖如圖2所示。
根據(jù)程序流程圖,固件設(shè)計思路如下:
(1)初始化工作。包括設(shè)置一些特殊功能寄存器的初值,以實現(xiàn)所需的設(shè)備屬性或功能,例如:配置端口、使能端點、開中斷。該設(shè)計中,使CY7C68001工作于異步FIFO模式,將4 KB的FIFO對應(yīng)到兩個端點(Endpoint),即Endpoint2和Endpoint6。
(2)輔助硬件完成設(shè)備的重新列舉過程。包括模擬設(shè)備的斷開與重新連接,對接收到的設(shè)置包進(jìn)行分析判斷,從而對主機的設(shè)備請求做出適當(dāng)?shù)捻憫?yīng),完成主機對設(shè)備的配置任務(wù)。
(3)對中斷的處理。CY7C68001有6個中斷源,可以分別通過中斷使能對寄存器的各位進(jìn)行設(shè)置。一旦中斷事件發(fā)生,CY7C68001的INT引腳就被置低,并且置中斷使能寄存器的相應(yīng)位(即中斷使能寄存器同時充當(dāng)中斷標(biāo)志寄存器,中斷使能寄存器具有讀寫屬性)。當(dāng)中斷發(fā)生時,中斷標(biāo)志寄存器的狀態(tài)字映射到FD[7:0];中斷發(fā)生后。DSP對CY7C68001簡單的一次讀操作即可獲取中斷信息,識別中斷源并進(jìn)行相應(yīng)處理。相對于中斷標(biāo)志寄存器的讀操作,其他對CY7C68001寄存器的讀操作通常要先發(fā)送一次請求,并且收到READY響應(yīng)后.才可以讀取數(shù)據(jù)。
(4)數(shù)據(jù)的接收與發(fā)送。在讀數(shù)據(jù)時,應(yīng)首先判斷CY7C68001的FIFO2是否為空,如果不為空,才將數(shù)據(jù)讀進(jìn)來。在寫數(shù)據(jù)時,還要判斷要寫的數(shù)據(jù)個數(shù)是否為512 B的整倍數(shù),如果不是,則使用PKTEND信號來標(biāo)識數(shù)據(jù)包的結(jié)束。EP2和EP6分別對應(yīng)存放USB需要上傳與接收的數(shù)據(jù)。其中,EP2為OUT型,負(fù)責(zé)從主機接收數(shù)據(jù);EP6為IN型,負(fù)責(zé)向主機發(fā)送數(shù)據(jù)。EP2和EP6均采用批量(BULK)傳輸方式,這種傳輸方式具有數(shù)據(jù)可靠,傳輸速率高等特點,特別適合大批量數(shù)據(jù)傳輸。部分關(guān)鍵代碼如下:
DSP讀端點2中的數(shù)據(jù):
評論