數(shù)字信號(hào)處理小試驗(yàn)_第1頁
數(shù)字信號(hào)處理小試驗(yàn)_第2頁
數(shù)字信號(hào)處理小試驗(yàn)_第3頁
數(shù)字信號(hào)處理小試驗(yàn)_第4頁
數(shù)字信號(hào)處理小試驗(yàn)_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

本文格式為Word版,下載可任意編輯——數(shù)字信號(hào)處理小試驗(yàn)

XX電子科技大學(xué)

DSP技術(shù)及應(yīng)用試驗(yàn)小作業(yè)

學(xué)院電子工程學(xué)院專業(yè)電路與系統(tǒng)學(xué)號(hào)1202320902學(xué)生姓名王艷濤授課老師郭萬有

試驗(yàn)一——VISUALDSP++的使用入門試驗(yàn)一的目的

試驗(yàn)一的主要目的是熟悉VISUALDSP++的開發(fā)環(huán)境。針對(duì)ADSP-TS201,利用幾個(gè)用C、C++和匯編語言寫成的簡(jiǎn)單例子來描述VISUALDSP+十編程環(huán)境和調(diào)試器(debugger)的主要特征和功能。對(duì)于運(yùn)行在其它類型TS20x處理器的程序只需對(duì)其鏈接描述文件(.LDF)做一些修改,就可用于其它芯片或者ADSP-TS201的硬件仿真。在目錄?\TS\ldf下有每種處理器類型的鏈接描述文件,可供參考。

試驗(yàn)一包括4個(gè)基本練習(xí):

練習(xí)一:?jiǎn)?dòng)VisualDSP++4.0,建立一個(gè)用C源代碼的工程(Project),同時(shí)用調(diào)試器來評(píng)估用C語言所編寫代碼的性能;

練習(xí)二:創(chuàng)立一個(gè)新的工程,修改源碼來調(diào)用一個(gè)匯編(asm)程序,重新編譯工程,用調(diào)試器來評(píng)估用匯編語言所寫程序的性能;

練習(xí)三:利用調(diào)試器的繪圖(plot)功能來圖形顯示一個(gè)FIR算法中的有關(guān)數(shù)據(jù)的波形;

練習(xí)四:利用調(diào)試器的性能統(tǒng)計(jì)功能(Statisticalprofile)來檢查練習(xí)三中FIR算法的效率。利用所收集到的性能統(tǒng)計(jì)數(shù)據(jù)就能看出算法中最耗時(shí)的地方。

試驗(yàn)1——運(yùn)行C程序

在練習(xí)一中,將創(chuàng)立和運(yùn)行一個(gè)C程序,源文件在…\\TS201講義\\參考試驗(yàn)程序\\Tutorial\\dot_product_c子目錄。1.試驗(yàn)步驟

l)進(jìn)入VisualDSP+十并開啟一個(gè)工程(Project)

進(jìn)入VisualDSP++,顯示VisualDSP++的集成開發(fā)和調(diào)試環(huán)境窗口(IntegratedDevelopmentandDebuggerEnvironment,簡(jiǎn)稱IDDE)。

選擇菜單File中Open開啟文件…unit_1\\dot_product_c\\dotprodc.dpj。

VisualDSP++環(huán)境將裝載dotprodc工程,并列出相應(yīng)的源文件。在輸出窗口(OutputWindow)中顯示簡(jiǎn)要信息。

Dotprodc工程中有3個(gè)文件,定義數(shù)組和計(jì)算數(shù)組點(diǎn)積和的兩個(gè)C語言源文件

dotprod_main.c(主程序)、dotprod.c(子程序)。2)編譯dotprodc工程

在菜單Project中選擇BuildProject來對(duì)工程進(jìn)行編譯。此時(shí),輸出窗口顯示程序編譯時(shí)的各種狀態(tài)信息(包括出錯(cuò)和編譯進(jìn)程信息)。當(dāng)編譯檢測(cè)到錯(cuò)誤時(shí),將在輸出窗口出現(xiàn)相應(yīng)的出錯(cuò)信息,用鼠標(biāo)雙擊它,編譯器將自行開啟源文件。這時(shí)可對(duì)源文件編輯、修改錯(cuò)誤,再次進(jìn)行編譯。當(dāng)編譯不再有錯(cuò)時(shí),輸出窗口將顯示“Buildcompletedsuccessfully〞。

