實驗二任務書_第1頁
實驗二任務書_第2頁
實驗二任務書_第3頁
實驗二任務書_第4頁
實驗二任務書_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗二實驗目的:了解DMA通信基本原理,掌握內存與SDRAM間一維DMA通信方式、二維DMA通信方式以及相關控制方法。學習數字濾波器設計方法,掌握其調試步驟,使學生加深對IIR的理解,進一步提高對數字信號處理理論的認識。實驗任務:u 實驗1:內存與SDRAM間的一維DMA通信實驗u 實驗2:內存與SDRAM間的二維DMA通信實驗u 實驗3:無限脈沖響應數字濾波器(IIR)的設計實驗實驗內容:l 實驗1內存與SDRAM間的一維DMA通信實驗l 實驗原理DMA是一種不需要處理器內核干預的數據傳輸機制,作為一種后臺任務執(zhí)行,即進行DMA傳輸時,處理器可以處理其它任務。如果使能了DMA中斷,那么當數據

2、傳輸結束后會產生中斷信號,表示DMA傳輸已經完成。DMA傳輸方式包括:一維DMA、二維DMA、鏈式DMA、AutoDMA等,本次實驗使用一維DMA方式,即傳輸存儲器中一段連續(xù)的數據(地址是相鄰接的)。若要利用DMA傳輸數據,首先應配置DMA傳輸控制塊(TCB)寄存器。DMA傳輸的數據具有方向性,即從發(fā)送端(源)到接受端(目的),若為外部存儲器DMA傳輸,則需要設置兩個TCB參數,一個源TCB,用于描述源數據的地址、大小和每次傳輸數據的長度等;還有一個目的TCB,用于描述數據傳入的目標地址、數據大小及每次傳輸數據的長度等。若要使能DMA中斷,也需要在TCB中設置相應位。若使用鏈路或AutoDMA

3、通道則只需一個目的TCB。設置好TCB寄存器后,DMA傳輸自動開始。TS201S一共14個DMA通道,4個通道(03)專用于外部存儲器設備,8個通道(411)用于鏈路口,2個通道(1213)用于自動DMA操作。本次實驗使用DMA0通道實現內存與外部存儲器SDRAM間的一維DMA通信。相關的寄存器:1TCB寄存器TCB寄存器是一個128位的四字組寄存器,由DI、DX、DY和DP寄存器組成:a)DI是DMA索引寄存器,包括了將要發(fā)送或者接收的數據的源地址或者目的地址,既可以指向內部存儲器又可以指向外部存儲器,也可指向鏈路口b)DX包含了一個16位(高)的計數值和一個16位的修改量,若使能了二維DM

4、A則該寄存器保存的只是X方向的計數值和修改量c)DY與DX結合一起使用,保存了Y方向上的16位計數值和16位修改量。如果只進行一維DMA傳輸,就不需要設置該寄存器。d)DP寄存器包括了DMA所有控制信息,分為兩個主要段3122210DMA控制鏈式指針&鏈標記(用于鏈式DMA)對DP寄存器各位功能說明:位說明位說明014四字地址(TCB指針)2526操作數據長度:01=32位,10=64位,11=128位1516鏈指針選擇存儲單元1721鏈目的通道27二維DMA使能22使能鏈式DMA28DMA請求優(yōu)先級,0=正常優(yōu)先級,1=高優(yōu)先級23DMA請求使能24DMA中斷使能2931指定DMA設備類型2

5、中斷屏蔽寄存器(IMASK) IMASK是一個64位寄存器,由IMASKH和IMASKL組成,當IMASK中某位被設置成1的時,那么將響應這個位所對應的中斷。DMA0中斷對應在IMASKL中的第14位,所以我們要取消對DMA0中斷的屏蔽,使能DMA0中斷,可以通過如下指令實現:xr0=0x4000; /*0x4000= B 0100 0000 0000 0000 */IMASKL=xr0;xr0=0;IMASKH=0也可以直接使用如下指令實現,原理是一樣的,下面的方法更為直觀一些。xr0=INT_DMA0; /* INT_DMA0在頭文件中的定義的值為0x4000*/IMASKL=xr0;l

