第12章直接存儲器訪問(DMA)模塊_第1頁
第12章直接存儲器訪問(DMA)模塊_第2頁
第12章直接存儲器訪問(DMA)模塊_第3頁
第12章直接存儲器訪問(DMA)模塊_第4頁
第12章直接存儲器訪問(DMA)模塊_第5頁
已閱讀5頁,還剩13頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第十二講 直接存儲器訪問(DMADMA)模塊1 1、DMADMA模塊概述模塊概述2 2、F28335F28335的的DMADMA模塊模塊3 3、DMADMA模塊的寄存器模塊的寄存器4 4、DMADMA模塊應用模塊應用DMADMA模塊概述模塊概述 數字信號控制器的優勢不能純粹以處理器的速度來衡量,而是以整個系統的能力來衡量。數字信號控制器處理的許多應用操作都要用大量的帶寬來移動數據,如從片外存儲器到片內存儲器,從一個外設(例如一個模數轉換器)到RAM,從一個外設到另一個外設之間。例如當控制器讀寫AD采集的數據時或者讀寫外部擴展存儲器內容時,內存與外設間會存在著大量的數據交換,而且這種交換是經常性

2、的。對于這樣的數據交換,若采用中斷方式響應,每傳送一次數據,就要經歷中斷處理的全部步驟,CPU就會不斷的進行中斷的相關操作,如將工作現場寄存器壓入堆棧,中斷結束時,恢復現場,CPU頻繁的進行工作現場的切換,非常不專注,效率非常低。有沒有一種專用通道,專用的控制器來負責這類經常性的操作,而將CPU資源釋放出來呢? 直接存儲訪問DMA(Direct Memory Access)模塊就是用硬件實現存儲器與存儲器之間、存儲器與I/O設備之間直接進行高速數據傳送,不需要CPU的干預,減少了中間環節,而且存儲器地址的修改和傳送均由硬件自動完成,所以極大地提高了批量數據的傳送速度。 實現DMA傳送的關鍵部件

3、是DMA控制器(DMAC)。系統總線分別受到CPU和DMAC這兩個部件的控制,即CPU 可以向地址總線、數據總線和控制總線發送信息(非DMA方式),DMAC也可以向地址總線、數據總線和控制總線發送信息(DMA方式)。DMADMA模塊概述模塊概述但在同一時刻,系統總線只能接受一個部件的控制。究竟哪個部件來控制系統總線,是通過這兩個部件之間的“聯絡信號”控制實現的。DMA取得總線控制權前處于受控狀態,此時,CPU可對DMAC進行初始化編程,也可從DMAC中讀出狀態,這時DMA處于從態,DMAC上電或復位時,DMAC自動處于從態。在DMAC獲得總線控制權之后,DMAC取代CPU而成為系統總線的主控者

4、,接管和控制系統總線。通過總線向存儲器或I/O設備發出地址、讀/寫信號,以控制在兩個實體之間的數據傳送。這時候DMA處于主動態。DMA系統組成框圖如圖12.1所示。地址總線地址總線HRQ DREQDMACHLDA DACK總線總線請求請求總線總線響應響應 HOLD HLDACPUDMA請求請求DMA響應響應I / O設備設備控制總線控制總線數據總線數據總線F28335F28335的的DMADMA模塊模塊 F28335的DMA模塊主要結構如圖12.2所示,DMA數據傳輸是基于事件觸發的,這就意味著DMA需要外設中斷觸發來啟動DMA的數據傳輸。F28335共有18個不同的觸發源,圖中右邊所示即為觸

5、發源,外設觸發源見表12.1所示。其中有8個外部中斷觸發源,全部引自GPIO引腳,這樣DMA的事件觸發是很靈活的。DMA不能通過自身數據源定時觸發,若要定時觸發可以借助于外設中斷觸發源中CPU定時器來實現。F28335共有6個DMA通道,每個通道都可以有各自的觸發源,通過各自獨立的PIE中斷告知CPU DMA數據傳輸的開始與結束,這6個通道中,第一通道有著更高的優先級。DMA模塊的核心其實是一個與地址控制邏輯緊密關聯的狀態機,在數據傳輸過程中讓數據塊自動的重新配置,就好像是兩個緩沖器之間在打乒乓球一樣,我們把這種機制也叫做DMA的乒乓機制。DMA總線結構包括一個22位地址總線,一個32位數據讀