在本例子中,編譯器會(huì)檢測(cè)到一個(gè)未定義的錯(cuò)誤,顯示為:

“.\dotprod_main.c〞,line115:error#20:identifier“itn〞isundefineditni;在輸出窗口中對(duì)該行文字用鼠標(biāo)雙擊,環(huán)境會(huì)自動(dòng)開啟dotprod_main.c文件,并將光標(biāo)定位在出錯(cuò)行。你可以看見單詞“int〞被錯(cuò)寫成“itn〞。

將該錯(cuò)誤改正后,保存并重新編譯。假使再?zèng)]有錯(cuò)誤出現(xiàn),這時(shí)工程已被成功編譯,就可以用VisualDSP++的debugger來調(diào)試程序。

VisualDSP++開發(fā)環(huán)境的編輯窗口和輸出窗口以及所顯示的程序編譯時(shí)的各種狀態(tài)信息如圖7.1所示:

圖7.1VisualDSP++開發(fā)環(huán)境的編輯窗口和輸出窗口圖7.2NeWSession對(duì)話框

3)運(yùn)行VsualDSP++調(diào)試器

在編譯完成后,環(huán)境將自動(dòng)進(jìn)入調(diào)試狀態(tài),對(duì)于初次進(jìn)入debugger,將顯示對(duì)象選擇對(duì)話框,在其中指定對(duì)象和處理器信息。

DebugTargetPlatformSessionNameProcessor

選擇值

ADSP-TS20xFamilySimulator

ADSP-TS201Rev.0.0SingleProcessorSimulator

ADSP-TS201ADSP-TS201Rev.0.0SingleProcessorSimulatorADSP-TS201

若在調(diào)試過程中需定義不同的對(duì)象和處理器類型,選取菜單Sessions中NeWSession項(xiàng)來重新定義。NeWSession對(duì)話框圖7.2所示:

用VisualDSP+十調(diào)試時(shí),調(diào)試器會(huì)自動(dòng)調(diào)入工程的可執(zhí)行文件dotprodc.dxe。在默認(rèn)狀況下,調(diào)試器會(huì)開啟三個(gè)窗口:輸出窗口(下)、反匯編窗口(右)、包括工程主文件dotprod_main.c的源代碼窗口(左)。如圖7.3所示,左窗的每一條C語句都對(duì)應(yīng)右窗中的多條匯編指令:

圖7.3調(diào)試器的輸出窗口、反匯編窗口和源代碼窗口

在圖7.3中,箭頭所指為當(dāng)前執(zhí)行指令,紅圓圈代表設(shè)定的斷點(diǎn)位置。當(dāng)調(diào)試器加載C程序時(shí),會(huì)自動(dòng)設(shè)置兩個(gè)斷點(diǎn),分別在代碼執(zhí)行的開頭和結(jié)尾。

測(cè)覽程序中的斷點(diǎn)可選擇菜單Settings下的BreakPoints?,可在此對(duì)話框中增加或刪除斷點(diǎn)。另外也可通過在每條代碼行的開頭處雙擊鼠標(biāo)或快捷鍵F9來設(shè)置或取消斷點(diǎn)。

4)運(yùn)行dotprod.c

從Debug菜單中選擇Run項(xiàng),程序?qū)⒈粓?zhí)行,其輸出結(jié)果在Outputwindow中顯

示。如圖7.4所示:

圖7.4dotprod.c輸出結(jié)果

5)評(píng)估函數(shù)a_doc_c的性能(profile)

Profile用來分析程序的運(yùn)行時(shí)間特性,通過Profile可以找到最耗時(shí)的程序段,這

可能就是需要進(jìn)一步優(yōu)化性能的程序段。

通過下述步驟來設(shè)置Profile功能并顯示其結(jié)果:

(1)選Tools\\LinearProfiling\\NewProfile命令,如圖7.5所示:

圖7.5設(shè)置Profile功能的菜單

(2)出現(xiàn)一個(gè)Profile的子窗口,在該窗口上點(diǎn)擊右鍵彈出如圖7.6(1)的快捷菜單,

如圖7.6(1)所示:

圖7.6Profile右鍵快捷菜單圖7.6(2)設(shè)置進(jìn)行評(píng)估的起始地址和終止地址