6、實驗步驟:1)啟動VisualDSP+,新建工程命名為”test2_1”,路徑選擇為”D:DSP”,并將源代碼文件夾下默認生成的test2_1.c文件移除;2)新建空白文件(選擇菜單FileNewFile),輸入參考源代碼,保存為DMA_1.asm,并將其添加到工程中;3)分析、理解源程序,并編譯文件糾錯;4)建立鏈接文件(選擇菜單ToolsExpert LinkerCreate LDF)4)編譯整個工程,若出現錯誤“The following symbols referenced in processor p0 could not be resolved: main _main refere

7、nced from ts_hdr_TS201.doj”則說明聲明的程序段/數據段(變量)所存放到了不能被執(zhí)行的位置,導致該程序段/數據段(變量)沒有被分配到相應的存儲空間。處理方式:打開生成的LDF鏈接文件,在打開的Expert Linker窗口中將紅叉項下的DMA1.obj添加(用鼠標拖拽)到MSSD0存儲區(qū)(由于TS201S將外部存儲器SDRAM地址映射到了0x4000 0000到0x7FFF FFFF之間的四個部分:MSSD03,所以我們將DMA1.obj添加至其中之一即可,由于開發(fā)板上SDRAM是映射在MSSD0,為方便以后實驗,直接添加至MSSD0即可)。5)重新編譯工程,為方便觀察

8、存儲器內相應地址其內容變化,在_Done處設置斷點,同時打開兩個存儲器觀察窗口(選擇菜單Memory-TigerSHARC Memory)分別輸入tx_data和rx_data。6)運行(RUN)工程,程序自動運行至_Done后停止,觀察tx_data內數據值,然后單步運行程序(按F11鍵),觀察rx_data內數據變化。l 實驗結果:要求:1按照實驗步驟完成實驗;2修改程序,DMA每次傳輸一個字(32位),驗證結果;3修改程序,用軟環(huán)境模擬外部中斷來啟動DMA傳輸,并觀察傳輸結果。通過下列步驟來建立一個外部中斷:a.打開對話框選SettingsInterrupts,會出現一個Interrup

9、t Timing對話框;b.設置中斷屬性;c.設置斷點并且運行程序.用如下程序段:_Set_IRQ_A: /*設置外部中斷*/ j0=_IRQ0_ISR; IVIRQ0=j0; xr0=INT_IRQ0; IMASKH=xr0; /*外部中斷IRQ0使能*/ SQCTLST=SQCTL_GIE;_Wait_For_Interrupt: .align_code 4;nop;nop;nop;idle; /無限等待直到中斷發(fā)生,然后跳至中斷程序_IRQ0_ISR執(zhí)行 jump _Wait_For_Interrupt;_IRQ0_ISR: _Load_DMA0_TCBs: /將初始值倒入DMA0的傳輸

10、和接收TCB j0=DC0_Source_TCB; xr3:0=qj0+j31; /注意這種傳遞方式 j0=DC0_Destination_TCB; yr3:0=qj0+j31; DCS0=xr3:0; DCD0=yr3:0; /開始進行DMA傳輸rti(np)(abs); 代替以下原程序:_Load_DMA0_TCBs: /將初始值倒入DMA0的傳輸和接收TCB j0=DC0_Source_TCB; xr3:0=qj0+j31; /注意這種傳遞方式 j0=DC0_Destination_TCB; yr3:0=qj0+j31; DCS0=xr3:0; DCD0=yr3:0; /開始進行DMA傳