6、總線,和一個32位數據寫總線,與DMA總線相連的資源,好比乒乓球運動員,分別數據傳送的地址源與數據源,地址源與數據源的接口通過總線互相相連,這個接口DMA可能會訪問,CPU也會訪問。與DMA總線相連的資源如圖中左邊所示1、XINTF區域0、6、7;L4 SARAM、L5 SARAM、L6 SARAM、L7 SARAM 2、ADC存儲器映射結果寄存器 3、MCBSP-A和MCBSP-B數據接收寄存器(DDR2/DDR1)和數據發送寄存器(DXR2/DXR1)4、映射到外設3的ePWM1-6/HRPWM1-6寄存器。F28335F28335的的DMADMA模塊模塊外設中斷觸發源CPUDMA軟件位

7、(CHx.CONTROL.PERINIFRC)ADC排序器1中斷排序器2中斷外部中斷外部中斷1-7、外部中斷13CPU定時器CPU定時器0、1、2溢出McBSP-A、McBSP-B發送緩沖器空、接收緩沖器滿Epwm1-6ADC啟動信號F28335F28335的的DMADMA模塊模塊F28335的DMA的基本特性如下:(1) 6個DMA通道,6個通道都具有獨立的PIE中斷(2) 外設中斷觸發源 DMA模塊是基于事件觸發的,因此要求一個外設觸發器啟動DMA數據的傳遞。例如它能通過將一個定時器配置成中斷觸發源,從而變成一個周期性的定時驅動器,中斷觸發源可以為6個DMA通道分別單獨配制。F28335的

8、外設中斷觸發源如下:ADC排序器1和排序器2多路緩沖串行端口A和B(McBSP-A,McBSP-B)的發送和接收;XINT1-7和XINT13; CPU計時器ePWM1-6 ADCSOCA和ADSOCB信號軟件(3) 數據源/目的地 DMA傳遞數據的來源或者傳輸的目的地,主要如下:L4L7 16K*16 SARAM所有XINTF區域(外擴的存儲器)ADC的結果寄存器McBSP-A和McBSP-B發送和接收緩沖器ePWM1-6/HRPWM1-6外設第3幀映射寄存器 ePWM/HRPWM寄存器被DMA訪問之前必須被重新映射到PF3(通過MAPCNF寄存器的0位設置)。(4) 字長: DMA傳輸數據

9、的字長為:字的大小:16位或32位(McBSPs只限于16位)讀寫操作:4周期/字(對于McBSP 5周期/字進行讀取)。F28335F28335的的DMADMA模塊模塊F28335的DMA模塊的觸發機制 外設中斷觸發DMA數據傳送的原理如圖12.3所示。F28335的DMA每個通道都可以選擇各自獨立的觸發源,觸發源有18個,包括與GPIO引腳連接的8個外部中斷觸發源,這樣的觸發源的選擇是很靈活的。在外設中斷觸發的時候,首先通過各自通道的模式寄存器(MODE.CHX)的外設中斷觸發源選擇位(MODE.CHX(PERINTSEL))來選擇觸發源,有效的中斷觸發發生后,控制寄存器的外設中斷觸發標志

10、位(PERINTFLG)會被置位,如果相應DMA通道的模式寄存器中的外設中斷允許位(MODE.CHX. PERINTE)是使能的,并且控制寄存器中運行狀態位(CONTROL.CHxRUNSTS)是允許的,該DMA通道就能響應數據傳輸服務了。在接收完一個外設中斷觸發信號后,DMA會自動地發一個清除信號給中斷源,這樣后續的中斷事件會接著響應。F28335F28335的的DMADMA模塊模塊 軟件觸發的時候可以不管通道模式寄存器中觸發源的選擇,可以通過控制寄存器中的外設中斷強制位CONTROL.CHxPERINTFRC的置位來強制觸發,同樣,可以通過控制寄存器中的外設中斷清除位CONTROL.CHx

