一、DMA控制器介紹
DMA控制器是一種在系統(tǒng)內(nèi)部轉(zhuǎn)移數(shù)據(jù)的獨(dú)特外設(shè),可以將其視為一種能夠通過一組專用總線將內(nèi)部和外部存儲(chǔ)器與每個(gè)具有DMA能力的外設(shè)連接起來的控制器。它之所以屬于外設(shè),是因?yàn)樗窃?a target="_blank">處理器的編程控制下來 執(zhí)行傳輸?shù)摹?/p>
傳輸結(jié)構(gòu)與設(shè)置
目前有兩類主要的DMA傳輸結(jié)構(gòu):寄存器模式和描述符模式。無論屬于哪一類DMA,表1的幾種信息都會(huì)在DMA控制器中出現(xiàn)。當(dāng)DMA以寄存器模式工作時(shí),DMA控制器只是簡單地利用寄存器中所存儲(chǔ)的參數(shù)值。在描述符模式中,DMA控制器在存儲(chǔ)器中查找自己的配置參數(shù)。
?。?)基于寄存器的DMA
在基于寄存器的DMA內(nèi)部,處理器直接對(duì)DMA控制寄存器進(jìn)行編程,來啟動(dòng)傳輸?;诩拇嫫鞯腄MA提供了最佳的DMA控制器性能,因?yàn)榧拇嫫鞑⒉恍枰粩嗟貜拇鎯?chǔ)器中的描述符上載入數(shù)據(jù),而內(nèi)核也不需要保持描述符。基于寄存器的DMA由兩種子模式組成:自動(dòng)緩沖(Autobuffer)模式和停止模式。在自動(dòng)緩沖DMA中,當(dāng)一個(gè)傳輸塊傳輸完畢,控制寄存器就自動(dòng)重新載入其最初的設(shè)定值,同一個(gè)DMA進(jìn)程重新啟動(dòng),開銷為零。如果將一個(gè)自動(dòng)緩沖DMA設(shè)定為從外設(shè)傳輸一定數(shù)量的字到 L1數(shù)據(jù)存儲(chǔ)器的緩沖器上,則DMA控制器將會(huì)在最后一個(gè)字傳輸完成的時(shí)刻就迅速重新載入初始的參數(shù)。這構(gòu)成了一個(gè)“循環(huán)緩沖器”,因?yàn)楫?dāng)一個(gè)量值被寫入 到緩沖器的最后一個(gè)位置上時(shí),下一個(gè)值將被寫入到緩沖器的第一個(gè)位置上。
自動(dòng)緩沖DMA特別適合于對(duì)性能敏感的、存在持續(xù)數(shù)據(jù)流的應(yīng)用。DMA控制器可以在獨(dú)立于處理器其他活動(dòng)的情況下讀入數(shù)據(jù)流,然后在每次傳輸結(jié)束時(shí),向內(nèi)核發(fā)出中斷。
停止模式的工作方式與自動(dòng)緩沖DMA類似,區(qū)別在于各寄存器在DMA結(jié)束后不會(huì)重新載入,因 此整個(gè)DMA傳輸只發(fā)生一次。停止模式對(duì)于基于某種事件的一次性傳輸來說十分有用。例如,非定期地將數(shù)據(jù)塊從一個(gè)位置轉(zhuǎn)移到另一個(gè)位置。當(dāng)你需要對(duì)事件進(jìn) 行同步時(shí),這種模式也非常有用。例如,如果一個(gè)任務(wù)必須在下一次傳輸前完成的話,則停止模式可以確保各事件發(fā)生的先后順序。此外,停止模式對(duì)于緩沖器的初 始化來說非常有用。
?。?)描述符模型
基于描述符(descriptor)的DMA要求在存儲(chǔ)器中存入一組參數(shù),以 啟動(dòng)DMA的系列操作。該描述符所包含的參數(shù)與那些通常通過編程寫入DMA控制寄存器組的所有參數(shù)相同。不過,描述符還可以容許多個(gè)DMA操作序列串在一 起。在基于描述符的DMA操作中,我們可以對(duì)一個(gè)DMA通道進(jìn)行編程,在當(dāng)前的操作序列完成后,自動(dòng)設(shè)置并啟動(dòng)另一次DMA傳輸。基于描述符的方式為管理 系統(tǒng)中的DMA傳輸提供了最大的靈活性。
基本組成
(1)內(nèi)存地址計(jì)數(shù)器:用于存放內(nèi)存中要交換的數(shù)據(jù)的地址。在 DMA傳送前,須通過程序?qū)?shù)據(jù)在內(nèi)存中的起始位置(首地址)送到內(nèi)存地址計(jì)數(shù)器。而當(dāng) DMA 傳送時(shí),每交換一次數(shù)據(jù),將地址計(jì)數(shù)器加“1”,從而以增量方式給出內(nèi)存中要交換的一批數(shù)據(jù)的地址。
?。?)字計(jì)數(shù)器:用于記錄傳送數(shù)據(jù)塊的長度(多少字?jǐn)?shù))。其內(nèi)容也是在數(shù)據(jù)傳送之前由程序預(yù)置,交換的字?jǐn)?shù)通常以補(bǔ)碼形式表示。在DMA傳送時(shí),每傳送一個(gè)字,字計(jì)數(shù)器就加“1”。當(dāng)計(jì)數(shù)器溢出即最高位產(chǎn)生進(jìn)位時(shí),表示這批數(shù)據(jù)傳送完畢,于是引起DMA控制器向CPU發(fā)出中斷信號(hào)。
?。?)數(shù)據(jù)緩沖寄存器:用于暫存每次傳送的數(shù)據(jù)(一個(gè)字)。當(dāng)輸入時(shí),由設(shè)備(如磁盤)送往數(shù)據(jù)緩沖寄存器,再由緩沖寄存器通過數(shù)據(jù)總線送到內(nèi)存。反之,輸出時(shí),由內(nèi)存通過數(shù)據(jù)總線送到數(shù)據(jù)緩沖寄存器,然后再送到設(shè)備。
?。?)DMA請(qǐng)求”標(biāo)志:每當(dāng)設(shè)備準(zhǔn)備好一個(gè)數(shù)據(jù)字后給出一個(gè)控制信號(hào),使“DMA
請(qǐng)求”標(biāo)志置“1”。該標(biāo)志置位后向“控制/狀態(tài)”邏輯發(fā)出DMA請(qǐng)求,后者又向CPU發(fā)出總線使用權(quán)的請(qǐng)求(HOLD),CPU響應(yīng)此請(qǐng)求后發(fā)回響應(yīng)信號(hào)HLDA,“控制/狀態(tài)”邏輯接收此信號(hào)后發(fā)出DMA響應(yīng)信號(hào),使“DMA 請(qǐng)求”標(biāo)志復(fù)位,為交換下一個(gè)字做好準(zhǔn)備。
(5)控制/狀態(tài)”邏輯:由控制和時(shí)序電路以及狀態(tài)標(biāo)志等組成,用于修改內(nèi)存地址計(jì)數(shù)器和字計(jì)數(shù)器,指定傳送類型(輸入或輸出),并對(duì)“DMA請(qǐng)求”信號(hào)和CPU響應(yīng)信號(hào)進(jìn)行協(xié)調(diào)和同步。
?。?)中斷機(jī)構(gòu):當(dāng)字計(jì)數(shù)器溢出時(shí),意味著一組數(shù)據(jù)交換完畢,由溢出信號(hào)觸發(fā)中斷機(jī)構(gòu),向CPU提出中斷報(bào)告。
二、NiosⅡ介紹
Nios Ⅱ嵌入式處理器是ALTERA公司推出的采用哈佛結(jié)構(gòu)、具有32位指令集的第二代片上可編程的軟核處理器, 其最大優(yōu)勢和特點(diǎn)是模塊化的硬件結(jié)構(gòu), 以及由此帶來的靈活性和可裁減性。
NiosⅡ特點(diǎn)
Nios II系列支持使用專用指令。專用指令是用戶增加的硬件模塊,它增加了算術(shù)邏輯單元(ALU)。用戶能為系統(tǒng)中使用的每個(gè)Nios II處理器創(chuàng)建多達(dá)256個(gè)專用指令,這使得設(shè)計(jì)者能夠細(xì)致地調(diào)整系統(tǒng)硬件以滿足性能目標(biāo)。專用指令邏輯和本身Nios II指令相同,能夠從多達(dá)兩個(gè)源寄存器取值,可選擇將結(jié)果寫回目標(biāo)寄存器。同時(shí),Nios II系列支持60多個(gè)外設(shè)選項(xiàng),開發(fā)者能夠選擇合適的外設(shè),獲得最合適的處理器、外設(shè)和接口組合,而不必支付根本不使用的硅片功能。 Nios II系列能夠滿足任何應(yīng)用32位嵌入式微處理器的需要,客戶可以將第一代Nios處理器設(shè)計(jì)移植到某種Nios II處理器上,Altera將長期支持現(xiàn)有FPGA系列上的第一代Nios處理器。另外,Altera提供了一鍵式移植選項(xiàng),可以升級(jí)至Nios II系列。Nios II處理器也能夠在HardCopy器件中實(shí)現(xiàn),Altera還為基于Nios II處理器的系統(tǒng)提供ASIC的移植方式。
開發(fā)環(huán)境
Nios II處理器具有完善的軟件開發(fā)套件,包括編譯器、集成開發(fā)環(huán)境(IDE)、JTAG調(diào)試器、實(shí)時(shí)操作系統(tǒng)(RTOS)和TCP/IP協(xié)議棧。設(shè)計(jì)者能夠用Altera Quartus II開發(fā)軟件中的SOPC Builder系統(tǒng)開發(fā)工具很容易地創(chuàng)建專用的處理器系統(tǒng),并能夠根據(jù)系統(tǒng)的需求添加Nios II處理器核的數(shù)量。
使用Nios II軟件開發(fā)工具能夠?yàn)镹ios II系統(tǒng)構(gòu)建軟件,即一鍵式自動(dòng)生成適用于系統(tǒng)硬件的專用C/C++運(yùn)行環(huán)境。Nios II集成開發(fā)環(huán)境(IDE)提供了許多軟件模板,簡化了項(xiàng)目設(shè)置。此外,Nios II開發(fā)套件包括兩個(gè)第三方實(shí)時(shí)操作系統(tǒng)(RTOS)——MicroC/OS-II(Micrium),Nucleus Plus(ATI/Mentor)以及供網(wǎng)絡(luò)應(yīng)用使用的TCP/IP協(xié)議棧。
三、NiosⅡ系統(tǒng)中DMA控制器的原理及應(yīng)用
1、dma控制器的原理
1.1dma功能介紹
nios ⅱ中的dma控制器包含2個(gè)avalonmm類型的主控制器端口(讀端口和寫端口),1個(gè)用于dma控制avalonmm類型的從端口以及內(nèi)部一些寄存器組所構(gòu)成,其結(jié)構(gòu)圖如圖1所示。
? ? ? ?圖1dma控制器的結(jié)構(gòu)圖dma控制器可以將數(shù)據(jù)從源地址搬移到目的地址。源地址或者目的地址可以是存儲(chǔ)器中的一段地址范圍也可以是avalon從控制器的外設(shè)。因此,在nios ⅱ系統(tǒng)中,存在3種類型的dma操作,即存儲(chǔ)器到外設(shè),外設(shè)到存儲(chǔ)器以及存儲(chǔ)器到存儲(chǔ)器。dma控制器還具備流處理能力,允許固定或者可變長度的數(shù)據(jù)傳輸。當(dāng)dma操作結(jié)束時(shí),dma控制器發(fā)出中斷(irq)請(qǐng)求。典型的dma數(shù)據(jù)傳輸過程如下:
?。?) cpu通過寫控制端口配置dma控制器用于數(shù)據(jù)傳輸;
?。?) dma控制器向cpu發(fā)出hold信號(hào)請(qǐng)求占用總線;
?。?) cpu響應(yīng)dma控制器的請(qǐng)求,并讓出總線,dma控制器獲得總線的控制權(quán);
?。?) dma控制器讀端口從源地址讀數(shù)據(jù),寫端口向目的地址寫數(shù)據(jù),讀寫端口間利用fifo緩存數(shù)據(jù);
?。?) 當(dāng)傳輸完指定的數(shù)據(jù)時(shí),dma傳輸結(jié)束并向nios ⅱ cpu發(fā)出中斷請(qǐng)求;
?。?) cpu響應(yīng)中斷請(qǐng)求,dma交出總線控制權(quán)。
評(píng)論
查看更多