11、輸4分析兩個程序的原理,簡述軟環(huán)境模擬外部硬件中斷的程序流程。l 參考源代碼:#include #define N 1024 /*定義需要傳輸的32位字的個數=1024*/#define MODIFY 1/*每次傳輸的數據單元大小,4個字(128位)數據*/.section data1;/*聲明數據段1,存放對源TCB和目的TCB預先設置的參數*/.var DC0_Source_TCB4=tx_data, N16|MODIFY, /*將N左移16位,即移至DX的高16位(計數位)*/ 0x0, TCB_INTMEM|TCB_ NORMA;/*源選擇為內部存儲器/四字操作數*/.align 4;

12、.var DC0_Destination_TCB4=rx_data, N16|MODIFY, /*將N左移16位,即移至DX的高16位(計數位)*/ 0x0, TCB_EXTMEM|TCB_NORMA;/*目標為外部存儲器/四字操作數*/.section data2;.var tx_dataN; /*定義內部存儲器緩沖區(qū),存儲需要傳輸到外存的數據*/.section sdram0;.var rx_dataN; /*在SDRAM中定義外部存儲器緩沖區(qū),存儲從寫入的數據*/.section program;_Initialize_Bus_SDRAM: /*初始化SYSCON和SDRCON*/ xr

13、0=SYSCON_MP_WID64|SYSCON_MEM_WID64| SYSCON_MSH_PIPE2|SYSCON_MSH_WT0|SYSCON_MSH_IDLE| SYSCON_MS1_PIPE1 |SYSCON_MS1_WT0|SYSCON_MS1_IDLE| SYSCON_MS0_SLOW |SYSCON_MS0_WT3|SYSCON_MS0_IDLE; SYSCON=xr0; xr0=SDRCON_INIT |SDRCON_RAS2PC5 |SDRCON_PC2RAS2 | SDRCON_REF3700|SDRCON_PG256 |SDRCON_CLAT2 | SDRCON_ENB

14、L; SDRCON=xr0; lc0=N; j0=tx_data; xr0=1; xr1=0;_Fill_Tx_Data: xr1=r1+r0; j0+=1=xr1; if nlc0e,jump _Fill_Tx_Data;_Load_DMA0_TCBs: /*將初始值倒入DMA0的傳輸和接收TCB寄存器*/ j0=DC0_Source_TCB; xr3:0=qj0+j31; /*注意這種傳遞方式*/ j0=DC0_Destination_TCB; yr3:0=qj0+j31; DCS0=xr3:0;DCD0=yr3:0; /*開始進行DMA傳輸*/_Done:nop;nop;nop;nop;

15、jump _Done;nop;nop;nop;l 實驗2內存與SDRAM間的二維DMA通信實驗l 實驗原理二維DMA將存儲區(qū)中的數據塊作為一個數據陣列進行傳輸,有利于執(zhí)行矩陣操作的DSP算法。若要進行二維DMA傳輸,對DX、DY寄存器都要進行設置,同時在DP寄存器中使能二維DMA(第27位)。DX增量寄存器(DX低16位)保存的是偏移值,此值加上當前地址后指向X維的下一數據元素(下一內循環(huán)首址),DX計數寄存器(DX高十六位)保存在X維方向(循環(huán)內部)需要傳輸的字數,傳輸一次減一,可以指示當前行中待傳輸的字數。DY增量寄存器保存的是Y維方向(外循環(huán))的偏移值,此值加上當前地址可以指示Y維方向上

16、下一個數據元素(下外循環(huán)的首址)。DY計數寄存器初始值是Y維的傳輸單元數(外循環(huán)次數),每當DX計數器減少至零時,其值才減一。當Y計數寄存器內容減為零時,DMA傳輸完成。二維DMA的具體執(zhí)行過程:1 輸出保存在TCB DI寄存器中的當前地址,啟動一個DMA存儲器周期;2 在此周期內,將TCB DX增量寄存器中的值與當前DI寄存器中的當前地址相加,產生下一個要訪問的數據元素地址,同時更新DI寄存器的值;3 DX計數器的值減一,然后跳回第二步執(zhí)行,直至DX計數器值減為零;4 DX計數器減為零后,DX計數器被重新加載原來的初始值;5 DY增量寄存器的值加到DI寄存器中的當前地址;6 DY計數寄存器內

