CY7C68001與TMS320VC5416的接口設(shè)計(jì)
近年來,隨著數(shù)字信號技術(shù)的發(fā)展,需要處理的數(shù)據(jù)量越來越大,處理的速度也越來越快,因此具有高速性能dsp芯片的應(yīng)用得到了廣泛重視。而通過dsp處理的數(shù)據(jù)往往要傳輸給pc機(jī)進(jìn)行存儲(chǔ)和再處理,那么就必須研究dsp與pc機(jī)之間的高速通信問題,所以今年發(fā)展起來的usb
2.0技術(shù)及其高速易擴(kuò)展等特點(diǎn)得到越來越廣泛的應(yīng)用,本文就是使用usb 2.0芯片cy7c68001和dsp芯片tms320vc5416來實(shí)現(xiàn)dsp與pc機(jī)通信的。
1 cy7c68001芯片特點(diǎn)描述
cy7c68001是用來連接微處理器或dsp的dma從裝置,其內(nèi)部不含微處理器;集成有usb2.0收發(fā)器(物理層)、usb2.0串行接口引擎sie(鏈路層、實(shí)現(xiàn)底層通信協(xié)議)、4kb的fifo和電壓調(diào)節(jié)器、鎖相環(huán);支持高速(480mb/s)或全速(12mb/s)傳輸;3.3v操作電壓,24mhz外部振蕩頻率;可以選擇8位或16位總線方式;具有同步與異步的fifo接口;他可以向用戶提供足夠的端口,緩沖區(qū)和傳輸速度,提供usb2.0協(xié)議要求的全部4種傳輸方式(控制傳輸、中斷傳輸、批量傳輸和同步傳輸),可以滿足用戶對各種類型數(shù)據(jù)傳輸?shù)男枨蟆F系拇薪涌谔幚砥鳎╯ie)能完成大部分的usb協(xié)議操作,使用戶可以擺脫復(fù)雜的協(xié)議細(xì)節(jié),簡化了用戶配置代碼,加快了程序開發(fā)過程。但是由于采用的是不帶mcu內(nèi)核的usb接口芯片,usb的應(yīng)用層協(xié)議應(yīng)該由tms320vc5416編程實(shí)現(xiàn),usb固件的加載必須靠dsp控制cy7c68001完成。
2 cy7c68001芯片寄存器
2.1 cy7c68001配置寄存器
usb的配置寄存器主要有ifconfig,flagsab,flagscd,polar,revid。ifconfig配置usb的接口方式;flagsab與flagscd確定flagx所代表的狀態(tài);polar確定fifo接口信號的極性;revid讀版本號。
2.2 endpoint配置寄存器
配置usb四個(gè)節(jié)點(diǎn),主要有epxcfg,epxpktlenh與epxpktlenl,epxpeh與epxpel,epxisoinpkts幾類寄存器(x的值為2,4,6,8):epxcfg配置每一個(gè)endpoint的類型;epxpktlenh與epxpktlen設(shè)置每個(gè)節(jié)點(diǎn)包的大?。籩pxpfh與epxpfl確定每個(gè)節(jié)點(diǎn)的可編程的標(biāo)志位;epxisoinpkts確定等時(shí)同步傳輸時(shí),每一幀的數(shù)據(jù)包個(gè)數(shù)。
2.3 狀態(tài)寄存器
狀態(tài)寄存器有ep24flags與ep68flags;ep24flags確定節(jié)點(diǎn)2與4的fifo的狀態(tài);ep68flags確定節(jié)點(diǎn)6與8的fifo的狀態(tài)。
2.4 usb幀狀態(tài)寄存器
usb總線配置寄存器主要有usbframeh、usbframel、microframe、fnaddr來確定usb每一幀的狀態(tài),usbframeeh/l寄存器確定每一幀的數(shù)據(jù)長度;microframe寄存器確定每一個(gè)微幀的數(shù)據(jù)個(gè)數(shù);fnaddr寄存器保存自舉時(shí)的7位地址。
2.5 節(jié)點(diǎn)0(endpoint0)操作寄存器
節(jié)點(diǎn)0(endpoint0)操作寄存器主要包括fp0buf,setup,ep0bc三個(gè)寄存器:ep0buf寄存器是節(jié)點(diǎn)0的緩沖寄存器,通過他可以完成對節(jié)點(diǎn)0數(shù)據(jù)的訪問;setup寄存器從計(jì)算機(jī)接收set-up數(shù)據(jù)包;ep0bc,節(jié)點(diǎn)0中的數(shù)據(jù)的個(gè)數(shù)。
2.6 其他寄存器
inpktend/flush寄存器強(qiáng)制數(shù)據(jù)包結(jié)束或清空fifo;interrupts寄存器為中斷使能寄存器;desc寄存器可以完成對描述表的操作。
3 tms320vc5416與cy7c68001的硬件接口
本設(shè)計(jì)將cy7c68001配置在tms320vc5416的i/o空間,采用cy7c68001的并行異步讀寫方式完成二者之間數(shù)據(jù)和命令的交換。其原理框圖如圖1所示。
cy7c68001除了存儲(chǔ)器接口外,還有1個(gè)中斷信號usbint反和4個(gè)狀態(tài)信號(ready,flaga,flagb和flagc),中斷信號usbint反,擴(kuò)展總線的xint2反,操作復(fù)用tms320vc5416的外部中斷int2反被配置在系統(tǒng)狀態(tài)寄存(sysstat1)中,可由tms320vc5416查詢,以確定真正的中斷源,狀態(tài)信號ready,flaga,flagb和flagc配置在本系統(tǒng)狀態(tài)寄存器0(sysstat0)中,可由tms320vc5416查詢,由于采用了cpld,增強(qiáng)了系統(tǒng)的靈活性和可擴(kuò)充性。在實(shí)際操作中,由于通信速度達(dá)到了480mb/s,所以采用4層板設(shè)計(jì),而且對電源要進(jìn)行很好的退耦處理,對dsp所需的16mhz有源晶振和cy7c68001用到的24mhz有源晶振要進(jìn)行鋪銅處理。
4 tms320vc5416對cy7c68001的操作
cy7c68001有2個(gè)外部接口:
(1)命令接口:用來訪問cy7c68001寄存器、endpoint0緩沖器及描述表;
(2)fifo數(shù)據(jù)接口:用來訪問4個(gè)1kb的fifo中的數(shù)據(jù)。
這兩個(gè)外部接口均可以通過同步或異步的方式進(jìn)行訪問。在本系統(tǒng)中均采用異步的方式進(jìn)行訪問的,命令口的命令字:
ad:地址/數(shù)據(jù)選擇,為0時(shí)表示本操作為數(shù)據(jù)讀或?qū)?,?時(shí)表示本操作為地址寫;
r/w:讀/寫操作選擇,為0時(shí)進(jìn)行寫,為1時(shí)進(jìn)行讀;
d[5:0]:地址/數(shù)據(jù),當(dāng)ad=0時(shí),d[3:0]為數(shù)據(jù)半字節(jié),d[5:4]未用,命令字為8位,故命令字?jǐn)?shù)據(jù)分二次讀出或?qū)懭?;?dāng)ad=1時(shí),d[5:0]包含將要尋址的命令寄存器的地址。
4.1 命令口的讀/寫操作
系統(tǒng)中cy7c68001作為tms320vc5416的外設(shè),占用tms320vc5416的i/o空間,地質(zhì)為0x0007-0x0000。地址分配如下:fifo2,fifo4,fifo6,fifo8和命令口的地址分別為000,001,010,011,100,而地址101,110,111則保留。cy7c68001的地址線fifoadr[2:0]為100b時(shí),選中cy7c68001的命令口。通過cy7c68001的命令口,可以訪問37個(gè)寄存器、endpoint0緩沖器(64個(gè)字節(jié)fifo)和描述表(500個(gè)字節(jié)fifo)等,如果將endpoint0緩沖器和描述表也看成是寄存器,那么單個(gè)命令口下內(nèi)含了眾多的寄存器,對這些寄存器進(jìn)行讀/寫訪問采用二次尋址方式,即首先通過命令口將要尋址寄存器子地址和操作類型(讀操作還是寫操作)寫入,然后再通過命令口將數(shù)據(jù)讀出或?qū)懭胂鄳?yīng)的寄存器,寫入命令口的內(nèi)容稱為命令字,命令字包含要尋址的寄存器的子地址,或是要寫入寄存器數(shù)據(jù)的高位4位或低4位,讀命令口必須在給命令口寫入命令字之后,所讀出的為相應(yīng)寄存器的8位數(shù)據(jù)。在這里,對寄存器的操作均以8位數(shù)據(jù)寬度進(jìn)行。
4.1.1 tms320vc5416對cy7c68001寄存器的寫操作過程
(1)將tms320vc5416對i/o空間訪問的等待周期設(shè)為7;
(2)通過檢查系統(tǒng)狀態(tài)寄存器0(sysstat0)位2(usbrdy)等待cy7c68001的ready線變高;
(3)尋址cy7c68001命令口(最低3位地址必須為100b),將10xx,xxxxb寫命令字寫入命令寄存器(xx,xxxxb代表需尋址的寄存器的子地址);
(4)通過檢查系統(tǒng)狀態(tài)寄存器0(sysstat0)位2(usbrdy)等待cy7c68001的ready線變高;
(5)尋址cy7c68001命令口(最低3位地址必須為100b),將0xxx,d7d6d5d4b數(shù)據(jù)高4位命令字寫入命令寄存器(d7d6d5d4b代表要寫入的數(shù)據(jù)的高4位);
(6)通過檢查系統(tǒng)狀態(tài)寄存器0(sysstat0)位2(usbrdy)等待cy7c68001的ready線變高;
(7)尋址cy7c68001命令(最低3位地址必須為100b),將0xxx,d3d2d1d0b數(shù)據(jù)低4位命令字寫入命令寄存器(d3d2d1d0b代表要寫入的數(shù)據(jù)的低4位)。
4.1.2 tms320vc5416對cy7c68001寄存器的讀操作過程
(1)tms320vc5416對i/o空間訪問的等待周期設(shè)為7;
(2)通過檢查系統(tǒng)狀態(tài)寄存器0(sysstat0)位2(usbrdy)等待cy7c68001的ready線變高;
(3)尋址cy7c68001命令口(最低3位地址必須為100b),將11xx,xxxxb讀命令字寫入命令寄存器(xx,xxxxb代表需尋址的寄存器的子地址);
(4)等cy7c68001申請tms320vc5416的外部中斷xint2反;
(5)尋址cy7c68001命令口(最低3位地址必須為100b),讀cy7c68001命令口。
4.2 fifo數(shù)據(jù)接口的操作
對數(shù)據(jù)接口的寫操作用到了sx2_fifowritesingle()函數(shù),負(fù)責(zé)向usb的數(shù)據(jù)緩沖區(qū)中寫數(shù)據(jù),由于這個(gè)寫程序是在主頻為160mhz時(shí)的設(shè)置,為了滿足數(shù)據(jù)保持時(shí)間最小為10ns,需要清空流水線,加入3個(gè)空操作nop,i/o系統(tǒng)的等待周期為2個(gè);對數(shù)據(jù)接口讀操作用到了函數(shù)sx2_fiforeadsingle(),例如從端口4讀一個(gè)字節(jié)
popm ah popm al pshm al pshm ah sub#1,a bc fifo_r3rd,aneq portr
usbfifo4,*ar0 popm ah popm al b fiforeadexit
另外,程序中用到了中斷函數(shù)int2_isr(),在讀周期,主機(jī)申請讀寄存器的值,此時(shí)產(chǎn)生中斷,從sx2讀進(jìn)數(shù)據(jù);
5 usb的編程
5.1 usb的初始化
cy7c68001有e2prom自舉和通過dsp自舉2種自舉方式,在本系統(tǒng)中這兩種方式均可以,一般采用e2prom來進(jìn)行usb的初始化,在e2prom中初始化的順序如下:
0xc4通知ez_usb sx2有一個(gè)有效的e2prom存在;
ifconfig 設(shè)置ifconfig寄存器,其函數(shù)為write_sx2reg();
polar設(shè)置各個(gè)信號的極性,其中slow,slrd,slwr只能由e2prom來配置;
descriptor 是否從e2prom中裝入初始化表。當(dāng)值為0xc4時(shí)裝入,反之等待master裝入;
descriptor length 這是兩個(gè)字節(jié)的空間,指示e2prom中descriptor的長度;
descriptor data 描述表的內(nèi)容,其函數(shù)為load_descriptors()。
usb的編程主要分為2個(gè)部分,一是host方面驅(qū)動(dòng)程序的編寫,一是有關(guān)dsp與usb數(shù)據(jù)與命令的交換,
5.2 host端程序
host端需要編寫usb設(shè)備驅(qū)動(dòng)程序和應(yīng)用程序。
usb設(shè)備驅(qū)動(dòng)程序主要是通過調(diào)用微軟的usbd.sys來實(shí)現(xiàn)pc機(jī)與usb總線的數(shù)據(jù)交換。因而usb設(shè)備驅(qū)動(dòng)程序主要完成的功能如下:
(1)對相應(yīng)的usb設(shè)備建立設(shè)備驅(qū)動(dòng)對象并完成對usb設(shè)備的初始化;
(2)完成usb設(shè)備的即插即用功能;
(3)完成usb設(shè)備電源的管理;
(4)實(shí)現(xiàn)對usbd.sys的調(diào)用,完成對usb設(shè)備的控制與數(shù)據(jù)的交換;
(5)實(shí)現(xiàn)對usb通訊措施的處理。
usb設(shè)備應(yīng)用程序主要用到以下幾個(gè)函數(shù):
opendriver()打開驅(qū)動(dòng)程序;
closedriver()關(guān)閉驅(qū)動(dòng)程序;
sx2getdevicedesc()獲取描述表;
sx2getconfigdesc()獲取配置說明;
sx2getpipeinfo()獲取接口信息;
sx2sendvendorreq()向usb發(fā)送請求;
sx2bulkdatatrans()在pc和usb間傳遞數(shù)據(jù)。
5.3 tms320vc5416端程序
tms320vc5416是通過其i/o口來完成cy7c68001的數(shù)據(jù)交換的,在這部分程序中主要完成以下功能:
(1)完成對命令接口的讀與寫;
(2)完成對fifo接口的讀與寫;
(3)完成tms320vc5416對usb的自舉;
(4)完成tms320vc5416與usb的控制命令的傳輸;
(5)完成tms320vc5416與usb的各種方式的數(shù)據(jù)傳輸。
6 結(jié)語
本文以tms320vc5416為核心,利用cy7c68001實(shí)現(xiàn)了usb2.0設(shè)備接口協(xié)議,試驗(yàn)證明該系統(tǒng)可以滿足高速信號處理的要求,并具有速度快和可靠性高等優(yōu)點(diǎn)。
評論