實驗五DAMtoSDRAM例程詳解_第1頁
實驗五DAMtoSDRAM例程詳解_第2頁
實驗五DAMtoSDRAM例程詳解_第3頁
實驗五DAMtoSDRAM例程詳解_第4頁
實驗五DAMtoSDRAM例程詳解_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、信號與信息處理綜合實驗實驗報告實驗五DAM to SDRAM 例程詳解.一、實驗?zāi)康?:1. 熟悉 Visual DSP 軟件。2. 了解 Blankfin 系列 DSP芯片的內(nèi)存管理情況以及 DMA寄存器的配置和基于描述符的 DMA 傳送機制二、實驗要求:例程詳解: visual 4.5 版本的安裝目錄下, 找 exzmple/blackfin535/DMA to SDRAM的文件,寫一份例程詳解報告 。三、實驗分析:1.相關(guān)知識 DMABlackfin使用 DMA進行存儲器空間內(nèi)部或者存儲器空間與外設(shè)之間的數(shù)據(jù)傳送.DMA控制器允許Blackfin或外部設(shè)備指定數(shù)據(jù)傳送操作,然后其返回到正

2、常操作中。DMA控制器傳送數(shù)據(jù)的過程獨立于處理器的活動。DMA控制器將數(shù)據(jù)傳輸完成后會給處理器內(nèi)核一個信號來表示數(shù)據(jù)已經(jīng)傳完。 SDRAM同步 DRAM。其工作頻率與系統(tǒng)工作頻率相同。內(nèi)存管理21535 的內(nèi)存管理把存儲器視為一個統(tǒng)一的4GB 的地址空間,使用32 位地址。所有的資源,包括內(nèi)部存儲器、外部存儲器、PCI 地址空間和I/O 控制寄存器,都具有獨立的地址空間。芯 片 內(nèi) 部 的308KB RAM 中 ,L1( 一 級 緩 存 )52KB , L2( 二 級 緩 存 )256KB(0xF003FFFF0xF000000) ;內(nèi)存地址的具體配置空間如下圖所示.L1 內(nèi)存訪問速度最快,

3、每個處理器周期能完成一次訪問。 L2 內(nèi)存遠離內(nèi)核處理器, 用于存儲更大量的程序代碼和數(shù)據(jù)。存儲器的 DMA控制器提供高帶寬的數(shù)據(jù)傳輸能力, 它能夠在內(nèi)部 L1/L2 存儲器和外部存儲器 ( 包括 PCI 存儲空間 ) 之間執(zhí)行代碼或者數(shù)據(jù)的塊傳輸。 DMA寄存器的配置為了描述Mem DMA序列, DMA控制器使用一套名為描述子塊(Descriptor)的參數(shù)。當(dāng)需要后繼的DMA序列時, 這些描述子塊被鏈接起來。這樣, 一個 DMA序列完成時能夠自動初始化下一個序列, 并將其啟動。 如果不需啟動下一個序列,只要將其指向一個內(nèi)容為0 的地址空間即可。如果下一次鏈接指向原描述子塊,則DMA完成后暫

4、停。.為訪問整個ADSP-21535的地址空間, 源地址和目的地址描述子塊采用了全32 位地址的基指針。兩個描述子塊均為5 個字的連續(xù)空間,需要注意的是該連續(xù)空間必須定義在L2 范圍內(nèi)。描述子塊內(nèi)包含的內(nèi)容如下圖所示:MemDMA規(guī)定,描述子塊所在的首地址必須傳入相關(guān)的寄存器。描述子塊首地址的高16位裝入 DMA_DBP寄存器 (DMA Descriptor Base Pointer Register,DMA描述子塊基地址寄存器 ) 內(nèi)。由于該寄存器嚴格限定必須在0xF000 0xF003,這就限定了源和目的地址描述子塊只能定義在L2 存儲器內(nèi),并且高16 位地址相同。描述子塊首地址的低16

5、位放在兩個寄存器中,源地址描述子塊低16 位裝入 MDS_DND寄存器 (Source Memory DMA Next Descriptor Pointer Register, DMA源地址下一個描述子塊寄存器 ) ,而目的地址描述子塊低16 位裝入 MDD_DND寄存器 (DestinationMemoryDMANextDescriptorPointerRegister ,DMA目的地址下一個描述子塊寄存器) 。其說明如圖3 所示。2. 例程解析首先調(diào)用Setup_SDRAM子程序:start:_main:CALL Setup_SDRAM;/ routine sets up SDRAM 。初