(3)點(diǎn)擊菜單中的Properties….,選中其次個(gè)選項(xiàng)卡“filter〞然后設(shè)置開始地址和結(jié)

束地址;如圖7.6(2)所示。

VisualDSP++允許在整個(gè)程序空間中進(jìn)行評(píng)估,當(dāng)然也可以設(shè)置若干個(gè)Memoryranges(匯編程序評(píng)估選項(xiàng))或若干個(gè)C子程序的函數(shù)體進(jìn)行評(píng)估,即可以重復(fù)指定多個(gè)ProfileRange。在本例中要求對(duì)三個(gè)子函數(shù)a_dot_b()、a_dot_c()、a_dot_d()的運(yùn)行效率作出評(píng)估,應(yīng)在“Filter〞選項(xiàng)卡中選擇C/C++function,如圖7.6(2)所示:

(4)重新編譯加載程序,按F5繼續(xù)運(yùn)行程序,程序完全執(zhí)行后,將在Console窗口顯示結(jié)果,并在Profile窗口中顯示程序運(yùn)行過程中的各種數(shù)據(jù)。點(diǎn)擊右鍵菜單中ViewSampleCount,顯示如圖7.7(1)所示:

7.7Profile窗口(1)

將ProjectOptions中的編譯器設(shè)置將代碼優(yōu)化功能選中,重新編譯和鏈接程序后,

對(duì)程序中的三個(gè)子函數(shù)的運(yùn)行性能重新進(jìn)行評(píng)估,如圖7.7(2)所示,對(duì)比優(yōu)化前和優(yōu)化后的區(qū)別,說明其原因。

圖7.7Profile窗口(2)

2.試驗(yàn)要求

記錄profile窗口中函數(shù)a_dot_c()的評(píng)估結(jié)果,分析程序的執(zhí)行時(shí)間。

試驗(yàn)2——運(yùn)行C和匯編混合程序

在練習(xí)一中的例子是C主程序調(diào)用C子程序。在練習(xí)二中,要學(xué)會(huì)如何創(chuàng)立新工程,在此基礎(chǔ)上我們將修改這個(gè)C主程序,讓其調(diào)用一個(gè)匯編子程序,重新編譯工程并評(píng)估匯編程序的性能。1.試驗(yàn)步驟

l)創(chuàng)立一個(gè)新的工程(project)

從Project菜單中選取New項(xiàng),在彈出的工程保存對(duì)話框中,將工程名定義為dot_product_asm,并保存在…unit_1\\dot_product_asm目錄下。

接著在彈出的工程選項(xiàng)對(duì)話框中定義其各項(xiàng)參數(shù)值,其各項(xiàng)參數(shù)值可如下表所示:

選項(xiàng)ProcessorTypeNameSettingsfor

設(shè)定值A(chǔ)DSP-TS201DSPexecutablefiledot_product_asmDebug

這些參數(shù)都是針對(duì)ADSP-TS201處理器而設(shè)置的,VisualDSP++的Project選項(xiàng)卡如圖7.8所示:

圖7.8VisualDSP++的Project選項(xiàng)卡圖7.9VisualDSP++的Compile選項(xiàng)卡

在ProjectOptions對(duì)話框中,選中“Enableoptimization〞和“Generatedebuginformation〞兩項(xiàng),系統(tǒng)將自動(dòng)生成針對(duì)ADSP-TS201的優(yōu)化代碼,如圖7.9所示:2)向dot_product工程中添加文件

選取菜單Project\\AddtoProject\\file(s)?項(xiàng),按住Ctrl鍵來同時(shí)選中dotprod_main.c,dotprod.c,dotprod_func.a(chǎn)sm文件,點(diǎn)擊“Add〞將這幾個(gè)文件加到工程中。結(jié)果如圖7.10所示:

圖7.10添加文件對(duì)話窗

3)創(chuàng)立鏈接描述文件

在此步驟中,我們將給該工程創(chuàng)立一個(gè)連接描述文件。連接描述文件創(chuàng)立步驟如下:

1,在Tool菜單中,點(diǎn)擊ExpertLinker中的CreatLDF,就會(huì)出現(xiàn)如下圖7.11所示的窗口。

圖7.11圖7.12

2.選擇“Projecttype〞〞為C型,點(diǎn)擊“下一步“,如圖7.12

3.選擇“Systemtype〞為“Singleprocess〞,下一步,窗口如圖7.13。

