<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 模擬技術(shù) > 設計應用 > 基于ISP1581USB接口芯片的DMA傳輸應用

基于ISP1581USB接口芯片的DMA傳輸應用

—— DMA Transfer Application Based on ISP1581 USB Interface Chip
作者:陳新忠 中國電子科技集團公司第二十研究所 時(shí)間:2008-10-24 來(lái)源:電子產(chǎn)品世界 收藏

摘要:在USB接口和USB外設之間使用方式傳輸數據,大大提高了USB傳輸數據的吞吐量。本文介紹了基于USB接口芯片的傳輸應用。

本文引用地址:http://dyxdggzs.com/article/88962.htm

關(guān)鍵詞:;USB2.0;控制器;固件

引言

  隨著(zhù)USB2.0規范的推出,USB總線(xiàn)的最高數據傳輸速率可達到480Mbit/s,這進(jìn)一步延伸了它的使用范圍,越來(lái)越多的設計者在設計嵌入式系統或者計算機外圍設備時(shí)開(kāi)始采用USB總線(xiàn)進(jìn)行數據傳輸,為了保證高的數據傳輸速率,許多USB接口芯片提供了直接存儲器存取(DMA)方式,通過(guò)使用DMA方式,能使大量數據在計算機外圍設備與USB接口芯片之間直接傳輸,從而保證USB總線(xiàn)上數據的吞吐量。本文以Philips公司(現獨立為NXP公司)的USB接口芯片為例,介紹USB接口芯片的DMA傳輸應用。

硬件電路設計

  ISP1581是USB2.0接口芯片,它有7個(gè)IN端點(diǎn),7個(gè)OUT端點(diǎn)和1個(gè)固定的控制IN/OUT端點(diǎn),內部集成8K字節的多結構FIFO 存儲器,特別是它有一個(gè)靈活的高速DMA接口,大大增加了數據的吞吐量,其內部DMA組成框圖如圖1所示。


圖1  ISP1581DMA組成框圖

  DMA硬件由DMA接口及DMA控制器組成,通過(guò)初始化DMA相關(guān)寄存器及發(fā)送DMA命令可以選擇DMA的工作方式,即兩字節的通用DMA傳輸或者三字節的IDE規范傳輸,本文主要介紹通用DMA的應用,通用DMA有兩種工作方式,即主機DMA(MDMA)和從機DMA(GDMA)方式,MDMA時(shí)芯片內的DMA控制器作為主控方,由它產(chǎn)生DMA傳輸需要的控制時(shí)序,GDMA時(shí),需要在外部單獨設計一個(gè)DMA控制器(外設DMA控制器)并作為主控方,并由它產(chǎn)生傳輸所需控制時(shí)序。由于DMA控制器和USB 內核使用的是同一個(gè)FIFO(內部RAM),所以DMA 控制器接收到DMA命令后,可直接控制數據從內部RAM傳送到外部DMA設備或從外部DMA設備傳送到內部RAM。圖1中各信號的含意如下:

D0~D15:DMA傳輸數據線(xiàn),雙向。
DREQ:DMA請求信號,GDMA時(shí)輸出,MDMA時(shí)輸入。
DACK:DMA應答信號,GDMA時(shí)輸入,MDMA時(shí)輸出。
DIOR:DMA讀信號,GDMA時(shí)輸入,MDMA時(shí)輸出。
DIOW:DMA寫(xiě)信號,GDMA時(shí)輸入,MDMA時(shí)輸出。
EOT:GDMA傳送終止信號,輸入,主要用在GDMA方式。

  其它信號主要用在IDE規范傳輸中,在此不作介紹。由于GDMA方式數據傳輸速度更高且使用靈活,所以下面主要介紹GDMA的應用。


圖2  DMA從機方式應用原理框圖

  圖2是GDMA應用框圖,是某自動(dòng)測試設備數字I/O板的一部分,圖中 ISP1581外接單片機(AT89C55)作為控制器,單片機同時(shí)也是該板的控制核心,存儲器選用256K×18bit雙口RAM(IDT70V631),ISP1581采用GDMA方式讀寫(xiě)該雙口RAM,外設DMA控制器在可編程器件FPGA中實(shí)現。

  系統的工作過(guò)程是:當主控計算機需要和數字I/O板大批量交換數據時(shí),向ISP1581發(fā)出批量傳輸命令,批量傳輸命令中包含了數據的傳輸方向,數據個(gè)數等信息,ISP1581接收到命令后,通過(guò)中斷方式通知單片機中的固件讀取該命令,固件完成對DMA的初始化,如選擇DMA端點(diǎn),初始化DMA計數器,發(fā)送DMA命令等,ISP1581內部的DMA控制器在準備好后,將發(fā)出DREQ信號給外設DMA控制器,外設DMA控制器接收到DREQ信號后,做好數據傳輸準備,回應一個(gè)DACK信號,然后產(chǎn)生DIOR或者DIOW完成DMA傳輸。

  外設DMA控制器是在FPGA中完成設計的,要正確設計GDMA控制器必需了解GDMA模式的工作時(shí)序(見(jiàn)圖3)。圖中已經(jīng)初始化DREQ高有效,DACK低有效,DIOR和DIOW低有效,Tcy1為DMA讀寫(xiě)周期,最快為12.8MHz,本設計使用10MHz。Tsu3為DIOR/DIOW有效前的DACK建立時(shí)間,最小可以為0。


