《無(wú)線傳感器網(wǎng)絡(luò)》課件 5.11 DMA_第1頁(yè)
《無(wú)線傳感器網(wǎng)絡(luò)》課件 5.11 DMA_第2頁(yè)
《無(wú)線傳感器網(wǎng)絡(luò)》課件 5.11 DMA_第3頁(yè)
《無(wú)線傳感器網(wǎng)絡(luò)》課件 5.11 DMA_第4頁(yè)
《無(wú)線傳感器網(wǎng)絡(luò)》課件 5.11 DMA_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

5.11DMA

DMA是directmemoryaccess的縮寫,即“直接內(nèi)存存取”。這是一種高速的數(shù)據(jù)傳輸模式,ADC/UART/RF收發(fā)器等外設(shè)單元和存儲(chǔ)器之間可以直接在“DMA控制器”的控制下交換數(shù)據(jù)而幾乎不需要CPU的干預(yù)。除了在數(shù)據(jù)傳輸開始和結(jié)束時(shí)做一點(diǎn)處理外,在傳輸過(guò)程中CPU可以進(jìn)行其他的工作。這樣,在大部分時(shí)間里,CPU和這些數(shù)據(jù)交互處于并行工作狀態(tài)。因此,系統(tǒng)的整體效率可以得到很大的提高。DMA控制器有5個(gè)通道,即DMA通道0到通道4。每個(gè)DMA通道能夠從DMA存儲(chǔ)器空間的一個(gè)位置傳送數(shù)據(jù)到另一個(gè)位置,比如XDATA位置之間。當(dāng)DMA通道配置完畢后,在允許任何傳輸發(fā)起之前,必須進(jìn)入工作狀態(tài)。DMA通道通過(guò)將DMA通道工作狀態(tài)寄存器DMAARM中指定位置1,就可以進(jìn)入工作狀態(tài)。一旦DMA通道進(jìn)入工作狀態(tài),當(dāng)配置的DMA觸發(fā)事件發(fā)生時(shí),DMA傳送就開始了??赡艿腄MA觸發(fā)事件有32個(gè),例如UART傳輸、定時(shí)器溢出等。DMA通道要使用的觸發(fā)事件由DMA通道配置設(shè)置,因此直到配置被讀取之后,才能知道。DMA操作(1)源地址DMA通道開始讀數(shù)據(jù)的地址,在XDATA存儲(chǔ)器中。這可以是任何XDATA地址——在RAM中,在映射的閃存區(qū)(cfMEMCTR.XBANK)中,XREG或XDATA尋址的。(2) 目標(biāo)地址DMA通道從源地址讀出的要寫數(shù)據(jù)的首地址。用戶必須確認(rèn)該目標(biāo)地址可寫。這可以是任何XDATA地址——在RAM、XREG或XDATA尋址的SFR中。(3) 傳送數(shù)量DMA傳輸完成之前必須傳送的字節(jié)/字的個(gè)數(shù)。當(dāng)達(dá)到傳送數(shù)量,DMA通道重新進(jìn)入工作狀態(tài)或者解除工作狀態(tài),并警告CPU即將有中斷請(qǐng)求到來(lái)。傳送數(shù)量可以在配置中定義,或可以采用可變長(zhǎng)度。(4)VLEN設(shè)置DMA配置參數(shù)(5)DMA通道可以利用源數(shù)據(jù)中的第一個(gè)字節(jié)或字(對(duì)于字,使用位12:0)作為傳送長(zhǎng)度。這允許可變長(zhǎng)度的傳輸。當(dāng)使用可變長(zhǎng)度傳送時(shí),要給出關(guān)于如何計(jì)算要傳輸?shù)淖止?jié)數(shù)的各種選項(xiàng)。在任何情況下,都是設(shè)置傳送長(zhǎng)度(LEN)為傳送的最大長(zhǎng)度。如果首字節(jié)或字指明的傳輸長(zhǎng)度大于LEN,那么LEN個(gè)字節(jié)/字將被傳輸。當(dāng)使用可變長(zhǎng)度傳輸,那么LEN應(yīng)設(shè)置位允許傳輸?shù)淖畲箝L(zhǎng)度加一。注意,僅在選擇字節(jié)長(zhǎng)度傳送數(shù)據(jù)時(shí)才可以使用M8 位(見8.2.11節(jié))??梢酝琕LEN一起設(shè)置的選項(xiàng)如下:1)傳輸首字節(jié)/字規(guī)定的個(gè)數(shù)+1字節(jié)/字(先傳輸字節(jié)/字的長(zhǎng)度,然后按照字節(jié)/字長(zhǎng)度指定的傳輸盡可能多的字節(jié)/字)2)傳輸首字節(jié)/字規(guī)定的字節(jié)/字3)傳輸首字節(jié)/字規(guī)定的個(gè)數(shù)+2字節(jié)/字(先傳輸字節(jié)/字的長(zhǎng)度,然后按照字節(jié)/字長(zhǎng)度指定+1傳輸盡可能多的字節(jié)/字)4)傳輸首字節(jié)/字規(guī)定的個(gè)數(shù)+3字節(jié)/字(先傳輸字節(jié)/字的長(zhǎng)度,然后按照字節(jié)/字長(zhǎng)度指定+2傳輸盡可能多的字節(jié)/字)