17、容減一,然后從第二步繼續(xù)開始執(zhí)行,直至DY計數器減少至零,完成二維DMA傳輸。相關寄存器說明:TCB寄存器TCB寄存器是一個128位的四字組寄存器,由DI、DX、DY和DP寄存器組成:a) DI是DMA索引寄存器,包括了將要發(fā)送或者接收的數據的源地址或者目的地址,既可以指向內部存儲器又可以指向外部存儲器,也可指向鏈路口b) DX包含了一個16位(高)的計數值和一個16位的修改量,若使能了二維DMA則該寄存器保存的只是X方向的計數值和修改量c) DY與DX結合一起使用,保存了Y方向上的16位計數值和16位修改量。如果只進行一維DMA傳輸,就不需要設置該寄存器。d) DP寄存器包括了DMA所有控制

18、信息,分為兩個主要段21310DMA控制鏈式指針&鏈標記(用于鏈式DMA)22對DP寄存器各位功能說明:位說明位說明014四字地址(TCB指針)2526操作數據長度:01=32位,10=64位,11=128位1516鏈指針選擇存儲單元1721鏈目的通道27二維DMA使能22使能鏈式DMA28DMA請求優(yōu)先級,0=正常優(yōu)先級,1=高優(yōu)先級23DMA請求使能24DMA中斷使能2931指定DMA設備類型源代碼中寄存器的對應關系:XR0 DI Register XR1 DX Register XR2 DY Register XR3 DP Register DCS0 TRANSMITTETCBREGIS

19、TERSYR0 DI Register YR1 DX Register YR2 DY Register YR3 DP Register DCD0RECEIVERTCBREGISTERSl 實驗步驟1)啟動VisualDSP+,新建工程命名為”test2_2”,路徑選擇為”D:DSP”,并將源代碼文件夾下默認生成的test2_2.c文件移除;2)新建空白文件(選擇菜單FileNewFile),輸入參考源代碼,保存為DMA_2.asm,并將其添加到工程中;3)分析、理解源程序,并編譯文件糾錯;4)建立鏈接文件(選擇菜單ToolsExpert LinkerCreate LDF)4)編譯整個工程,若出

20、現錯誤“The following symbols referenced in processor p0 could not be resolved: main _main referenced from ts_hdr_TS201.doj”處理方法同前一個實驗。5)重新編譯工程,為方便觀察存儲器內相應地址其內容變化,在_Done處設置斷點,同時打開兩個存儲器觀察窗口(選擇菜單Memory-TigerSHARC Memory)分別輸入tx_data和rx_data。6)運行(RUN)工程,程序自動運行至_Done后停止,觀察tx_data內數據值,然后單步運行程序(按F11鍵),觀察rx_dat

21、a內數據變化。l 實驗結果:1按照實驗步驟完成實驗;2理解并修改程序,使rx_data收到的數據排列驗證結果如下:3修改程序,只傳輸tx_data中的奇數值,且接受到的數據在tx_data中連續(xù)排列,驗證結果。l 參考源代碼:#include #define N 1024 /*需要傳輸的32位字的個數*/.section data1;.var DC0_Source_TCB4=tx_data, 416|1, 416|1, TCB_INTMEM|TCB_NORMAL| TCB_TWODIM;/*源選擇為內部存儲器/單字傳輸/使能2維DMA傳輸*/.align 4;.var DC0_Destinat

22、ion_TCB4=rx_data, 4 16|1, 416|1, TCB_EXTMEM|TCB_NORMAL|TCB_TWODIM;/*目的為外部存儲器/單字傳輸/使能2維DMA傳輸*/.section data2;.vartx_dataN; /*定義緩沖區(qū),存儲需要傳輸到外存的數據*/.section sdram0;.varrx_dataN; /*在SDRAM中定義緩沖區(qū),存儲從寫入的數據*/.section program;_Initialize_Bus_SDRAM: /初始化SYSCON和SDRCON xr0=SYSCON_MP_WID64|SYSCON_MEM_WID64| SYSCO

