基于ISP1581USB接口芯片的DMA傳輸應(yīng)用
摘要:在USB接口和USB外設(shè)之間使用DMA方式傳輸數(shù)據(jù),大大提高了USB傳輸數(shù)據(jù)的吞吐量。本文介紹了基于ISP1581USB接口芯片的DMA傳輸應(yīng)用。
本文引用地址:http://www.ex-cimer.com/article/88962.htm關(guān)鍵詞:ISP1581;USB2.0;DMA控制器;固件
引言
隨著USB2.0規(guī)范的推出,USB總線的最高數(shù)據(jù)傳輸速率可達(dá)到480Mbit/s,這進(jìn)一步延伸了它的使用范圍,越來越多的設(shè)計者在設(shè)計嵌入式系統(tǒng)或者計算機(jī)外圍設(shè)備時開始采用USB總線進(jìn)行數(shù)據(jù)傳輸,為了保證高的數(shù)據(jù)傳輸速率,許多USB接口芯片提供了直接存儲器存取(DMA)方式,通過使用DMA方式,能使大量數(shù)據(jù)在計算機(jī)外圍設(shè)備與USB接口芯片之間直接傳輸,從而保證USB總線上數(shù)據(jù)的吞吐量。本文以Philips公司(現(xiàn)獨(dú)立為NXP公司)的ISP1581USB接口芯片為例,介紹USB接口芯片的DMA傳輸應(yīng)用。
硬件電路設(shè)計
ISP1581是USB2.0接口芯片,它有7個IN端點,7個OUT端點和1個固定的控制IN/OUT端點,內(nèi)部集成8K字節(jié)的多結(jié)構(gòu)FIFO 存儲器,特別是它有一個靈活的高速DMA接口,大大增加了數(shù)據(jù)的吞吐量,其內(nèi)部DMA組成框圖如圖1所示。
圖1 ISP1581DMA組成框圖
DMA硬件由DMA接口及DMA控制器組成,通過初始化DMA相關(guān)寄存器及發(fā)送DMA命令可以選擇DMA的工作方式,即兩字節(jié)的通用DMA傳輸或者三字節(jié)的IDE規(guī)范傳輸,本文主要介紹通用DMA的應(yīng)用,通用DMA有兩種工作方式,即主機(jī)DMA(MDMA)和從機(jī)DMA(GDMA)方式,MDMA時芯片內(nèi)的DMA控制器作為主控方,由它產(chǎn)生DMA傳輸需要的控制時序,GDMA時,需要在外部單獨(dú)設(shè)計一個DMA控制器(外設(shè)DMA控制器)并作為主控方,并由它產(chǎn)生傳輸所需控制時序。由于DMA控制器和USB 內(nèi)核使用的是同一個FIFO(內(nèi)部RAM),所以DMA 控制器接收到DMA命令后,可直接控制數(shù)據(jù)從內(nèi)部RAM傳送到外部DMA設(shè)備或從外部DMA設(shè)備傳送到內(nèi)部RAM。圖1中各信號的含意如下:
D0~D15:DMA傳輸數(shù)據(jù)線,雙向。
DREQ:DMA請求信號,GDMA時輸出,MDMA時輸入。
DACK:DMA應(yīng)答信號,GDMA時輸入,MDMA時輸出。
DIOR:DMA讀信號,GDMA時輸入,MDMA時輸出。
DIOW:DMA寫信號,GDMA時輸入,MDMA時輸出。
EOT:GDMA傳送終止信號,輸入,主要用在GDMA方式。
其它信號主要用在IDE規(guī)范傳輸中,在此不作介紹。由于GDMA方式數(shù)據(jù)傳輸速度更高且使用靈活,所以下面主要介紹GDMA的應(yīng)用。
圖2 DMA從機(jī)方式應(yīng)用原理框圖
圖2是GDMA應(yīng)用框圖,是某自動測試設(shè)備數(shù)字I/O板的一部分,圖中 ISP1581外接單片機(jī)(AT89C55)作為控制器,單片機(jī)同時也是該板的控制核心,存儲器選用256K×18bit雙口RAM(IDT70V631),ISP1581采用GDMA方式讀寫該雙口RAM,外設(shè)DMA控制器在可編程器件FPGA中實現(xiàn)。
系統(tǒng)的工作過程是:當(dāng)主控計算機(jī)需要和數(shù)字I/O板大批量交換數(shù)據(jù)時,向ISP1581發(fā)出批量傳輸命令,批量傳輸命令中包含了數(shù)據(jù)的傳輸方向,數(shù)據(jù)個數(shù)等信息,ISP1581接收到命令后,通過中斷方式通知單片機(jī)中的固件讀取該命令,固件完成對DMA的初始化,如選擇DMA端點,初始化DMA計數(shù)器,發(fā)送DMA命令等,ISP1581內(nèi)部的DMA控制器在準(zhǔn)備好后,將發(fā)出DREQ信號給外設(shè)DMA控制器,外設(shè)DMA控制器接收到DREQ信號后,做好數(shù)據(jù)傳輸準(zhǔn)備,回應(yīng)一個DACK信號,然后產(chǎn)生DIOR或者DIOW完成DMA傳輸。
外設(shè)DMA控制器是在FPGA中完成設(shè)計的,要正確設(shè)計GDMA控制器必需了解GDMA模式的工作時序(見圖3)。圖中已經(jīng)初始化DREQ高有效,DACK低有效,DIOR和DIOW低有效,Tcy1為DMA讀寫周期,最快為12.8MHz,本設(shè)計使用10MHz。Tsu3為DIOR/DIOW有效前的DACK建立時間,最小可以為0。
圖3 GDMA從機(jī)模式時序
外設(shè)DMA控制器電路設(shè)計如圖4所示,當(dāng)固件對ISP1581完成初始化并發(fā)出DMA傳輸命令后,ISP1581內(nèi)部的DMA控制器在準(zhǔn)備好傳輸后發(fā)出DREQ信號(高電平),對該信號反相后可作為DACK信號(低電平),圖中R/信號為DMA讀寫控制信號,可以由固件控制產(chǎn)生,該信號和DACK及10MHz時鐘信號相或后產(chǎn)生DIOR及DIOW信號。例如GDMA工作于寫方式,數(shù)據(jù)從ISP1581內(nèi)部RAM傳送到外部雙口RAM,控制器在接收到有效的DREQ信號后,經(jīng)過反相,作為DACK信號回應(yīng)ISP1581的DMA控制器,這時候固件通過控制R/W為高,該信號反相后與DACK及10MHz時鐘相或產(chǎn)生DIOR,控制數(shù)據(jù)從內(nèi)部RAM傳送到外部雙口RAM。雙口RAM的控制信號及地址產(chǎn)生電路設(shè)計較為簡單,可以結(jié)合DIOR及DIOW信號來產(chǎn)生。
圖4 DMA控制電路圖
軟件設(shè)計
USB固件中實現(xiàn)DMA傳輸?shù)南嚓P(guān)程序包括初始化程序及傳輸控制程序,其信息處理流程如圖5所示。
首先對DMA進(jìn)行初始化,即設(shè)置一系列相關(guān)寄存器:DMA配置寄存器、DMA硬件寄存器、DMA中斷使能寄存器、DMA中斷源寄存器、DMA端點寄存器、DMA傳輸計數(shù)器寄存器、DMA命令寄存器等,初始化程序如下:
void DMA_Init(void)
{
//GDMA
D14_Cntrl_Reg.D14_D MA_COMMAND=0x11; //DMA復(fù)位
//設(shè)置DMA配置寄存器
//GDMA,16bit數(shù)據(jù),DIOR/DIOW有效,允許DMA計數(shù)器,DREQ一直保持到傳完數(shù)據(jù)
D14_Cntrl_Reg.D14_GDMA _CONFIG.VALUE=0x01;
D14_Cntrl_Reg.D14_UDM A_CONFIG.VALUE=0;
//設(shè)置DMA硬件寄存器
//DIOR/DIOW低電平有效,DREQ高電平有效,DACK低有效,GDMA從機(jī)方式,EOT低有效,正常數(shù)據(jù)
D14_Cntrl_Reg.D14_DMA _HARDWARE.VALUE=0x04;
//設(shè)置DMA中斷使能寄存器
//DMA傳輸計數(shù)器為零中斷,檢測到一個外部或者內(nèi)部EOT中斷
D14_Cntrl_Reg.D14_DMA_INT_E NABLE.VALUE=0x000d;
}
初始化完成后,接收PC機(jī)發(fā)來的DMA傳輸命令,該命令包含了數(shù)據(jù)的傳輸方向,數(shù)據(jù)個數(shù)等信息,然后設(shè)置DMA傳輸標(biāo)志,主程序在檢測到該標(biāo)志后,調(diào)用DMA傳輸子程序,在該子程序中,根據(jù)DMA傳輸方向情況分別進(jìn)行DMA讀寫處理,在發(fā)出DMA讀或者寫命令前還需要對DMA端點寄存器、DMA傳輸計數(shù)器寄存器進(jìn)行初始化,完成這些工作后,ISP1581DMA控制器將向外設(shè)DMA控制器發(fā)送DMA傳輸請求信號DREQ,外設(shè)在準(zhǔn)備好傳輸后,返回應(yīng)答信號DACK,然后啟動外設(shè)DMA控制器開始DMA傳輸,一次DMA傳輸最大1024個字節(jié),一次是否傳輸完成通過檢測DMA中斷寄存器的標(biāo)志位DMA_XFER_OK及EXT_EOT進(jìn)行判斷,DMA_XFER_OK為1,表明DMA傳輸結(jié)束,EXT_EOT是強(qiáng)行結(jié)束GDMA傳輸?shù)耐獠啃盘枺驹O(shè)計沒有使用,已經(jīng)固定接為高電平(無效狀態(tài)),如果需要傳輸?shù)臄?shù)據(jù)大于1024字節(jié),則需要多次傳輸才能完成,在傳輸完成后清除DMA傳輸標(biāo)志。
圖5 GDMA固件信息處理流程圖
結(jié)語
通過采用DMA傳輸方式,USB在傳輸不大于1024字節(jié)數(shù)據(jù)時傳輸速度達(dá)到10M字/秒,但當(dāng)需要傳輸?shù)臄?shù)據(jù)遠(yuǎn)大于1024字節(jié)時,由于DMA傳輸需要固件支持,實際的傳輸速度有所下降,設(shè)計中可以通過提高單片機(jī)的工作時鐘來改善USB的傳輸速度。本設(shè)計已經(jīng)成功應(yīng)用到某測試設(shè)備中,提高了系統(tǒng)的數(shù)據(jù)傳輸速度,達(dá)到設(shè)計要求。
參考文獻(xiàn):
1. Philips Semiconductors公司,ISP1581 Programming Guide [EB/OL],(2002年3月).http://www.flexiusb.com
2. 廣州周立功單片機(jī)發(fā)展有限公司,ISP1581:USB2.0高速接口器件,[EB/OL].http://www.zlgmcu.com
3. 劉瑰、馬鳴錦、朱鴻宇,基于USB接口芯片的DMA應(yīng)用,電子技術(shù),2004,(2)
4. 孫涵芳、徐愛卿,單片機(jī)原理及應(yīng)用,北京航天航空大學(xué)出版社,1996
5. 蕭世文、宋延清,USB2.0硬件設(shè)計,清華大學(xué)出版社,2006
評論