11、PERINTCLR位來清除掛起的DMA觸發。 一旦一個特定的中斷觸發置位了控制寄存器中的中斷觸發標志位PERINTFLG,該位一直保持置位(掛起)狀態,直到狀態機的優先級邏輯允許該通道進行數據傳輸,數據傳輸開始,標志位就被清零。數據正在傳輸過程中,而一個新的中斷觸發產生了,在正常的優先級別下,數據傳輸完成后才會去響應新的中斷觸發。如果那個新的中斷觸發還處在掛起狀態,即未被執行,又來了一個新的中斷觸發,即第三個中斷觸發,這時候控制寄存器中的溢出標志位CONTROL.CHxOVRFLG會被置位以示錯誤。如果一個外設中斷觸發發生了,而與此同時標志位正在清除中,外設中斷觸發有一定優先權,外設中斷標志位

12、還是會被置位。F28335F28335的的DMADMA模塊模塊F28335的DMA模塊的流水線機制 DMA進行數據傳輸的時候采用了4級流水線,將數據傳輸主要分成了如下工序:產生數據源地址,輸出數據源地址,讀數據源數據,產生目的源地址,輸出目的源地址,寫目的源數據。如圖12.4所示。有個例外的是,當將McBSP作為數據源時,讀取McBSP DDR寄存器的值的時候,會拖延DMA一個時鐘周期。如圖12.5所示。F28335F28335的的DMADMA模塊模塊此外還有一些其它操作也會影響到DMA通道的吞吐1、在每次數據傳輸之前要增加一個周期的延遲。2、當從CH1高優先級中斷返回時也會周期延遲。3、32

13、位傳輸速度是16位傳輸速度的兩倍,傳輸1個32位的字與傳輸1個16位的字所花的時間是一樣的。4、與CPU的沖突可能增加延遲時間。 例:從ADC到RAM傳遞128個16位的字,通道被配置成1波傳遞16個字,每個字要花4個時鐘周期,8波能傳完,總需時鐘周期520個時鐘周期 8 bursts * (4 cycles/word * 16 words/burst) + 1 = 520 cycles 如果通道被配置成傳遞32位的字,傳遞過程為8 bursts * (4 cycles/word * 8 words/burst) + 1 = 264 cycles,總需要時鐘周期264個,所花時間差不多減半。也

14、就是對DMA傳輸而言,采用32位數據線傳輸,若以16位為字進行傳輸,即一半吞吐量浪費了。F28335的DMA模塊F28335的DMA模塊的CPU仲裁機制 通常情況下,DMA的運行是獨立于CPU運行的。但是有時候DMA與CPU會同時通過同一個接口訪問存儲器或外設寄存器,這時候就需要進入CPU仲裁程序。例外的是,ADC寄存器(內存映射PF0)被CPU與DMA同時訪問的時候不會有沖突,即使是訪問不同的地址。訪問任何一個不同的接口或者CPU要通過一個DMA正在訪問的接口,即訪問同一接口的時間是不同時的,都不會產生沖突。有可能產生沖突的內部接口如下: XINTF 存儲區域 0, 6 and 7 L4 R

15、AM L5 RAM L6 RAM L7 RAM外設幀3 (McBSP-A and McBSP-B)F28335的DMA模塊1)訪問外部存儲器接口:a、如果CPU和DMA在同一周期內訪問任何一個XINTF區域,DMA被響應,CPU的所有訪問被掛起(CPU訪問正常的優先權順序是寫-讀-獲取)。b、如果CPU訪問一個XINTF的區域處于掛起狀態或者正在被處理,此時DMA正試圖訪問該區域,DMA訪問會被擱置,直到掛起的CPU訪問完成為止。例如一個CPU的讀或寫的訪問在掛起狀態,CPU的獲取訪問在被執行中,首先是完成這個獲取訪問,然后是CPU的寫,接著CPU的讀,最后才DMA訪問。c、如果CPU與DMA