DMA配置參數(shù)(6)源和目標(biāo)增量當(dāng)DMA通道進(jìn)入工作狀態(tài)或者重新進(jìn)入工作狀態(tài)時(shí),源地址和目標(biāo)地址傳送到內(nèi)部地址指針。其地址增量可能有下列4種:增量為0。每次傳送之后,地址指針將保持不變。增量為l。每次傳送之后,地址指針將加上1個(gè)數(shù)。增量為2。每次傳送之后,地址指針將加上2個(gè)數(shù)。 減量為 1。每次傳送之后,地址指針將減去1個(gè)數(shù)。其中一個(gè)數(shù)在字節(jié)模式下等于1個(gè)字節(jié),在字模式下等于2個(gè)字節(jié)。 減量為 1。每次傳送之后,地址指針將減去1個(gè)數(shù)。其中一個(gè)數(shù)在字節(jié)模式下等于1個(gè)字節(jié),在字模式下等于2個(gè)字節(jié)。(7)DMA傳輸模式傳輸模式確定當(dāng)DMA通道開始傳輸數(shù)據(jù)時(shí)是如何工作的。以下描述了四種傳輸模式:?jiǎn)我荒J剑好慨?dāng)觸發(fā)時(shí),發(fā)生一個(gè)DMA 傳送,DMA通道等待下一個(gè)觸發(fā)。完成指定的傳送長(zhǎng)度后,傳送結(jié)束,通報(bào)CPU,解除DMA通道的工作狀態(tài)。塊模式:每當(dāng)觸發(fā)時(shí),按照傳送長(zhǎng)度指定的若干DMA傳送被盡快傳送,此后,通報(bào)CPU,解除DMA通道的工作狀態(tài)。重復(fù)的單一模式:每當(dāng)觸發(fā)時(shí),發(fā)生一個(gè)DMA傳送,DMA通道等待下一個(gè)觸發(fā)。完成指定的傳送長(zhǎng)度后,傳送結(jié)束,通報(bào)CPU,且DMA通道重新進(jìn)入工作狀態(tài)。重復(fù)的塊模式:每當(dāng)觸發(fā)時(shí),按照傳送長(zhǎng)度指定的若干DMA傳送被盡快傳送,此后通報(bào)CPU,DMA通道重新進(jìn)入工作狀態(tài)。DMA配置參數(shù)(8)DMA優(yōu)先級(jí)DMA優(yōu)先級(jí)別對(duì)每個(gè)DMA通道是可以配置的。DMA優(yōu)先級(jí)別用于判定同時(shí)發(fā)生的多個(gè)內(nèi)部存儲(chǔ)器請(qǐng)求中的哪一個(gè)優(yōu)先級(jí)最高,以及DMA存儲(chǔ)器存取的優(yōu)先級(jí)別是否超過(guò)同時(shí)發(fā)生的CPU存儲(chǔ)器存取的優(yōu)先級(jí)別。在同屬內(nèi)部關(guān)系的情況下,采用輪轉(zhuǎn)調(diào)度方案應(yīng)對(duì),確保所有的存取請(qǐng)求。有三種級(jí)別的DMA優(yōu)先級(jí):高級(jí):最高內(nèi)部?jī)?yōu)先級(jí)別。DMA存取總是優(yōu)先于CPU存取。一般級(jí):中等內(nèi)部?jī)?yōu)先級(jí)別。保證DMA存取至少在每秒一次的嘗試中優(yōu)先于CPU存取。低級(jí):最低內(nèi)部?jī)?yōu)先級(jí)別。DMA存取總是劣于CPU存取。(9)字節(jié)或字傳輸判定已經(jīng)完成的傳送究竟是8 位(字節(jié))還是16位(字)。(10)中斷屏蔽在完成DMA傳送的基礎(chǔ)上,該DMA通道能夠產(chǎn)生一個(gè)中斷到處理器。這個(gè)位可以屏蔽該中斷。(11)模式8設(shè)置這個(gè)域的值,決定是采用7位還是8位長(zhǎng)的字節(jié)來(lái)傳送數(shù)據(jù)。此模式僅僅適用于字節(jié)傳送。DMA配置參數(shù)停止DMA傳輸使用DMAARM寄存器來(lái)解除DMA通道工作狀態(tài),停止正在運(yùn)行的DMA傳送或進(jìn)入工作狀態(tài)的DMA。將1寫入DMAARM.ABORT寄存器位,就會(huì)停止一個(gè)或多個(gè)進(jìn)入工作狀態(tài)的DMA通道,同時(shí)通過(guò)設(shè)置相應(yīng)的DMAARM.DMAARMx為1選擇停止哪個(gè)DMA通道。當(dāng)設(shè)置DMAARM.ABORT為1,非停止通道的DMAARM.DMAARMx位必須寫入0。DMA中斷每個(gè)DMA通道可以配置為一旦完成DMA傳送,就產(chǎn)生中斷到CPU。該功能由IRQMASK位在通道配置時(shí)實(shí)現(xiàn)。當(dāng)中斷產(chǎn)生時(shí),寄存器DMAIRQ中所對(duì)應(yīng)的中斷標(biāo)志位置1。當(dāng)然要處理DMA中斷需要設(shè)置DMAIE=1和EA=1;一旦DMA通道完成傳送,不管在通道配置中IRQMASK位是何值,中斷標(biāo)志都會(huì)置1。這樣,當(dāng)通道重新進(jìn)入工作狀態(tài)且IRQMASK的設(shè)置改變時(shí),軟件必須總是清除這個(gè)寄存器相應(yīng)位。DMA配置安裝實(shí)驗(yàn)現(xiàn)象:程序運(yùn)行后,在LCD上顯示提示信息,按S1鍵,DMA傳輸開始,如果傳輸成功顯示提示信息。實(shí)驗(yàn)1:DMA傳輸1)對(duì)于DMA傳輸來(lái)說(shuō),DMA配置參數(shù)非常重要,在dma.h文件中定義了以下結(jié)構(gòu)體#pragmabitfields=reversedtypedefstruct{charSRCADDRH;charSRCADDRL;charDESTADDRH;