6、始化SDRAM 的控制寄存器在對 SDRAM進行讀寫操作前首先須對 SDRAM進行初始化, 在 Blackfin 處理器中, SDRAM 初始就是對 Blackfin 處理器的 SDRAM控制器( EBIU_SDRRC,EBIU_SDBCTL和 EBIU_SDGCTL)進行初始化配置,這三個控制寄存器的值要根據(jù)所選用的SDRAM參數(shù)進行設(shè)置。/*SDRAM Setup*/.Setup_SDRAM:/P0 指向 SDRAM 的 REFRESH RATE CONTROL(刷新率控制)寄存器p0.l = EBIU_SDRRC & 0xffff;/ Assign LSBs of p0 to point

7、 to SDRAM Refresh Rate Control Registerp0.h = EBIU_SDRRC 16; / Assign MSBs of p0 to point to SDRAM Refresh Rate Control Register/為刷新率控制寄存器賦值r0 = 0x074A (z);/ Assign appropriate value to SDRAM Refresh Rate Control Register (zero extend)Wp0 = r0;/ from the calculations in the commented section aboveSS

8、YNC;/ 該指令中處理下一條指令前終結(jié)所有掛起的指令,并且刷新內(nèi)核緩沖和所有的寫緩沖,/且向外部系統(tǒng)產(chǎn)生一個同步請求信號,得到答復(fù)信號后SSYNC 才結(jié)束。/這樣可以防止之前的指令對下一條指令產(chǎn)生影響/為 SDRAM 的 MEMORY BANK CONTROL寄存器賦值p0.l = EBIU_SDBCTL & 0xffff;/ Assign LSBs of p0 to point to SDRAM Memory Bank Control Registerp0.h = EBIU_SDBCTL 16;/ Assign MSBs of p0 to point to SDRAM Memory Ban

9、k Control Registerr0 = 0x0001(z); / assign control data word to r0p0 = r0;/ write control data word to EBIU_SDBCTlSSYNC;/為 SDRAM 的 MEMORY GLOBAL CONTROL寄存器賦值p0.l = EBIU_SDGCTL & 0xffff;/ Assign LSBs of p0 to point to SDRAM Memory Global Control Registerp0.h = EBIU_SDGCTL 16;/ Assign MSBs of p0 to po

10、int to SDRAM Memory Global Control Registerr0.l = 0x998d;/ assign LSBs of control data word to r0r0.h = 0x0091;/ assign LSBs of control data word to r0p0 = r0;/ write control data word to EBIU_SDGCTLSSYNC;RTS;/將源描述子塊和目的描述模塊地址分別裝入P0、 P1,目的和源描述子塊(Descriptor )的相關(guān)寄存器地址載入P2-P5 及 I0-I2 ;P0.L = SDRAM_READ;

11、 / set up DMA descriptors. SDRAM_READ:源描述子塊P0.H = SDRAM_READ;.P1.L = SDRAM_WRITE; / set up DMA descriptors. SDRAM_WRITE:目的描述子塊P1.H = SDRAM_WRITE;/P2 至 P5 指向 DMA 的寄存器P2.L = MDR_DND & 0xFFFF;/DMA源描述子塊配置寄存器P2.H = (MDR_DND 16) & 0xFFFF;/DMA Memory DMA Next Descriptor Pointer RegisterP3.L = DB_NDBP & 0xF

12、FFF;/基址指針寄存器P3.H = (DB_NDBP 16) & 0xFFFF; /DMA Next Descriptor Base Pointer RegisterP4.L = MDW_DND & 0xFFFF;/DMA目的描述子塊配置寄存器P4.H = (MDW_DND 16) & 0xFFFF;/DMA Memory DMA Next Descriptor Pointer RegisterP5.L = MDR_DCFG & 0xFFFF;/DMA源地址配置寄存器P5.H = (MDR_DCFG 16) & 0xFFFF;/DMA Memory Config RegisterI0.L =

13、 MDW_DCFG & 0xFFFF;/DMA目的地址配置寄存器I0.H = (MDW_DCFG 16) & 0xFFFF;/DMA Memory Config RegisterI1.L = MDR_DSAH & 0xFFFF;/DMA存儲器內(nèi)程序開始地址的高位寄存器I1.H = (MDR_DSAH 16) & 0xFFFF;/DMA Memory Start Address High RegisterI2.L = MDR_DSAL & 0xFFFF;/開始地址的低位寄存器I2.H = (MDR_DSAL 16) & 0xFFFF;/DMA Memory Start Address Low R