圖7.13圖7.14

4.在如下圖7.14的窗口中,點(diǎn)擊完成,就會(huì)出現(xiàn)該工程的鏈接描述文件圖。至此,該工程的鏈接描述文件就創(chuàng)立成功。4)修改工程源文件

在此步驟中,我們將修改dotprod_main.c文件,讓其調(diào)用一個(gè)匯編子程序a_dot_c_asm來取代a_doc。

開啟dotprod_main.c文件,在源代碼中找到以下相應(yīng)的四條語句:

externinta_dot_c(int*,int*);/*externinta_dot_c_asm(int*,int*);*/……………

result[1]=a_dot_c(a,c);

/*result[1]=a_dot_c_asm(a,c);*/將這四條語句修改為:

/*externinta_dot_c(int*,int*);*/externinta_dot_c_asm(int*,int*);…

/*result[1]=a_dot_c(a,c);*/result[1]=a_dot_c_asm(a,c);

這樣主程序?qū)⒄{(diào)用a_dor_c_asm匯編程序來取代練習(xí)一中的a_dot_c子程序。5)修改鏈接描述文件

當(dāng)工程源文件修改該完畢后,編譯在工程,輸出窗口如下圖7.15所

圖7.15

開啟鏈接描述文件,如下圖7.16:

圖7.16

將左邊方框中的帶有紅叉的“dotprod_func.doj〞拖動(dòng)到右邊方框M0Code內(nèi)存中(可通過右上角的放大器放大查看),紅叉消失,這時(shí)我們就對(duì)鏈接描述文件進(jìn)行了修改。6)編譯和運(yùn)行dot_product

先選取菜單Project\\BuildProject項(xiàng)來編譯工程;再選取菜單Debug\\Run項(xiàng)來運(yùn)行程序。

在輸出窗口(OutputWindows)中就會(huì)得到運(yùn)行結(jié)果:

Dotproduct[0]=13273595Dotproduct[1]=-49956078Dotproduct[2]=35872518

7)評(píng)估a_dot_asm的效率

要評(píng)估匯編代碼的效率,要在評(píng)估屬性設(shè)置窗口中的“Memoryranges〞中設(shè)定評(píng)估代碼的起始地址。將StartAddress設(shè)置為匯編子程序入口地址_a_dot_c_asm,將EndAddress設(shè)置為匯編子程序的出口地址_a_dot_c_asm.end。重新加載程序,并運(yùn)行程序進(jìn)行匯編語言程序評(píng)估,評(píng)估的設(shè)定窗口和結(jié)果窗口及結(jié)果如圖7.17示:

圖7.17a_dot_asmProfile設(shè)定窗口和結(jié)果窗口

從圖中可以看出原來沒有優(yōu)化的C語言子程序?yàn)?26,現(xiàn)在改變?yōu)閰R編語言程序嵌入后為201,從而說明匯編語言執(zhí)行速度比C語言快多了。

試驗(yàn)3——數(shù)據(jù)繪圖(Plotting)

練習(xí)三是對(duì)一個(gè)己編譯的算法程序的數(shù)據(jù)進(jìn)行繪圖輸出1.試驗(yàn)步驟

l)將算法程序調(diào)入Debugger環(huán)境

關(guān)閉所有已開啟的工程和文件,選擇菜單File\\LoadProgram...項(xiàng)或點(diǎn)擊圖標(biāo)。在出現(xiàn)的對(duì)話框中選擇文件…bkfir2_flp32\\debug\\bkfir2_flp32.dxe。

可以在C代碼源文件中看到兩個(gè)全局?jǐn)?shù)組:inputs和output。2)開啟繪圖窗口并設(shè)定參數(shù)

選擇菜單View\\DebugWindows\\Plot\\New?項(xiàng),將出現(xiàn)Plot參數(shù)設(shè)置窗口。在PlotType項(xiàng)中選擇LinePlot,在PlotTitle中輸入fir。其它參數(shù)設(shè)定如表7-1所示:

表7-1Plot參數(shù)設(shè)置DataSetsinputsNameinputsMemoryTigerSharcMemoryoutputoutputTigerSharcMemoryPlot設(shè)置對(duì)話框如圖7.18示:

output2561floatAddressInputsCount256Stride1Datafloat

圖7.18Plot設(shè)置對(duì)話框

