1.2dma寄存器組描述
dma控制器共有8個32位寄存器,其中5個為當(dāng)前有效的寄存器,另外3個為以后擴(kuò)展所用。寄存器的映射表如表1所示。 表1dma控制器內(nèi)部寄存器映射表
偏移量寄存器名稱功能0狀態(tài)寄存器指示dma控制器內(nèi)部 的詳細(xì)情況1源地址寄存器讀取數(shù)據(jù)的起始地址2目的地址寄存器寫入數(shù)據(jù)的起始地址3數(shù)據(jù)長度寄存器從讀端口傳輸?shù)?寫端口的字節(jié)數(shù)6控制寄存器設(shè)置dma的工作方式
狀態(tài)寄存器的每個狀態(tài)位指示dma控制器內(nèi)部的詳細(xì)情況。
位編號位名稱描述0donedma傳輸完成。當(dāng)檢測到數(shù)據(jù)包結(jié)束信號或指定長度的數(shù)據(jù)傳輸完成時,done位為1。寫0到狀態(tài)寄存器使done位為0。1busy當(dāng)dma傳輸正在進(jìn)行時,busy位為12reop當(dāng)傳輸完成事件由讀數(shù)據(jù)包結(jié)束信號引起時,reop位為13weop當(dāng)傳輸完成事件由寫數(shù)據(jù)包結(jié)束信號引起時,weop位為14len當(dāng)長度寄存器遞減為0時,len位為1.
源地址寄存器指定dma傳輸?shù)臄?shù)據(jù)源的起始地址;目的地址寄存器指定了dma傳輸?shù)哪繕?biāo)數(shù)據(jù)區(qū)的起始地址;數(shù)據(jù)長度寄存器指定從讀端口傳輸?shù)綄懚丝诘淖止?jié)數(shù)。如果是字傳輸,則數(shù)據(jù)長度寄存器的值需乘以4;若為半字傳輸,則需乘以2。主控制器寫端口每寫一個字節(jié)數(shù)據(jù)時,數(shù)據(jù)長度寄存器減1。當(dāng)數(shù)據(jù)長度寄存器為0時,狀態(tài)寄存器的len位置位;控制寄存器每個位設(shè)定dma的工作方式。控制寄存器每個位的意義如表3所示。dma傳輸?shù)臄?shù)據(jù)寬度用字節(jié)、半字、字、雙字和4字位指定。這些位只能有一位設(shè)置為1。數(shù)據(jù)傳輸?shù)膶挾扔?個讀/寫傳輸設(shè)備中傳輸寬度窄的一方?jīng)Q定。例如,將數(shù)據(jù)從16位的外部sdram存儲器中搬移到內(nèi)部32位的片內(nèi)存儲器時,傳輸數(shù)據(jù)寬度應(yīng)該設(shè)置為半字。
表3控制寄存器位
位編號位名稱描述0byte設(shè)置為字節(jié)(8位)方式傳輸1hw設(shè)置為半字(16位)方式傳輸2word設(shè)置為字(32位)方式傳輸3go使能dma傳輸。當(dāng)設(shè)置為1且數(shù)據(jù)長度寄存器不為0時,開始dma傳輸4i_en使能中斷(irq)。當(dāng)i_en為1時,若狀態(tài)寄存器的done位也為1,則dma控制器產(chǎn)生中斷請求。5reen終止讀數(shù)據(jù)傳輸。6ween終止寫數(shù)據(jù)傳輸。7leen數(shù)據(jù)長度寄存器為0時傳輸結(jié)束。當(dāng)leen位為1時,若數(shù)據(jù)長度寄存器達(dá)到0時,則結(jié)束dma傳輸。8rcon讀地址固定。當(dāng)rcon為0時,讀地址在每次數(shù)據(jù)傳輸后增加;當(dāng)rcon為1時,讀地址在每次數(shù)據(jù)傳輸后不增加。9wcon寫地址固定。當(dāng)wcon為0時,寫地址在每次數(shù)據(jù)傳輸后增加;當(dāng)wcon為1時,寫地址在每次數(shù)據(jù)傳輸后不增加。10doubleword設(shè)置為雙字(64位)方式傳輸。11quadword設(shè)置為4字(128位)方式傳輸。
1.3軟件編程
altera 提供了hal dma設(shè)備的驅(qū)動程序[45],該驅(qū)動程序把dma傳輸抽象成2種數(shù)據(jù)通道:發(fā)送數(shù)據(jù)通道和接收數(shù)據(jù)通道。當(dāng)存儲器從外設(shè)接收數(shù)據(jù)時,使用數(shù)據(jù)接收通道;當(dāng)存儲器向外設(shè)發(fā)送數(shù)據(jù)時,使用數(shù)據(jù)發(fā)送通道;當(dāng)存儲器間進(jìn)行數(shù)據(jù)傳輸時,既要使用數(shù)據(jù)接收通道又要使用數(shù)據(jù)發(fā)送通道。與dma發(fā)送數(shù)據(jù)通道相關(guān)的函數(shù)有
alt_dma_txchan_open(),alt_dma_txchan_send(),
alt_dma_txchan_space(),alt_dma_txchan_ioctl(),
alt_dma_txchan_close();而與dma接收數(shù)據(jù)通道相關(guān)的函數(shù)
alt_dma_rxchan_open(),alt_dma_rxchan_prerare(),
alt_dma_rxchan_depth(),alt_dma_rxchan_ioctl()。
alt_dma_txchan_open()和alt_dma_rxchan_open()
函數(shù)分別打開dma控制器的發(fā)送數(shù)據(jù)通道和接收數(shù)據(jù)通道,獲得dma控制器的發(fā)送數(shù)據(jù)通道和接收數(shù)據(jù)通道的句柄,返回非0值表示成功。
調(diào)用alt_dma_txchan_send()函數(shù)產(chǎn)生一次dma發(fā)送數(shù)據(jù)請求。其函數(shù)原型為int alt_dma_txchan_send(alt_dma_txchan dma,const void* from ,alt_u32 length, alt_ txchan_done* done ,void* handle)。調(diào)用此函數(shù)時,length字節(jié)長度的數(shù)據(jù)將從地址from處被發(fā)送。當(dāng)發(fā)送結(jié)束時,函數(shù)返回值為非負(fù)則表示dma傳輸成功,否則表示傳輸失敗。當(dāng)傳輸結(jié)束時,回調(diào)函數(shù)done將被執(zhí)行,handle為函數(shù)done的參數(shù)。
dma接收函數(shù)的用法與dma發(fā)送函數(shù)的用法大致相同,其函數(shù)原型為 int alt_dma_rxchan_prepare(alt_dma_rxchan dma,const void* data ,alt_u32 length, alt_ txchan_done* done ,void* handle)。參數(shù)data表示dma接收數(shù)據(jù)存放的起始地址。length表示接收數(shù)據(jù)的長度,單位為字節(jié)。函數(shù)返回值為非負(fù)表示接收成功。當(dāng)接收結(jié)束時,回調(diào)函數(shù)done將被執(zhí)行,handle為函數(shù)done的參數(shù)。另外,與發(fā)送通道和接收通道相關(guān)的還各有2個函數(shù)。與發(fā)送通道相關(guān)的函數(shù)為alt_dma_txchan_space()和alt_dma_txchan_ioctl()。alt_dma_txchan_space()返回傳送到dma發(fā)送信道的發(fā)送請求數(shù)目。alt_dma_txchan_ioctl()則是執(zhí)行了與器件相關(guān)的控制操作。與接收通道相關(guān)的函數(shù)為:
alt_dma_rxchan_depth()和alt_dma_rxchan_ioctl()。alt_dma_rxchan_depth()函數(shù)返回dma接收通道的最大接收請求數(shù)。alt_dma_rxchan_ioctl()執(zhí)行了與器件相關(guān)的控制操作。
2、dma控制器應(yīng)用舉例
在軟硬件的調(diào)試過程中,有時需要將內(nèi)存中的一段數(shù)據(jù)通過串口打印出來,作為調(diào)試信息,這時就可利用dma技術(shù)進(jìn)行數(shù)據(jù)傳輸。圖2為在sopc builder中構(gòu)建的dma傳輸?shù)挠布B接圖,實現(xiàn)了sdram到串口的數(shù)據(jù)傳輸。
圖2硬件連接圖如下的程序?qū)崿F(xiàn)了將sdram中以chr為起始地址的20個字節(jié)的數(shù)據(jù)通過dma方式發(fā)送到串口。其實現(xiàn)的核心代碼如下:
3、結(jié)語
在某雷達(dá)信號網(wǎng)絡(luò)化數(shù)字傳輸系統(tǒng)的研制中,將雷達(dá)信號接口單元與網(wǎng)絡(luò)接口單元分別映射為nios ⅱ系統(tǒng)中的2個外設(shè),利用外設(shè)間的dma方式進(jìn)行數(shù)據(jù)傳輸。實踐證明,利用dma方式進(jìn)行數(shù)據(jù)傳輸,cpu可從繁重的數(shù)據(jù)傳輸工作中釋放出來,提高了cpu進(jìn)行數(shù)據(jù)處理的能力。
評論