14、egister調(diào)用 Setup_DMA_descriptor子程序,將上面的初始值載入對應(yīng)寄存器在描述子塊的地址傳入相應(yīng)寄存器后,后面的四項先配置,然后設(shè)置第一項。DMA 通道需要一組稱為DMA 描述符的參數(shù),該參數(shù)存儲在存儲器中。每個描述符包含特定DMA 傳送序列所需要的所有信息,其組成結(jié)構(gòu)如下:1、要傳送數(shù)據(jù)塊的32位起始地址;2、要傳送的數(shù)據(jù)量;3、其他各種控制信息如該DMA 做什么,傳送何時完成等配置信息;4、指向下一個描述符的指針。Setup_DMA_descriptor子程序如下:/*DMA descriptorSetup*/Setup_DMA_descriptor:/ Becau

15、se we use the memDMA, the setup is given for the source and destinationWP0+0x2 = R0;/DMA CountDMA 長度(計數(shù)值)寫入源描述塊第二個字中P0+0x4 = R1;/DMA Start Address 將 DMA 的 32 位源起始地址寫入源描述塊第三第四個字中WP0+0x8 = R2;/DMA Next Descriptor Pointer 將下一個源描述子塊的地址寫入源描述塊第五個字中WP1+0x2 = R0;/DMA CountP1+0x4 = R3;/DMA Start AddressWP1+0

16、x8 = R4;/DMA Next Descriptor PointerWP0 = R0.H;/DMA Config Word配置字 R0.H = 0x8001WP1 = R2.H;/DMA Config Word配置字 R2.H = 0x8003;.RTS;/*/調(diào)用 Enable_DMA子程序/*Enable DMA*/Enable_DMA:R6 = P0;WP2 = R6.L;/ 將 DMA源描述子塊配置寄存器的地址傳給P2。WP3 = R6.H;/ 將描述子塊基地址寄存器的地址傳給P3R6 = P1;WP4 = R6.L;/ 將目的描述子塊所在地址的低16 位傳給配置目的地址寄存器R6

17、 = WP5;BITSET(R6,0);/ 設(shè)置 R6的最低位為 1,表示準(zhǔn)備啟動讀DMAEnable DMA for DMAR7.L = WI0;BITSET(R7,0);/ 設(shè)置 R7的最低位為 1,表示準(zhǔn)備啟動寫DMAEnable DMA for DMAWP5 = R6;WI0 = R7.L;/R6 和 R7 的低 16 位寫入兩個配置寄存器中,真正啟動 DMADMA_W AIT:/ 等待 DMA結(jié)束 Wait for DMA to CompleteR6 = WP1;cc = bittst(R6,15);/ poll bit for completionIF cc JUMP DMA_WA

18、IT;/如果為 1,表示還在 DMA 狀態(tài)RTS;/*/使能后, DMA程序?qū)?sdram_blink_test 這段小程序移到 SDRAM中執(zhí)行,知道執(zhí)行結(jié)束,控制器返回給處理器。設(shè)置基于描述符的DMA 的典型時序的流程:.將 DMA 配置字(其 15 位置為 1 ), DMA 傳送計數(shù),DMA 起始地址( 15:0 ), DMA起 始 地 址 (31:16 ) 以 及 下 一 個 描 述 符 指 針 ( 15:0), 寫 入 描 述 符 存 儲 器 地 址BASE+0BASE+8中。如果描述符是鏈表中的最后一個元素,或者是鏈表中的唯一元素, 那么該描述符中的下一個描述符指針應(yīng)該指向下一個存

19、儲單元,該存儲單元的15 位必全為零?;谏鲜鲆?,下一個描述符指針可以指向當(dāng)前描述符的基地址BASE+0 。在 DMA 傳送序列完成之后,DMA 配置字的 15 位被清零??刂破鞣祷亟o處理器。 Blink Code在 SDRAM中執(zhí)行, sdram_blink_test程序如下所示:start_code_to_dma: nop;sdram_blink_test:/ This code is DMAed to SDRAMblink:P0.L = FIO_DIR & 0xFFFF;P0.H = FIO_DIR 16;R1 = 0x000f(z);WP0 = R1;/*Set PF 0 - PF 3 as outputs*/ssync;P1.L = FIO_FLAG_S & 0xFFFF;/FIO_FLAG_S:標(biāo)志置位寄存器P1.H = FIO_FLAG_S 16;P2.L = FIO_FLAG_C & 0xFFFF;/FIO_FLAG_C:標(biāo)志清除寄存器P2.H = FIO_FLAG_C 16;Wp2=r1;P5.H=0x1000;/*Delay loop count*/P5.L=0x0000;r2=

溫馨提示

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

評論

0/150

提交評論