基于TMS320VC54X的USB2.0硬件接口設(shè)計(jì)
關(guān)鍵詞:端點(diǎn);枚舉;先進(jìn)先出
USB總線具有傳輸速度高、熱插拔、即插即用等特點(diǎn),深受廣大用戶青睞,但由于USB通信協(xié)議和開發(fā)手段的復(fù)雜性,給研究人員的開發(fā)應(yīng)用增加了一定的難度。CYPRESS公司生產(chǎn)的CY7C68001通用USB2.0接口控制器是基于應(yīng)用層編程的接口器件,相對(duì)于其它基于鏈路層編程的接口器件,使用簡(jiǎn)單,開發(fā)方便。因此我們?cè)谏钊胙芯緾Y7C68001的特點(diǎn)的基礎(chǔ)上,對(duì)TMS320VC54X進(jìn)行USB功能接口設(shè)計(jì)。
1 USB測(cè)控系統(tǒng)框圖
測(cè)控系統(tǒng)的框圖如圖1所示。
2 CY7C68001的主要特點(diǎn)
CY7C68001符合USB2.0規(guī)范;支持高速(480Mbps)或全速(12Mbps)USB數(shù)據(jù)傳輸;4個(gè)可編程端點(diǎn)共享4KB的FIFO,每個(gè)端點(diǎn)對(duì)應(yīng)的FIFO空間大小及FIFO狀態(tài)可編程;8/16位雙向命令接口、配置靈活(同步/異步可配置,狀態(tài)引腳、讀寫引腳以及極性可編程),數(shù)據(jù)I/O口可與DSP、FPGA或其它ASIC同步/異步通信;智能SIE功能(可在不借助微處理器中斷的前提下完成枚舉);集成的鎖相環(huán)功能;I/O口為3.3VTTL電平,可承受5V電壓。
3 TMS320VC54X與CY7C68001的異步接口
接口框圖如圖2所示,CY7C68001相關(guān)引腳說明如下: :表明CY7C68001有中斷事件發(fā)生,或反映對(duì)于CY7C68001的讀操作結(jié)束;READY:通知TMS320VC54X可以對(duì)CY7C68001讀寫;FLAGA、FLAGB、FLAGC:報(bào)告由FIFOADR[2:0]選擇的FIFO狀態(tài),默認(rèn)分別對(duì)應(yīng)為FIFO自定義、滿、空狀態(tài);FLAGD/ :FIFO狀態(tài)/片選可選,默認(rèn)為片選信號(hào);SLOE:CY7C68001驅(qū)動(dòng)并行數(shù)據(jù)總線,常與SLRD短接;SLRD:并口讀有效信號(hào),在SLRD有效且同步通信時(shí),F(xiàn)IFO指針在每個(gè)IFCLK的上升沿遞增;SLWR:并口寫有效信號(hào),在SLRD有效且同步通信時(shí),F(xiàn)IFO指針在每個(gè)IFCLK的上升沿遞增;PKTEND:總是高電平,將當(dāng)前的緩沖區(qū)提交給上位機(jī)USB;FD[15:0]:數(shù)據(jù)總線;FIFOADR[2:0]:提供給與TMS320VC54X接口的FIFO地址選擇。
4 CY7C68001主要寄存器說明
命令接口寄存器:命令字的格式如表1所示:
表1 命令字的格式
A/D對(duì)應(yīng)地址/數(shù)據(jù),0 表示本次操作為數(shù)據(jù)讀或?qū)懀? 表示本次操作為地址寫 。 R/W表讀/寫操作選擇,0 寫操作,1 讀操作。A[5:0] 地址/數(shù)據(jù),當(dāng)A/D=0時(shí),A[3:0]為數(shù)據(jù)半字節(jié),A[5:4]未用。命令字為8位,命令字?jǐn)?shù)據(jù)分兩次讀出或?qū)懭?,對(duì)于每個(gè)字節(jié)而言,先讀寫高4位,后低4位。當(dāng)A/D=1時(shí),A[5:0]為將要尋址的命令寄存器地址。
端點(diǎn)配置寄存器(EPXCFG):對(duì)USB端點(diǎn)類型、方向和大小進(jìn)行配置。端點(diǎn)2、4、6和8共享8X512byte的RAM,通過配置,端點(diǎn)2、6分別享有2、3或4個(gè)512byte大小的緩沖區(qū),端點(diǎn)4、8最大只能配置成兩個(gè)緩沖區(qū)。本文使用默認(rèn)端點(diǎn)配置(每個(gè)端點(diǎn)對(duì)應(yīng)512B*2緩沖的Bulk配置)。EPXPKTLENH/L:端點(diǎn)緩沖區(qū)大小寄存器。FLAGSAB/FLAGSCD:FIFO引腳標(biāo)志分配寄存器。EPXPFH/L:確定每一端點(diǎn)對(duì)應(yīng)FIFO標(biāo)志大小的寄存器。
5 CY7C68001提供給DSP兩種軟件接口
(1)FIFO接口:CY7C68001內(nèi)部4Kbyte的RAM(8個(gè)512byte塊)通過編程,分配給EP2、EP4、EP6和EP8直接作為FIFO。
(2)命令接口:用于設(shè)置CY7C68001、讀狀態(tài)、加載描述符和訪問端點(diǎn)0 。
DSP通過對(duì)CY7C68001地址線FIFOADR[2:0]的訪問完成上述兩種接口,地址分配如表2:
表2 DSP對(duì)CY7C68001尋址
6 DSP與CY7C68001的通信
本部分包括DSP自身初始化、DSP對(duì)CY7C768001初始化、DSP協(xié)助HOST計(jì)算機(jī)枚舉CY7C68001、中斷處理以及對(duì)CY7C68001的各狀態(tài)監(jiān)控。由于本文使用CY7C68001默認(rèn)的描述符信息,所以在枚舉時(shí)只要提供廠商、產(chǎn)品及設(shè)備代碼(VD、PD、DD)即可,如果把這部分代碼燒寫到符合I2總線接口的EEPROM,并連接到CY7C68001的SCL、SDA引腳,USB枚舉時(shí),在SIE作用下,可以自動(dòng)完成枚舉。在DSP初始化中對(duì)I/O口等待狀態(tài)寄存器設(shè)置為7,以適應(yīng)同CY7C68001的數(shù)據(jù)交換。
CY7C68001的初始化:CY7C68001的初始化是通過對(duì)它的一系列寄存器進(jìn)行設(shè)置完成的。CY7C68001的地址FIFOADR[2:0]為100時(shí),選中CY7C68001的命令接口。通過CY7C68001的命令接口,可以訪問37個(gè)寄存器、端點(diǎn)零緩沖器(64個(gè)字節(jié)FIFO)和描述表(500bytes的FIFO)。對(duì)于這些寄存器、緩沖器和描述表的讀寫操作,根據(jù)上面的論述要分兩步進(jìn)行,即在READY有效時(shí),先向命令口寫入要尋址寄存器的子地址和操作類型(讀或?qū)懀?,之后,在READY再次有效時(shí)分兩次讀寫命令口,即可讀寫一個(gè)字節(jié)的數(shù)據(jù)。相應(yīng)讀寫時(shí)序(圖3、圖4)及代碼如下:
void WriteRegister (BYTE r, BYTE d) //寄存器號(hào)r,要寫入的數(shù)據(jù)d
{
low_level_command_write (0x04, (r | 0x80)); // bit7 = 1, bit6 = 0,寫請(qǐng)求
low_level_command_write (0x04, (d 0xF0) >> 4); //寫數(shù)據(jù)的高四位
low_level_command_write (0x04, (d 0x0F)); //寫數(shù)據(jù)的低四位
}
BYTE ReadRegister (BYTE r) //寄存器號(hào)r
{
BYTE d; //臨時(shí)變量d
read_interrupt = TRUE;
low_level_command_write (0x04, (r | 0x80 |
0x40)); //讀請(qǐng)求, bit7 = 1, bit6 = 1
while (read_interrupt) //等待 SX2 有數(shù)據(jù)
d = low_level_command_read (0x04);//讀數(shù)據(jù)
return (d);
}
FIFO標(biāo)志的獲?。篎LAGA-FLAGC的高低電平反映由FIFOADR[2:0]所選取的FIFO狀態(tài),F(xiàn)IFO標(biāo)志所代表的信息可以通過對(duì)FLAGSAB/FLAGSCD寄存器進(jìn)行編程配置,對(duì)FLAGX的獲取可以通過硬件中斷裁決,也可以通過對(duì)相應(yīng)狀態(tài)寄存器的查詢裁決,本文對(duì)FLAGA、FLAGB通過硬件中斷裁決,對(duì)FLAGC通過狀態(tài)寄存器的軟件查詢裁決。
有關(guān)中斷:CY7C68001有6個(gè)中斷源,可以分別通過對(duì)中斷使能寄存器的各位進(jìn)行設(shè)置,一旦中斷事件發(fā)生,CY7C68001的 引腳就被置低,并且置中斷使能寄存器的相應(yīng)位(即中斷使能寄存器同時(shí)充當(dāng)中斷標(biāo)志寄存器,中斷使能寄存器具有讀寫屬性)。當(dāng)中斷發(fā)生時(shí),中斷標(biāo)志寄存器的狀態(tài)字映射到FD[7:0],所以中斷發(fā)生后,DSP對(duì)CY7C68001簡(jiǎn)單的一次讀操作即可獲取中斷信息,識(shí)別中斷源并進(jìn)行相應(yīng)處理。相對(duì)于中斷標(biāo)志寄存器的讀操作,其它對(duì)CY7C68001寄存器的讀操作通常要先發(fā)送一次讀請(qǐng)求,并且收到READY響應(yīng)后,才可以讀取數(shù)據(jù)。
7 USB固件程序的組織
本設(shè)計(jì)主程序流程如圖5所示:
圖5 固件主程序流程圖
8結(jié)束語
在設(shè)計(jì)開發(fā)中,DSP固件程序的組織應(yīng)綜合考慮以中斷方式工作的USB通信部分和以查詢方式工作的DSP數(shù)據(jù)采集、控制部分。由于以中斷方式工作的USB通信程序隨時(shí)都可能打斷以查詢方式工作的DSP數(shù)據(jù)采集、控制程序,造成數(shù)據(jù)丟失,相位紊亂,我們采用CPLD進(jìn)行AD、DA邏輯控制,并運(yùn)用FIFO數(shù)據(jù)緩沖機(jī)制,減小了DSP壓力,取得了良好的效果。
本設(shè)計(jì)中,TMS320VC5402與CY7C68001接口之間采用異步信息交換。該方案對(duì)于使用其它微處理器開發(fā)基于CY7C68001的USB2.0接口,或在微處理器與CY7C68001之間采用同步信息交換也有良好的借鑒作用。
參考文獻(xiàn)
[1] EZ-USB SX2 High-Speed USB Interface Device CYPRESS JULY 13,2004
[2] TMS320C6000 EMIF to USB Interfacing Using Cypress EZ-USB SX2 TEXAS INSTRUMENTS MARCH 2004
[3] CY3682 Design Notes CYPRESS AUGUST 1,2002
評(píng)論