各行參數(shù)在設(shè)置完后,點(diǎn)擊“Add〞參與,最終點(diǎn)擊“OK〞。此時(shí)屏幕將出現(xiàn)Plot設(shè)置對(duì)話框如圖7.19所示的繪圖窗口:

圖7.19程序運(yùn)行之前的Plot窗口IN變量圖

3)運(yùn)行fir程序并在圖形窗口中觀測(cè)數(shù)據(jù)

接F5運(yùn)行程序,當(dāng)程序Halt(SHIFT-F5)后,用Plot窗口繪出出現(xiàn)數(shù)據(jù)output的曲線。圖中的兩條曲線分別代表inputs(綠)和output(紫)數(shù)組的值,程序運(yùn)行后的Plot窗口如圖7.20(1)所示:

圖7.20(1)程序運(yùn)行后的Plot窗口

在Plot窗口中可用鼠標(biāo)左鍵選取圖形的一部分圖形會(huì)自動(dòng)對(duì)所選區(qū)域放大,便于數(shù)據(jù)的觀測(cè)。若要確切地知道某個(gè)數(shù)據(jù)在某點(diǎn)的值,可點(diǎn)擊鼠標(biāo)的右鍵,在彈出的菜單中選取“DataCursor〞項(xiàng),圖形上將出現(xiàn)“十〞字大光標(biāo),可點(diǎn)擊曲線上的任一點(diǎn),

在窗口左下角會(huì)出現(xiàn)該點(diǎn)的數(shù)值和曲線名,可用鍵盤上的上(↑)下(↓)鍵來切換所選曲線。

4)繪制幅度譜線圖

在plot窗口點(diǎn)擊右鍵,選擇“modifysetting〞,在“plotsetting〞窗口選擇“dataprocessing〞,在“datasets〞窗口選擇“inputs〞,在“dataprocess〞窗口選擇“FFTMagnitude〞,然后點(diǎn)“OK〞,重復(fù)一以上操作,把數(shù)據(jù)“output〞也改為“FFTMagnitude〞,在plot窗口可以看到如下圖7.20(2)所示:

圖7.20(2)數(shù)據(jù)的FFT

該圖就是bkfir2_flp32濾波前后的數(shù)據(jù)頻譜圖。

試驗(yàn)4——性能統(tǒng)計(jì)

在練習(xí)四中,我們將再次調(diào)用并調(diào)試fir程序,用調(diào)試器的性能特性(statisticalProfiling)來找出程序中最花時(shí)間的部分。1.試驗(yàn)步驟l)開啟fir程序

關(guān)閉所有的文件,宛如練習(xí)三中的一樣,選用菜單File\LoadProgram?命令項(xiàng),在對(duì)話框中選擇文件…bkfir2_flp32\\debug\\bkfir2_flp32.dxe。2)開啟統(tǒng)計(jì)特性選項(xiàng)

選Tools\\LinearProfiling\\NewProfile命令,出現(xiàn)StatisticalProfilingResults窗口,如圖7.21所示:

圖7.24StatisticalProfilingResults窗口

3)收集和檢查統(tǒng)計(jì)特性數(shù)據(jù)

按F5使程序運(yùn)行到結(jié)尾。統(tǒng)計(jì)數(shù)據(jù)會(huì)在統(tǒng)計(jì)特性結(jié)果窗口中出現(xiàn),窗口被分為兩個(gè)部分。左邊窗口顯示三列數(shù)據(jù),每列的含義為:

?Histogram:用圖形的方式來顯示該執(zhí)行單元所用時(shí)間百分比。?%:用數(shù)字顯示該執(zhí)行單元所占用的時(shí)間百分比。

?ExecutionUnit:執(zhí)行單元,對(duì)于C或C十十語言中的函數(shù)顯示其函數(shù)名,對(duì)于其它指令或匯編語言顯示指令的地址,顯示為PC[xxx]。

從窗口中我們可以看出main()函數(shù)用去了總程序時(shí)間的約99.94%。用鼠標(biāo)雙擊該行,在右邊窗口顯示該函數(shù)的源代碼及其行數(shù),且顯示各語句所用的時(shí)間百分比。結(jié)果如圖7.16所示:

圖7.16統(tǒng)計(jì)特性數(shù)據(jù)窗口