圖3 GDMA從機模式時(shí)序

  外設DMA控制器電路設計如圖4所示,當固件對ISP1581完成初始化并發(fā)出DMA傳輸命令后,ISP1581內部的DMA控制器在準備好傳輸后發(fā)出DREQ信號(高電平),對該信號反相后可作為DACK信號(低電平),圖中R/信號為DMA讀寫(xiě)控制信號,可以由固件控制產(chǎn)生,該信號和DACK及10MHz時(shí)鐘信號相或后產(chǎn)生DIOR及DIOW信號。例如GDMA工作于寫(xiě)方式,數據從ISP1581內部RAM傳送到外部雙口RAM,控制器在接收到有效的DREQ信號后,經(jīng)過(guò)反相,作為DACK信號回應ISP1581的DMA控制器,這時(shí)候固件通過(guò)控制R/W為高,該信號反相后與DACK及10MHz時(shí)鐘相或產(chǎn)生DIOR,控制數據從內部RAM傳送到外部雙口RAM。雙口RAM的控制信號及地址產(chǎn)生電路設計較為簡(jiǎn)單,可以結合DIOR及DIOW信號來(lái)產(chǎn)生。


圖4  DMA控制電路圖

軟件設計

  USB固件中實(shí)現DMA傳輸的相關(guān)程序包括初始化程序及傳輸控制程序,其信息處理流程如圖5所示。

  首先對DMA進(jìn)行初始化,即設置一系列相關(guān)寄存器:DMA配置寄存器、DMA硬件寄存器、DMA中斷使能寄存器、DMA中斷源寄存器、DMA端點(diǎn)寄存器、DMA傳輸計數器寄存器、DMA命令寄存器等,初始化程序如下:

void DMA_Init(void)
{
//GDMA
D14_Cntrl_Reg.D14_D MA_COMMAND=0x11; //DMA復位
//設置DMA配置寄存器
//GDMA,16bit數據,DIOR/DIOW有效,允許DMA計數器,DREQ一直保持到傳完數據
D14_Cntrl_Reg.D14_GDMA _CONFIG.VALUE=0x01;
D14_Cntrl_Reg.D14_UDM A_CONFIG.VALUE=0;
//設置DMA硬件寄存器
//DIOR/DIOW低電平有效,DREQ高電平有效,DACK低有效,GDMA從機方式,EOT低有效,正常數據
D14_Cntrl_Reg.D14_DMA _HARDWARE.VALUE=0x04;
//設置DMA中斷使能寄存器
//DMA傳輸計數器為零中斷,檢測到一個(gè)外部或者內部EOT中斷
D14_Cntrl_Reg.D14_DMA_INT_E NABLE.VALUE=0x000d; 
}

  初始化完成后,接收PC機發(fā)來(lái)的DMA傳輸命令,該命令包含了數據的傳輸方向,數據個(gè)數等信息,然后設置DMA傳輸標志,主程序在檢測到該標志后,調用DMA傳輸子程序,在該子程序中,根據DMA傳輸方向情況分別進(jìn)行DMA讀寫(xiě)處理,在發(fā)出DMA讀或者寫(xiě)命令前還需要對DMA端點(diǎn)寄存器、DMA傳輸計數器寄存器進(jìn)行初始化,完成這些工作后,ISP1581DMA控制器將向外設DMA控制器發(fā)送DMA傳輸請求信號DREQ,外設在準備好傳輸后,返回應答信號DACK,然后啟動(dòng)外設DMA控制器開(kāi)始DMA傳輸,一次DMA傳輸最大1024個(gè)字節,一次是否傳輸完成通過(guò)檢測DMA中斷寄存器的標志位DMA_XFER_OK及EXT_EOT進(jìn)行判斷,DMA_XFER_OK為1,表明DMA傳輸結束,EXT_EOT是強行結束GDMA傳輸的外部信號,本設計沒(méi)有使用,已經(jīng)固定接為高電平(無(wú)效狀態(tài)),如果需要傳輸的數據大于1024字節,則需要多次傳輸才能完成,在傳輸完成后清除DMA傳輸標志。


圖5  GDMA固件信息處理流程圖

結語(yǔ)

  通過(guò)采用DMA傳輸方式,USB在傳輸不大于1024字節數據時(shí)傳輸速度達到10M字/秒,但當需要傳輸的數據遠大于1024字節時(shí),由于DMA傳輸需要固件支持,實(shí)際的傳輸速度有所下降,設計中可以通過(guò)提高單片機的工作時(shí)鐘來(lái)改善USB的傳輸速度。本設計已經(jīng)成功應用到某測試設備中,提高了系統的數據傳輸速度,達到設計要求。

參考文獻:
1. Philips Semiconductors公司,ISP1581 Programming Guide [EB/OL],(2002年3月).http://www.flexiusb.com
2. 廣州周立功單片機發(fā)展有限公司,ISP1581:USB2.0高速接口器件,[EB/OL].http://www.zlgmcu.com
3. 劉瑰、馬鳴錦、朱鴻宇,基于USB接口芯片的DMA應用,電子技術(shù),2004,(2)
4. 孫涵芳、徐愛(ài)卿,單片機原理及應用,北京航天航空大學(xué)出版社,1996
5. 蕭世文、宋延清,USB2.0硬件設計,清華大學(xué)出版社,2006



關(guān)鍵詞: DMA ISP1581 200810

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>