覃洪英
(長江大學(xué)電子信息學(xué)院 湖北荊州)
基于NiosII的DMA傳輸及調(diào)試
覃洪英
(長江大學(xué)電子信息學(xué)院 湖北荊州)
文章通過波碼開關(guān)上的數(shù)據(jù)向SDRAM的DMA傳輸,介紹了基于NiosII進(jìn)行DMA傳輸?shù)倪^程及調(diào)試方法。在定制一個(gè)包含DMA控制器的SOPC系統(tǒng)時(shí),需對DMA控制器硬件進(jìn)行相關(guān)參數(shù)配置;在軟件編程時(shí)需根據(jù)DMA傳輸中源地址和目的地址是外設(shè)和存儲器的不同,分別選擇開啟發(fā)送和接收通道;在NiosIIIDE中加載μC/OS-II操作系統(tǒng),指定了文件的存放路徑,則可在文件中觀察傳輸?shù)臄?shù)據(jù)。
NiosII;DMA傳輸;波碼開關(guān);SDRAM
在一般的程序控制傳送方式(包括查詢與中斷方式)下,數(shù)據(jù)從存儲器送到外設(shè)、或從外設(shè)送到存儲器,都要經(jīng)過CPU的累加器中轉(zhuǎn),再加上檢查是否傳送完畢以及修改內(nèi)存地址等操作都由程序控制,要花費(fèi)不少時(shí)間。采用DMA傳送方式是讓存儲器與外設(shè)、存儲器與存儲器之間直接交換數(shù)據(jù),不需要經(jīng)過累加器,減少了中間環(huán)節(jié),并且內(nèi)存地址的修改,傳送完畢的結(jié)果報(bào)告都由硬件完成,因此大大提高了傳輸速度。隨著信息技術(shù)的發(fā)展,處理和傳輸?shù)臄?shù)據(jù)量越來越大,DAM傳輸在視頻采集、處理和傳輸及通信等領(lǐng)域具有十分重要的應(yīng)用價(jià)值[1]。
NiosII是Altera公司推出的第二代軟核嵌入式處理器,除NiosII處理器外,Altera公司還提供了基于該處理器進(jìn)行SOPC系統(tǒng)開發(fā)的串行接口核、三態(tài)橋、SRAM控制器、DM9000A網(wǎng)絡(luò)控制器等標(biāo)準(zhǔn)外圍設(shè)備。為滿足大量數(shù)據(jù)的快速傳輸,Altera公司在SOPC Builder中還提供了DMA控制器核。同時(shí),為了方便用戶編程,NiosIIIDE還在HAL中為用戶提供了包括DMA控制器等標(biāo)準(zhǔn)外設(shè)的驅(qū)動(dòng)程序?;谶@些外圍設(shè)備或自定制外設(shè),則可進(jìn)行SOPC系統(tǒng)開發(fā),以實(shí)現(xiàn)視頻控制、網(wǎng)絡(luò)控制、DMA傳輸?shù)裙δ躘2、3]。
在SOPCBuilder中定制包含DMA控制器的SOPC系統(tǒng),添加NiosIICPU、添加連接片外8MSDRAM的SDRAM控制器、連接片外4Mflash的cfi-flash控制器、系統(tǒng)標(biāo)識符sysid、實(shí)現(xiàn)PC和NiosII系統(tǒng)間串行通信的調(diào)試接口jtag_uart、通用異步收發(fā)器uart、系統(tǒng)定時(shí)器time_0和 time_1、連接cfi_flash控制器的 tristate_bridge及發(fā)光二極管、撥碼開關(guān)switch_pio等常用的標(biāo)準(zhǔn)外圍設(shè)備。
DMA控制器通過2個(gè)主端口和1個(gè)從端口來控制DMA傳輸。從端口為Avalon從端口,負(fù)責(zé)與Avalon總線通過地址線、數(shù)據(jù)線、控制線、中斷等相連接;2個(gè)主端口為主設(shè)備讀端口和主設(shè)備寫端口,負(fù)責(zé)DMA傳輸?shù)臄?shù)據(jù)讀/寫操作。
在SOPCBuilder中添加DMA控制器核,使用DMA控制器配置向?qū)?。硬件配置的參?shù)如下:
①DMA長度寄存器 該參數(shù)值可選范圍為1~32位,表示單次DMA傳輸數(shù)據(jù)的最大值。這里可以使用缺省值32位,即滿足所有從外設(shè)的傳輸要求。
②主設(shè)備讀/寫端口間的FIFO緩沖器實(shí)現(xiàn)方式
考慮到如使用從寄存器構(gòu)建FIFO,當(dāng)DMA控制器數(shù)據(jù)寬度較大(如32位)時(shí),將對邏輯資源的占用有很大影響。因此選擇從存儲塊來構(gòu)建FIFO,由FPGA中的嵌入式存儲塊實(shí)現(xiàn)。
③DMA硬件支持的數(shù)據(jù)傳送寬度 在DMA傳輸中,根據(jù)需要選擇合適的傳輸寬度,沒有必要進(jìn)行其他數(shù)據(jù)寬度的傳輸,因此在配制向?qū)У腁dvanced選項(xiàng)卡中勾選需傳輸?shù)臄?shù)據(jù)寬度,禁止其他數(shù)據(jù)寬度的傳輸,這樣可以節(jié)省邏輯資源。
這里考慮利用DMA傳輸將波碼開關(guān)上的數(shù)據(jù)傳輸?shù)絊DRAM,以觀察DMA的傳輸過程。故在SOPC Builder中需將DMA的read_master連接到switch_pio;將DMA的write_master連接到sdram。整個(gè)SOPC硬件系統(tǒng)的系統(tǒng)時(shí)鐘是100MHz,SDRAM時(shí)序要求將DE2所提供的50MHz時(shí)鐘延時(shí)3ns或者相位延遲60°處理之后作為 SDRAM的時(shí)鐘輸入DRAM_CLK。這個(gè)時(shí)鐘延遲可以用鎖相環(huán)產(chǎn)生。
DMA傳輸不需要CPU的參與,源和目標(biāo)可以是內(nèi)存也可以是設(shè)備,在NiosII中通過基于 HAL編程完成,即三種基本的DMA傳輸:設(shè)備到存儲器傳輸、存儲器到存儲器的傳輸和存儲器到設(shè)備的傳輸。
在NiosII的HALDMA設(shè)備模式中,DMA傳輸被分為兩類:transmit和receive。NiosII提供兩種設(shè)備驅(qū)動(dòng)實(shí)現(xiàn)transmitchannels和 receivechannels。transmit channels把緩沖區(qū)數(shù)據(jù)發(fā)送到目標(biāo)設(shè)備,receivechannels讀取設(shè)備數(shù)據(jù)存放到緩沖區(qū)。
在數(shù)據(jù)從源地址到目標(biāo)地址的傳送中。對于地址的操作方式,一種是地址自增,另一種是地址固定。就是說DMA控制器讀或?qū)懲暌粋€(gè)數(shù)據(jù)后,對地址增加模式,下次讀寫下一個(gè)地址;對地址固定模式,下次還是讀寫同一個(gè)地址。由于地址固定模式一般是用在外設(shè),所以在Nios的文檔中,使用地址固定模式的一方就稱為設(shè)備(Peripheral),而使用地址自增模式的一方則稱為存儲器(Memory)。
在HAL的API中,對于地址自增一方,需要打開一個(gè)接收或發(fā)送的Channel,然后配置地址;而如果是地址固定的一方,則不需要打開一個(gè)Channel,只需要用alt_dma_rxchan_ioctl()的ALT_DMA_RX_ONLY_ON 或ALT_DMA_TX_ONLY_ON參數(shù)設(shè)置,并配置地址即可。
將波碼開關(guān)上的數(shù)據(jù)通過DMA傳輸?shù)絊DRAM的過程屬于設(shè)備到存儲器的傳輸,應(yīng)用程序的設(shè)計(jì)需要打開DMA設(shè)備、開啟DMA接收通道、發(fā)送接收請求,從而實(shí)現(xiàn)波碼開關(guān)上的數(shù)據(jù)通過DMA設(shè)備向SDRAM的傳輸。為了觀察傳輸?shù)絊DRAM的數(shù)據(jù),這里在NiosⅡIDE的文件系統(tǒng)屬性設(shè)置中加上μC/OS-Ⅱ操作系統(tǒng)[4]。當(dāng)指定大小的數(shù)據(jù)傳輸完成后,可以利用μC/OS-Ⅱ操作系統(tǒng)的文件管理系統(tǒng)將SDRAM中的數(shù)據(jù)以二進(jìn)制的形式寫到指定的文件中。要完成此功能,需在NiosⅡIDE中按圖1對指定文件的掛載點(diǎn)進(jìn)行設(shè)置,然后在應(yīng)用程序代碼中增加如下語句:
最后利用相關(guān)的軟件(如WinHex)打開 switch_pio.bin文件,則可觀察到傳輸數(shù)據(jù)的十六進(jìn)制形式。
圖1 讀寫文件的位置設(shè)定
圖2 所示是在μC/OS-II操作系統(tǒng)下控制波碼開關(guān)上的數(shù)據(jù)通過DMA向SDRAM傳輸?shù)膽?yīng)用程序調(diào)試結(jié)果,從運(yùn)行結(jié)果可看到,DMA接收通道已成功開啟,且存儲在SDRAM中的數(shù)據(jù)已成功寫入到switch_pio.bin文件中。根據(jù)圖1所示讀寫文件的掛載點(diǎn)可知,switch_pio.bin文件與應(yīng)用程序在同一路徑下。
圖2 μC/OS-II操作系統(tǒng)下波碼開關(guān)數(shù)據(jù)通過DMA向SDRAM傳輸?shù)能浖{(diào)試結(jié)果
DE2開發(fā)板上波碼開關(guān)SW17~SW0設(shè)定的數(shù)據(jù)是11_1010_0100_0100_1111,系統(tǒng)調(diào)試后,在WinHex軟件中打開switch_pio.bin文件,觀察到圖3所示數(shù)據(jù),比較可知圖3中的數(shù)據(jù)與波碼開關(guān)的初始設(shè)定值完全一致。這說明波碼開關(guān)上的數(shù)據(jù)到SDRAM的DMA傳輸成功,且數(shù)據(jù)傳輸正確。
圖3 switch_pio.bin文件中的數(shù)據(jù)
在NiosII上使用DMA可實(shí)現(xiàn)海量數(shù)據(jù)的嵌入式處理,在模式識別、視頻控制等領(lǐng)域中具有重要的應(yīng)用價(jià)值。基于NiosII的DMA傳輸根據(jù)源地址和目的地址是外設(shè)和存儲器的不同,分外設(shè)到存儲器、存儲器到外設(shè)和存儲器到存儲器三種傳輸方式。外設(shè)到存儲器的傳輸需開啟接收通道,存儲器到外設(shè)的傳輸需開啟發(fā)送通道,存儲器到存儲器的傳輸既要開啟發(fā)送通道,又要開啟接收通道。利用QuartusII中的邏輯分析儀可觀察到DAM傳輸數(shù)據(jù)的波形,要將傳輸?shù)臄?shù)據(jù)寫入文件,通過打開文件來觀察更多的數(shù)據(jù),則需要在NiosIIIDE中加載μC/OS-II操作系統(tǒng),并指定文件的存放路徑。
[1] 劉樂善.微型計(jì)算機(jī)接口技術(shù)及應(yīng)用[M].武漢:華中科技大學(xué)出版社,2000
[2] 周立功,等.SOPC嵌入式系統(tǒng)基礎(chǔ)教程[M].北京:北京航空航天大學(xué)出版社,2006
[3] 楊 進(jìn),邱兆坤.SOPC中自定義FIFO接口與DMA數(shù)據(jù)傳輸[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2008,(8)
[4] Altera.NiosIISoftwareDeveloper′sHandbook[DB/OL].May2008.http://www.Altera.com
TN919.6
B
1004-9134(2010)03-0087-03
2009-10-21 編輯:劉雅銘)
覃洪英,女,1979年生,碩士,講師,長江大學(xué)電子信息學(xué)院工作,主要研究方向:視頻通信。郵編:434023