charDESTADDRL;charVLEN:3;charLENH:5;

charLENL:8;charWORDSIZE:1;charTMODE:2;charTRIG:5;charSRCINC:2;charDESTINC:2;charIRQMASK:1;charM8:1;charPRIORITY:2;}DMA_DESC;在定義此結(jié)構(gòu)體時(shí),用到了很多冒號(hào)(:),后面還跟著一個(gè)數(shù)字,這種語(yǔ)法叫“位域”:位域是指信息在存儲(chǔ)時(shí),并不需要占用一個(gè)完整的字節(jié),而只需占幾個(gè)或一個(gè)二進(jìn)制位。例如在存放一個(gè)開關(guān)量時(shí),只有0和1兩種狀態(tài),用一位二進(jìn)位即可。為了節(jié)省存儲(chǔ)空間,并使處理簡(jiǎn)便,C語(yǔ)言提供了一種數(shù)據(jù)結(jié)構(gòu),稱為“位域”或“位段”。所謂“位域”是把一個(gè)字節(jié)中的二進(jìn)位劃分為幾個(gè)不同的區(qū)域,并說(shuō)明每個(gè)區(qū)域的位數(shù)。每個(gè)域有一個(gè)域名,允許在程序中按域名進(jìn)行操作。這樣就可以把幾個(gè)不同的對(duì)象用一個(gè)字節(jié)的二進(jìn)制位域來(lái)表示。配置DMA:首先必須配置DMA,但DMA的配置比較特殊:不是直接對(duì)某些SFR賦值,而是在外部定義一個(gè)結(jié)構(gòu)體,對(duì)其賦值,然后再將此結(jié)構(gòu)體的首地址的高8位賦給

DMA0CFGH,將其低8位賦給

DMA0CFGL。程序分析:2)定義一個(gè)結(jié)構(gòu)體,對(duì)其賦值//設(shè)置DMA通道.SET_WORD(dmaChannel.SRCADDRH,dmaChannel.SRCADDRL,&sourceString);//設(shè)置源數(shù)據(jù)的地址

SET_WORD(dmaChannel.DESTADDRH,dmaChannel.DESTADDRL,&destString);//設(shè)置源目的地址.SET_WORD(dmaChannel.LENH,dmaChannel.LENL,sizeof(sourceString));//設(shè)置傳輸?shù)拈L(zhǎng)度.dmaChannel.VLEN=0;//設(shè)置傳輸?shù)膭?dòng)態(tài)長(zhǎng)度.dmaChannel.PRIORITY=0x02;//設(shè)置優(yōu)先級(jí).dmaChannel.M8=0;//字節(jié)傳輸時(shí)是8位.dmaChannel.IRQMASK=0;//DMA中斷屏蔽

dmaChannel.DESTINC=0x01;//設(shè)置目的地址增量

dmaChannel.SRCINC=0x01;//設(shè)置源地址增量.dmaChannel.TRIG=0;//設(shè)置觸發(fā)方式為手動(dòng)觸發(fā).dmaChannel.TMODE=0x01;//每一次DMA觸發(fā),傳送長(zhǎng)度為L(zhǎng)EN的塊

dmaChannel.WORDSIZE=0x00;//一次DMA傳送一個(gè)字節(jié)程序分析:3)將結(jié)構(gòu)體的首地址的高8位賦給

DMA0CFG

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論