16、同時試圖進行寫操作,則延時一個時鐘周期。如果DMA或者CPU寫XINTF區域,那么XINTF的緩沖器有助于CPU或者DMA避免延遲。如果DMA或CPU讀XINTF區域,那么會有明顯的延遲。這里要注意的是,如果DMA被延遲,DMA可能會錯過高優先權的DMA事件,如在產生高速率數據的ADC模塊里的DMA傳輸。在這種情況下,就不能采用DMA來傳輸XINTF里的數據,DMA延遲時間太長,會丟失關鍵的DMA事件。 DMA不支持半途中止XINTF的讀操作。如果DMA正在訪問XINTF的一個區域并且DMA訪問被延遲了,CPU會發一個硬件重啟HARDRESET指令來中止DMA的訪問,HARDRESTE就像是D

17、MA的系統重啟命令,因此,HARDRESET會被應用XINTF上,以從外設崩潰的狀態中恢復過來,XINTF與DMA中的寫緩沖器的數據與被掛起的數據信息全部會丟失。(2) 其他外設/存儲器a、CPU與DMA同一周期內訪問相同接口,DMA優先,CPU被延遲。 b、CPU正在訪問,另一個CPU對同一接口的訪問在掛起狀態,如CPU正在進行寫處理,一個讀訪問在掛起狀態,CPU寫操作完以后,DMA訪問先于讀訪問執行。對于同一個接口,對于掛起的CPU訪問而言,DMA訪問有更高優先權。如果CPU正在進行讀-修改-寫操作,DMA在相同位置上執行一個寫操作,該操作正好發生在CPU讀操作和寫操作之間,則DMA的寫操

18、作可能會丟失,因此建議不要把CPU和DMA混在一起訪問同一接口。F28335的DMA模塊F28335的DMA模塊的通道優先級機制通道優先級確定時有兩個方案:ROUND-ROBIN模式和通道1高優先級模式。1、 ROUND-robin模式 Round-robin模式就是輪次模式,在這個模式下,所有通道有著平等的優先權,每一個通道以“輪次”響應的形式被響應到。響應形式如下:CH1 - CH2 - CH3 - CH4 - CH5 - CH6 - CH1 - CH2 - 在上述情況下,每個通道發送一波字以后,下一個通道就會被響應,用戶可以指定每個通道的一波字的數量,一旦第6通道(或者是最后一個被使能的

19、通道)響應結束后,并且沒有其余被掛起的響應,輪次模式狀態機就進入了空閑狀態。2、通道1高優先級模式 在這個模式中,通道1有高優先權。如果通道1觸發事件發生,其余任何通道在當前字傳完(還不是這一波傳完)后即被終止,通道1響應,完成數據傳送。數據傳送完成后,又回到原來執行的傳送中。除1以外的其余通道還是平等的,還是以輪次模式執行。高優先級: CH1低優先級: CH2 - CH3- CH4 -CH5- CH6 -CH2 F28335的DMA模塊F28335的DMA模塊的地址指針與發送控制方法 DMA模塊的內部狀態機是兩級嵌套的循環結構,當一個外部設備的中斷觸發信號到來時,內部循環開始一次突發傳送。一

20、次突發傳送被定義為一次傳送的最小單位,可通過BURST_SIZE寄存器為每個通道設定突發傳送的數據量。BURST_SIZE允許在一次突發傳送中最多傳送32個16位的字;通過TRANSFER_SIZE寄存器可設置每個外環的尺寸,并且定義在一次傳送過程中突發傳送的循環次數,由于TRANSFER_SIZE是一個16位的寄存器,所以在一次傳送過程中總數據量可滿足任何傳送要求。在每次傳送的開始或結尾,可以產生一次CPU中斷,這是由MODE.CHXCHINTMODE位決定的。 在MODE.CHXONESHOT位默認設置下,DMA在一次外設中斷觸發下僅產生一次突發傳送。當此次突發傳送結束后,即使當前通道的觸

21、發信號再次到來,狀態機也將根據優先級順序移動到下一個通道,這樣可以防止一個通道獨占DMA總線。如果所要傳送的總數據量大于一次突發傳送的最大數據量;,那么可以通過將MODE.CHxONESHOT置位來完成整個傳送過程。但需要注意的是,在此模式下將會導致一次觸發事件占用絕大部分的DMA帶寬。 每個DMA通道都包含源地址與目標地址的映射地址指針(即SRC_ADDR和DST_ADDR),這些指針在傳送狀態機運行過程中可獨立控制,每次傳送開始時,每個指針映射地址中的值將分別裝載到其當前寄存器中。在內部循環運行時,每完成一個字的傳送,源或目標寄存器BURST_STEP的值將被添加到當前SRC/DST_AD