從窗口中可以看出,內(nèi)循環(huán)占去了92.29%的時(shí)間。因此,在編程時(shí)若需提高算法的執(zhí)行效率,可將該段代碼用匯編語言重新編寫來提高它的效率。2.試驗(yàn)要求

記錄統(tǒng)計(jì)特性數(shù)據(jù)窗口的結(jié)果,分析耗時(shí)最多的程序段,指出原因。

試驗(yàn)結(jié)果

試驗(yàn)1——運(yùn)行C程序

試驗(yàn)結(jié)果:

優(yōu)化的試驗(yàn)結(jié)果:

結(jié)論:選定程序優(yōu)化選項(xiàng)后,程序運(yùn)行時(shí)間明顯減少。

試驗(yàn)2——運(yùn)行C和匯編混合程序

試驗(yàn)結(jié)果:

C語言運(yùn)行結(jié)果:

匯編語言運(yùn)行結(jié)果:

結(jié)論:

從圖中可以看出原來沒有優(yōu)化的C語言子程序?yàn)?43,現(xiàn)在改變?yōu)閰R編語言程序嵌入后為194,從而說明匯編語言執(zhí)行速度比C語言快多了。

試驗(yàn)3——數(shù)據(jù)繪圖(Plotting)

試驗(yàn)結(jié)果:

未執(zhí)行之前輸入(inputs)——藍(lán)色,輸出(output)——紫色,時(shí)域圖:

執(zhí)行之后輸入(inputs)——藍(lán)色,輸出(output)——紫色,時(shí)域圖:

執(zhí)行之后輸入(inputs)——藍(lán)色,輸出(output)——紫色,頻域圖:

試驗(yàn)4——性能統(tǒng)計(jì)

試驗(yàn)結(jié)果

試驗(yàn)結(jié)果如下圖所示,從圖中可以看出程序loop循環(huán)部分耗時(shí)最多。原因:loop部分進(jìn)行了大量的乘法運(yùn)算因此比較花費(fèi)時(shí)間。假使想要減少運(yùn)行時(shí)間提高效率可以用匯編語言來提高函數(shù)的效率。

試驗(yàn)5——內(nèi)存與SDRAM間的一維DMA通信

1.試驗(yàn)?zāi)康?/p>

了解DMA通信基本原理,把握內(nèi)存與SDRAM間一維DMA通信方式及相關(guān)控制方法。

2.試驗(yàn)原理:

DMA是一種不需要處理器內(nèi)核干預(yù)的數(shù)據(jù)傳輸機(jī)制,作為一種后臺(tái)任務(wù)執(zhí)行,即進(jìn)行DMA傳輸時(shí),處理器可以處理其它任務(wù)。假使使能了DMA中斷,那么當(dāng)數(shù)據(jù)傳輸終止后會(huì)產(chǎn)生中斷信號(hào),表示DMA傳輸已經(jīng)完成。

DMA傳輸方式包括:一維DMA、二維DMA、鏈?zhǔn)紻MA、AutoDMA等,本次試驗(yàn)使用一維DMA方式,即傳輸存儲(chǔ)器中一段連續(xù)的數(shù)據(jù)(地址是相鄰接的)。

若要利用DMA傳輸數(shù)據(jù),首先應(yīng)配置DMA傳輸控制塊(TCB)寄放器。DMA傳輸?shù)臄?shù)據(jù)具有方向性,即從發(fā)送端(源)到接受端(目的),若為外部存儲(chǔ)器DMA傳輸,則需要設(shè)置兩個(gè)TCB參數(shù),一個(gè)源TCB,用于描述源數(shù)據(jù)的地址、大小和每次傳輸數(shù)據(jù)的長(zhǎng)度等;還有一個(gè)目的TCB,用于描述數(shù)據(jù)傳入的目標(biāo)地址、數(shù)據(jù)大小及每次傳輸數(shù)據(jù)的長(zhǎng)度等。若要使能DMA中斷,也需要在TCB中設(shè)置相應(yīng)位。若使用鏈路或AutoDMA通道則只需一個(gè)目的TCB。設(shè)置好TCB寄放器后,DMA傳輸自動(dòng)開始。

TS201S一共14個(gè)DMA通道,4個(gè)通道(0~3)專用于外部存儲(chǔ)器設(shè)備,8個(gè)通道(4~11)用于鏈路口,2個(gè)通道(12~13)用于自動(dòng)DMA操作。本次試驗(yàn)使用DMA0通道實(shí)現(xiàn)內(nèi)存與外部存儲(chǔ)器SDRAM間的一維DMA通信。