23、N_MSH_PIPE2|SYSCON_MSH_WT0|SYSCON_MSH_IDLE| SYSCON_MS1_PIPE1 |SYSCON_MS1_WT0|SYSCON_MS1_IDLE| SYSCON_MS0_SLOW |SYSCON_MS0_WT3|SYSCON_MS0_IDLE; SYSCON=xr0; xr0=SDRCON_INIT |SDRCON_RAS2PC5|SDRCON_PC2RAS2| SDRCON_REF3700|SDRCON_PG256 |SDRCON_CLAT2 | SDRCON_ENBL; SDRCON=xr0; lc0=N; j0=tx_data; xr0=1; xr

24、1=0;_Fill_Tx_Data: xr1=r1+r0; j0+=1=xr1; if nlc0e,jump _Fill_Tx_Data;_Load_DMA0_TCBs: /*將初始值倒入DMA0的傳輸和接收TCB*/ j0=DC0_Source_TCB; xr3:0=qj0+j31; /*注意這種傳遞方式*/ j0=DC0_Destination_TCB; yr3:0=qj0+j31; DCS0=xr3:0; DCD0=yr3:0; /*開始進行DMA傳輸*/_Done:nop;nop;nop;nop; jump _Done;nop;nop;nop;l 實驗3無限脈沖響應數字濾波器(IIR)

25、的設計實驗l 實驗原理所謂的數字濾波,指的是輸入、輸出均為數字信號,通過一定運算關系改變輸入信號所含頻率成分的相對比例或者濾除某些頻率成分。數字濾波可分為無限脈沖響應(IIR)濾波和有限脈沖響應(FIR)濾波。本次試驗利用VISUAL DSP+ 軟環(huán)境SIMULATOR模擬實現無限脈沖響應(IIR)數字信號處理。無限脈沖響應(IIR)的系統(tǒng)函數為:.公式1即如果輸入為X(Z),輸出為Y(N),則:Y(Z)=X(Z)H(Z),即.公式2本試驗中利用的公式是對上面的公式2對了相應的形式變化,利用中間變量.公式3那么.公式4因此,本次試驗設計了一個4階IIR濾波,其對應的公式3和公式4的時域公式如下

26、:wn=xn*scale+wn-1*a1+wn-2*a2+wn-3*a3+wn-4*a4公式5yn=wn+wn-1*b1+wn-2*b2+wn-3*b3+wn-4*b4公式6本次設計中系數a4,a3,a2,a1,b4,b3,b2,b1都是用戶自己初始化的時候給定的且均為常數,其中x(n)是輸入的數字序列。從公式5和公式6可知,只要我們設定設計需要的a4,a3,a2,a1,b4,b3,b2,b1,以及初始化w(n-1), w(n-2), w(n-3), w(n-4),就可以得到我們所需要的濾波器了。濾波器算法中的變量分配:inputsN:存放輸入數據;coeffs2*SECTIONS:按順序猘2

27、, a4, b2,b4,a1, a3, b1, b3存放濾波器系數;delaylineSECTIONS:存放w(n-1), w(n-2), w(n-3), w(n-4)初始化值(此處濾波器設計為因果濾波器,n0時w(n)全為0);outputN:存放計算結果。l 實驗步驟:1)啟動VisualDSP+,新建工程命名為”test2_3”,路徑選擇為”D:DSP”,并將源代碼文件夾下默認生成的test2_3.c文件移除;2)新建空白文件(選擇菜單FileNewFile),輸入參考源代碼,保存為IIR.asm,并將其添加到工程中;3)分析、理解源程序,并編譯文件糾錯;4)編譯整個工程;5)查看inp