22、DR中。每次內環結束時,可采用兩種方法清除當前地址指針:第一種(默認),將SRC/DST_TRANSFER_STEP寄存器中的標記值添加到相應的指針中;第二種,通過返回過程,返回地址將被加載到當前地址指針中,當返回過程開始時,SRC/DST_TRANSFER_STEP寄存器被忽略。F28335的DMA模塊當SRC/DST_WRAP_SIZE寄存器中設定的突發傳送次數完成時,發生地址返回。每個DMA通道有2個映射地址指針SRC_BEG_ADDR和DST_BEG_ADDR,從而允許源與目標獨立控制。如果SRC_ADDR與DST_ADDR一樣,那么在傳送開始時當前寄存器SRC/DST_BEG_ADD

23、R將從其自身映射單元中加載數據。當設定的突發傳送次數完成時,一個返回過程將發生: (1)當前寄存器SRC/DST_BEG_ADDR將根據SRC/DST_WRAP_STEP寄存器中的標記值進行增加;(2)當前寄存器SRC/DST_BEG_ADDR中的新值將裝載到SRC/DST_ADDR當前寄存器中。 另外,返回計數器(SRC/DST_WRAP_COUNT)將會重新加載SRC/DST_WRAP_SIZE的值,為下次返回做準備,這就允許在一次傳送過程中產生多次返回操作。 DMA的地址指針有當前寄存器與映射寄存器,從而允許用戶在DMA工作時間為下次傳送過程在映射寄存器中設定相應的值。具有映射單元的指針

24、有: (1)源/目標地址指針(SRC/DST_ADDR)。映射寄存器中的值即為讀/寫操作的首地址,每次傳送開始時,映射寄存器中的值將裝載到當前寄存器中。 (2)源/目標開始地址指針(SRC/DST_BEG_ADDR)。每次傳送開始時,映射寄存器中的值將裝載到當前寄存器中,當前寄存器的值在添加到SRC/DST_ADDR寄存器中之前將先根據SRC/DST_WRAP_STEP寄存器中的值增加。F28335的DMA模塊對于每個通道,傳送過程由以下長度值進行控制: (1)源和目標突發傳送長度BURST_SIZE(內部循環次數)。BURST_SIZE定義了一次突發傳送所傳遞字的個數,在突發傳送開始前,BU

25、RST_SIZE的值被加載到BURST_COUNT寄存器中,每次完成一個字的傳送,BURST_COUNT減1,直到歸零時表明本次突發傳送結束。當前通道的行為由MODE寄存器中ONE_SHOT位定義,每次突發傳送的最大字數由外設決定;如果ADC的突發傳送可為16個寄存器,則McBSP突發傳送字的個數被限制為1,因為其沒有接收與發送緩沖器。對于RAM單元,突發傳送的最大字的個數可由BURST_SIZE設定為32。 (2)源和目標傳送次數TRANSFER_SIZE(外部循環次數)。TRANSFER_SIZE指定在每個CPU中斷(如果被使能)產生前所發生的突發傳送的次數。通過MODE 寄存器中的CHI

26、NTMODE位可將中斷配置成在傳送開始時觸發中斷或在傳送結束時觸發中斷。MODE寄存器中的CONTINUOUS位可設定在傳送完成后,當前通道是繼續使能還是禁止工作。在傳送開始時,TRANSFER_SIZE被裝載到TRANSFER_COUNT寄存器中,TRANSFER_COUNT不斷監視突發傳送的次數,直到其歸零時,表明DMA傳送過程結束。 (3)源/目標返回長度SRC/DST_WRAP_SIZE。SRC/DST_WRAP_SIZE定義了在當前地址指針返回開始位置前所發生的突發傳送次數,用來實現一個環繞的地址類型功能。在傳送開始時,SRC/DST_WRAP_SIZE的值被裝載到SRC/DST_WRAP_COUNT寄存器中,SRC/DST_WRAP_COUNT監視突發傳送所發生的次數,當歸零時相應的源/目

溫馨提示

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

評論

0/150

提交評論