3.相關(guān)寄放器說明:

1〉TCB寄放器

TCB寄放器是一個(gè)128位的四字組寄放器,由DI、DX、DY和DP寄放器組成:a)DI是DMA索引寄放器,包括了將要發(fā)送或者接收的數(shù)據(jù)的源地址或者目的地址,既可以指向內(nèi)部存儲(chǔ)器又可以指向外部存儲(chǔ)器,也可指向鏈路口b)DX包含了一個(gè)16位(高)的計(jì)數(shù)值和一個(gè)16位的修改量,若使能了二維

DMA則該寄放器保存的只是X方向的計(jì)數(shù)值和修改量

c)DY與DX結(jié)合一起使用,保存了Y方向上的16位計(jì)數(shù)值和16位修改量。假使只進(jìn)行一維DMA傳輸,就不需要設(shè)置該寄放器。d)DP寄放器包括了DMA所有控制信息,分為兩個(gè)主要段

3122210鏈?zhǔn)街羔?/*0x4000=B0100000000000000*/IMASKL=xr0;;xr0=0;;IMASKH=0

也可以直接使用如下指令實(shí)現(xiàn),原理是一樣的,下面的方法更為直觀一些。

xr0=INT_DMA0;;/*INT_DMA0在頭文件中的定義的值為0x4000*/IMASKL=xr0;;

4.試驗(yàn)例程:

程序說明:

本程序用匯編語言編寫,主要由以下幾個(gè)部分構(gòu)成:

_Initialize_Bus_SDRAM:實(shí)現(xiàn)對(duì)總線初始化設(shè)置,本試驗(yàn)不予重點(diǎn)講解,可參考硬件手冊(cè);_Fill_Tx_Data:利用循環(huán)向rx_daata寫入要傳輸?shù)臄?shù)據(jù)值1~1024;

_Load_DMA0_TCBs:向DMA0通道的TCB寄放器導(dǎo)入設(shè)置好的參數(shù),開始DMA傳輸;_Done:用于觀測(cè)相關(guān)存儲(chǔ)器內(nèi)存儲(chǔ)值的變化。

5.試驗(yàn)步驟

1〉啟動(dòng)程序

運(yùn)行VisualDSP++進(jìn)入主程序界面,更改Session為ADSP-TS201SRev.0.0SingleProcessorSimulator。若此時(shí)程序自動(dòng)開啟一個(gè)(或多個(gè))工程,先將其關(guān)閉,通過以下兩種方式實(shí)現(xiàn):

3〉編譯程序

〉新建工程文件,自定義文件名,然后

將..\\Code\\DMA\\DMA1下的DMA1.asm源文件導(dǎo)入工程中的SourceFiles內(nèi);

〉建立鏈接文件(如下圖),一切選項(xiàng)保持默認(rèn),完成鏈接文件建立。

〉選擇Project菜單下的Buildproject選項(xiàng)進(jìn)行編譯,此時(shí)會(huì)出現(xiàn)如下錯(cuò)誤信息:

含義:聲明的程序段/數(shù)據(jù)段所存放到了不能被執(zhí)行的位置,導(dǎo)致rx_data沒有被分派到相應(yīng)的存儲(chǔ)空間,我們通過修改LDF文件來消除此錯(cuò)誤。在左側(cè)的工程窗口中雙擊相應(yīng)的LDF文件會(huì)出現(xiàn)ExpertLinker窗口(如下圖),我們會(huì)發(fā)現(xiàn)sdram0上有紅叉

標(biāo)記,說明此部分有問題。由于TS201S將外部存儲(chǔ)器SDRAM地址映射到了0x4000

0000到0x7FFFFFFF之間的四個(gè)部分:MSSD0~3,所以我們將DMA1.obj拖拽至其中

之一即可,由于開發(fā)板上SDRAM是映射在MSSD0,為便利以后試驗(yàn),直接拖至MSSD0。

完成上述操作后,重新編譯工程。

〉編譯成功后,為便利觀測(cè)存儲(chǔ)器內(nèi)相應(yīng)地址其內(nèi)容變化,在__Done處設(shè)置斷點(diǎn),將光標(biāo)移至相應(yīng)位置,按F9設(shè)置。與此同時(shí)開啟兩個(gè)存儲(chǔ)器觀測(cè)窗口,選擇菜單Memory->TigerSHARCMemory,分別輸入tx_data和rx_data,如下圖:

〉點(diǎn)擊Debug菜單下的RUN選項(xiàng)開始運(yùn)行(或直接按F5),程序自動(dòng)運(yùn)行至_Done后中止,觀測(cè)tx_data內(nèi)數(shù)據(jù)值,然后單步運(yùn)行程序(F11),觀測(cè)rx_data內(nèi)數(shù)據(jù)變化。

6.試驗(yàn)要求

1〉依照試驗(yàn)步驟完成試驗(yàn);

2〉修改程序,DMA每次傳輸一個(gè)字(32位),驗(yàn)證結(jié)果;

3〉修改程序,用軟環(huán)境模擬外部中斷來啟動(dòng)DMA傳輸,并觀測(cè)傳輸結(jié)果。提醒:實(shí)際操作可參考之前試驗(yàn)課件中軟模擬InterruptTiming的設(shè)置并且通過修改一些程序。

4〉分析兩個(gè)程序的原理,簡(jiǎn)述軟環(huán)境模擬外部硬件中斷的程序流程。

和DMA試驗(yàn)。

3.相關(guān)寄放器說明:

1)TCB寄放器

TCB寄放器是一個(gè)128位的四字組寄放器,由DI、DX、DY和DP寄放器組成:DI是DMA索引寄放器,包括了將要發(fā)送或者接收的數(shù)據(jù)的源地址或者目的地址,既可以指向內(nèi)部存儲(chǔ)器又可以指向外部存儲(chǔ)器,也可指向鏈路口

DX包含了一個(gè)16位(高)的計(jì)數(shù)值和一個(gè)16位的修改量,若使能了二維DMA則該寄放器保存的只是X方向的計(jì)數(shù)值和修改量

DY與DX結(jié)合一起使用,保存了Y方向上的16位計(jì)數(shù)值和16位修改量。假使只進(jìn)行一維DMA傳輸,就不需要設(shè)置該寄放器。

DP寄放器包括了DMA所有控制信息,分為兩個(gè)主要段

3122210鏈?zhǔn)街羔?//0x200=B001000000000IMASKH=xr0;;xr0=0;;IMASKL=0

也可以直接使用如下指令實(shí)現(xiàn),原理是一樣的,下面的方法更為直觀一些。

xr0=INT_IRQ0;;//INT_IRQ0在頭文件中的定義的值為B001000000000IMASKH=xr0;;

4.試驗(yàn)例程:

程序說明:

本程序用匯編語言編寫,主要由以下幾個(gè)部分構(gòu)成:

_Initialize_Bus_SDRAM:實(shí)現(xiàn)對(duì)總線初始化設(shè)置,本試驗(yàn)不予重點(diǎn)講解,可參考硬件手冊(cè);_Fill_Tx_Data:利用循環(huán)向rx_daata寫入要傳輸?shù)臄?shù)據(jù)值1~1024;

_Wait_For_Interrupt實(shí)現(xiàn)功能:等待中斷發(fā)生,跳至中斷程序_IRQ0_ISR執(zhí)行;_IRQ0_ISR實(shí)現(xiàn)功能:外部中斷實(shí)現(xiàn)DMA傳輸;

_Load_DMA0_TCBs:向DMA0通道的TCB寄放器導(dǎo)入設(shè)置好的參數(shù),啟動(dòng)DMA;

5.試驗(yàn)步驟

1〉硬件連接

〉檢查EZ-KIT板各SW設(shè)置是否正確,如下圖;

〉用USB將PC與EZ-KIT板連接;

〉連接EZ-KIT板電源線,LED1(POWER)點(diǎn)亮、LED8(RESET)點(diǎn)亮,EZ-KIT板開始自動(dòng)復(fù)位,復(fù)位完成后LED8熄滅,LED3點(diǎn)亮(USBMONITOR,注意此LED實(shí)際位置在USB上方),則表示EZ-KIT板與PC已經(jīng)正常連接,可以運(yùn)行VisualDSP++。2〉啟動(dòng)程序

運(yùn)行VisualDSP++進(jìn)入主程序界面,若當(dāng)前Session為ADSP-TS201SEZ-KITLiteViaD

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論