28、uts和output的時域圖和頻譜圖:新建繪圖窗口(選擇菜單 ViewDebug WindowsPlotNew項)在Plot設置窗口中type設定為Line Plot Title命名為”IIR”;添加兩個Data Setting,參數按以下表格進行設定。Data SetsNameMemoryAddressCount StrideDatainputsinputsTigerSharcMemoryInputs301floatoutputoutputTigerSharcMemoryoutput301floatl 實驗結果:要求:記錄輸入數據和輸出數據的時域圖和頻譜圖(課堂驗收),并利用數字信號處理課程

29、所學知識分析結果。l 參考源代碼:#define N_MAX 100#define N 30 / 輸入數據的個數N#define SECTIONS 4 /濾波器階數#define scale 0.05078125 /濾波器 .K的K= scale?/*/.section data1;.align 4; /指令按照4字節(jié)對齊,方便尋址.var inputsN =5000.0, 4333.0, 5465.0, 13556.0, 7423.0, -5000.0, -4333.0, -5465.0, -13556.0, -7423.0,5000.0, 4333.0, 5465.0, 13556.0,

30、7423.0, -5000.0, -4333.0, -5465.0, -13556.0, -7423.0,5000.0, 4333.0, 5465.0, 13556.0, 7423.0, -5000.0, -4333.0, -5465.0, -13556.0, -7423.0; /輸入數據.varcycle_count; / 循環(huán)計數變量.align 4;.varexpected_outputN = 253.906250, 1394.910156, 3400.899369, 5451.189211, 7461.879024, 8509.488592, 5519.537707, -1306.03

31、9745, -6936.575354, -8920.200002,-8397.397895, -4821.647412, 1507.253965, 6689.519912, 8738.028980, 8444.656939, 4922.543154, -1492.260614, -6730.424864, -8759.801131,-8433.783468, -4908.582993, 1492.343760, 6724.040670, 8757.440081, 8435.857839, 4910.422599, -1492.627568, -6724.989198, -8757.654792

32、; /輸出期望值.align 4;.var outputN; /定義輸出緩沖數組.section data2;.align 4;.varcoeffs2*SECTIONS= 0.1412,0.6272,4.,4.,-0.0255,-0.6108,1.,6.;/a2, a4, b2,b4,a1, a3, b1, b3.vardelaylineSECTIONS=0.0, 0.0, 0.0, 0.0;/w(n-1), w(n-2), w(n-3), w(n-4)初始化值/*/#ifdef _ADSPTS201_#include #endif#include cache_macros.h.section

33、 program;.global _main;/*Power up code */powerup:#ifdef _ADSPTS201_/*in the case of TS201, at the beginning of the program thecache must be enabled. The procedure is contained in thecache_enable macro that uses the refresh rate as input parameter -if CCLK=500MHz, refresh_rate=750 -if CCLK=400MHz, re

34、fresh_rate=600 -if CCLK=300MHz, refresh_rate=450 -if CCLK=250MHz, refresh_rate=375*/cache_enable(750);/-Optional example to preload cache- j0 = j31 + coeffs; LC0 = 2; /J-IAL數據寄存器組:J31J0 J31為32位狀態(tài)寄存器,其他為通用寄存器 /LC0為專用的循環(huán)計數及存取器nop;nop;.align_code 4; ini_cache: xr3:0 = qj0+=0; /X運算塊正常字(32位)四寄存器(128位)初始化

35、.align_code 4; if NLC0E, jump ini_cache; qj0+=4 = xr3:0; /NLC0E:計數器LC0沒有減為零為條件/-#endifend_powerup:/* Start of code */_main: j1 = j31 + inputs; LC0 = N;/J1指向輸入數據inputs. j2 = j31 + output; /J2指向輸出數據outputs.align_code 4;iir_loop: yr8 = j1+=1; /yr8=x(n)/read cycle counterini_cycle_count;/* Start of IIR code*/ j0 = j31 + delayline;/ j0指向delayline k0 = k31 + coeffs;/ k0指向coeffs r3:2 = lj0+=2; r7:6 = qk0+=4;/r3:2=w(n-1) w(n-3) yr7:6=a4,a2 xr7:6=b4,b2 r1

溫馨提示

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

評論

0/150

提交評論