版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)一: DSP軟件集成開發(fā)環(huán)境CCS一. 實(shí)驗(yàn)?zāi)康?. 了解 DSP 軟件開發(fā)集成環(huán)境 Code Composer Studio (CCS) 的安裝和配置過程;2. 熟悉并掌握 CCS 的操作環(huán)境和基本功能,了解DSP軟件開發(fā)的一般流程:(1) 學(xué)習(xí)創(chuàng)建工程和管理工程的方法;(2) 了解工程文件和映像文件的基本內(nèi)容;(3) 了解基本的編譯和調(diào)試功能;(4) 學(xué)習(xí)使用觀察窗口。二. 實(shí)驗(yàn)設(shè)備計(jì)算機(jī)、Code Composer Studio 2.2 或以上版本三. 背景知識(shí)1. DSP 應(yīng)用系統(tǒng)開發(fā)一般需要借助以下調(diào)試工具: 軟件集成開發(fā)環(huán)境 (CCS):完成系統(tǒng)的軟件開發(fā),進(jìn)行軟件和硬件仿真調(diào)
2、試; 硬件開發(fā)及測(cè)試平臺(tái):實(shí)現(xiàn)系統(tǒng)的硬件仿真與調(diào)試,包括仿真器和評(píng)估模塊。2. CCS 集成了適用于所有 TI 器件的源碼編輯、編譯鏈接、代碼性能評(píng)估、調(diào)試仿真等功能,為設(shè)計(jì)人員提供了一個(gè)完整的嵌入式系統(tǒng)軟件開發(fā)環(huán)境。3. 系統(tǒng)軟件部分可以通過 CCS 建立的工程文件進(jìn)行管理,工程文件一般包含以下幾種文件: 源程序文件:C 語言或匯編語言文件(*.ASM 或*.C) 頭文件 (*.H) 命令文件 (*.CMD) 庫文件 (*.LIB, *.OBJ)四. 實(shí)驗(yàn)步驟1 創(chuàng)建工程文件雙擊 CCStudio 圖標(biāo),啟動(dòng) CCS,CCS 的初始界面包括工程管理區(qū)和工作區(qū)兩部分。在菜單中選擇“Projec
3、tNew”,彈出“Project Create”窗口:若標(biāo)題欄顯示xxxx Emulator, 則需要先運(yùn)行 Setup CCS, 選擇合適的軟件仿真環(huán)境在“Project”編輯框內(nèi)填入項(xiàng)目名稱,例如“hello1”;有必要的話,可以更改項(xiàng)目文件夾位置 (Location);“Project”下拉框用以確定輸出文件類型;目標(biāo)硬件類型在“Target”下拉框中指定。點(diǎn)擊“完成”后,CCS 自動(dòng)在指定目錄下生成“hello1.pjt”工程文件。工程文件中保存了對(duì)應(yīng)工程的設(shè)置信息和內(nèi)部文件的引用情況。展開工程管理窗口“Projects”下的“hello1.pjt”,可以看到所有項(xiàng)目均為空。任務(wù) 1:
4、在 notepad 中打開“hello1.pjt”,了解并記錄工程文件提供的設(shè)置信息2 在工程文件中添加程序文件選擇 Files -new - Source File,在編輯窗內(nèi)輸入以下源程序:#include void main(void) printf(Hello world!n);將該文件命名為“hello1.c”,保存到工程文件夾下。選擇“Project - Add Files to Project.”,或右鍵點(diǎn)擊工程管理區(qū)的“Scource”標(biāo)簽選擇“Add Files to Project.”,將該文件添加到本工程。點(diǎn)擊“Source”標(biāo)簽左邊的“+”,可以看到新加入的源文件。3
5、編譯和鏈接選擇“Project-Build/Rebuild all”,或單擊工具欄中的相應(yīng)按鈕,啟動(dòng)編譯、匯編和鏈接過程。主窗口下部的“Output”提示窗會(huì)實(shí)時(shí)顯示編譯信息。若無錯(cuò)誤,將生成可執(zhí)行 .out 文件。本工程文件鏈接出錯(cuò),提示信息為“符號(hào)_printf 未做定義”。錯(cuò)誤原因是沒有在工程中加入正確的庫文件。涉及到標(biāo)準(zhǔn)庫函數(shù)調(diào)用的C語言源程序必須包含TI公司提供的“rts.lib”庫文件。該文件位于安裝目錄下的Cxxxxcgtoolslib子目錄,例如,C:CCSC5400cgtoolslib。按照前述步驟將該庫文件添加到工程文件的“Libraries”標(biāo)簽下,重新編譯鏈接,順利通過
6、,但仍然有警告信息。除直接添加庫文件外,還可以通過修改鏈接參數(shù)引入庫文件。在工程管理窗中右鍵點(diǎn)擊工程文件名,選擇”Build Options”,將”Linker- Libraries - Inc. Libraries (-l)” 設(shè)置為”rts.lib”。4 運(yùn)行程序選擇“File - Load Program”,將鏈接生成的.out文件加載到目標(biāo) DSP;此時(shí)CCS會(huì)自動(dòng)打開反匯編窗口,并在其中顯示加載程序的反匯編指令。注意:保險(xiǎn)起見,每次加載或重新加載可執(zhí)行文件前,請(qǐng)先重置CPU,方法是選擇“Debug-Reset CPU”。選擇“View - Registers - CPU Regist
7、ers”,打開寄存器窗口。選擇“Debug - Run”,運(yùn)行加載程序。運(yùn)行結(jié)果呈現(xiàn)在“Ouput”窗口的“Stdout”標(biāo)簽下。另外要注意,程序運(yùn)行前后寄存器內(nèi)容可能會(huì)發(fā)生變化,這些寄存器在寄存器窗中用紅色字體標(biāo)示。任務(wù) 2:點(diǎn)擊“Debug - Reset CPU”,記錄3個(gè)狀態(tài)寄存器的缺省設(shè)置,并說明其含義5 基本調(diào)試功能測(cè)試將源程序修改為如下形式:#include void main(void)int i=0;char disp_str = Hello world!n;for (i=1; iWatch Window”,或在最左側(cè)的工具欄中選擇對(duì)應(yīng)按鈕,打開變量觀察窗;2) 在編輯窗中,
8、雙擊以選中某一變量,再單擊右鍵,選擇“Quick Watch”,可打開“Quick Watch”窗口,可以在該窗口內(nèi)顯示或修改變量屬性;3) 在編輯窗中,雙擊以選中某一變量,再單擊右鍵,選擇“Add to Watch Window”,把該變量添加到變量觀察窗,可以在該窗口內(nèi)顯示或修改變量屬性;將變量 i 和 disp_str 添加到變量觀察窗;4) 在printf 調(diào)用之前設(shè)置斷點(diǎn),方法為:將光標(biāo)移動(dòng)至目標(biāo)行,按F9 (注意:CCS 版本不同,快捷鍵及菜單設(shè)置也不同),或點(diǎn)擊右鍵選擇“Toggle Breakpoint”(雙擊編輯窗左邊的灰色控制條也可以設(shè)置或刪除斷點(diǎn));5) 選擇“Debug
9、 - Run”,或按F5,運(yùn)行程序;程序會(huì)自動(dòng)停在斷點(diǎn)處;再按F5,或選擇“Debug - Run”,程序會(huì)繼續(xù)運(yùn)行至下一個(gè)斷點(diǎn);6) 調(diào)試過程中,在變量觀察窗口中雙擊某個(gè)變量的變量值,可對(duì)其進(jìn)行修改,例如,改變i 的值可以改變重復(fù)次數(shù),改變 disp_str 可以改變輸出內(nèi)容。任務(wù) 3:按上述步驟,設(shè)置斷點(diǎn),添加觀察變量;當(dāng)i = 2 時(shí),修改變量值,令 i= 0,disp_str =“Hello DSP!”,記錄運(yùn)行結(jié)果選做任務(wù):選擇“Debug-Run to Cursor”,或 按Ctrl+F10,會(huì)令程序執(zhí)行到光標(biāo)所在行,用這種調(diào)試方法重復(fù)完成任務(wù)2實(shí)驗(yàn)二: C54x C語言編程實(shí)驗(yàn)一
10、. 實(shí)驗(yàn)?zāi)康?. 編寫一個(gè)簡(jiǎn)單的 C 語言程序,掌握 C54x C 語言開發(fā)的基本技巧;2. 進(jìn)一步熟悉和掌握 CCS 的操作環(huán)境和基本功能:(1) 學(xué)習(xí)如何在斷點(diǎn)調(diào)試中從外部文件獲取測(cè)試數(shù)據(jù);(2) 學(xué)習(xí)如何使用 CCS 的圖形顯示功能觀測(cè)數(shù)據(jù)。二. 實(shí)驗(yàn)設(shè)備計(jì)算機(jī)、Code Composer Studio 2.2 或以上版本三. 實(shí)驗(yàn)步驟1 創(chuàng)建工程建立工程 “volume1.pjt”,加入源文件“volume.c”和頭文件“volume.h”,內(nèi)容如下:/* * = volume.h = */#ifndef TRUE#define TRUE 1#endif#define BUFSIZE
11、0x64#define GAIN 2/* * = volume.c = */#include #include volume.h/ Define input & output buffersint inp_bufferBUFSIZE; int out_bufferBUFSIZE;/ Function declarationsstatic int processing(int *input, int *output);static void dataIO(void);/* * = main function = */void main() int *input = &inp_buffer0; i
12、nt *output = &out_buffer0; puts(volume example started!n); while(TRUE) / loop forever / read input data dataIO(); / ADD BREAKPOINT HERE ! / process the input data processing(input, output); /* * = processing function =* FUNCTION: process the input signal. * PARAMETERS: addresses of input & output bu
13、ffers * RETURN VALUE: TRUE */static int processing(int *input, int *output) int size = BUFSIZE; while(size-) *output+ = *input+ * GAIN; / simply enhance the input signal by a factor GAIN return(TRUE);/* * = dataIO function = * FUNCTION: read input signal and write processed output signal. * PARAMETE
14、RS: none * RETURN VALUE: none */static void dataIO() return;任務(wù) 1:閱讀并了解該程序的結(jié)構(gòu)和功能在調(diào)用 dataIO() 函數(shù)前加入斷點(diǎn)。編譯、裝載并運(yùn)行該程序。程序自動(dòng)在斷點(diǎn)處暫停。此時(shí),若選擇“Debug-Step into”(或按 F11),會(huì)進(jìn)入被調(diào)用函數(shù)內(nèi)部,執(zhí)行一行隨即暫停;若選擇“Debug- Step over”(或按 F10),則會(huì)執(zhí)行調(diào)用函數(shù)的一行代碼而后暫停。 2 圖形顯示工具在調(diào)試程序時(shí),可以借助變量觀察窗來觀察或修改變量屬性,但這種數(shù)字式呈現(xiàn)方式很多時(shí)候顯得不夠直觀。CCS 集成了多種圖形顯示工具。借助這些
15、工具我們可以很方便的觀察信號(hào)的時(shí)頻域特性,從而更準(zhǔn)確的把握程序運(yùn)行流程。將 inp_buffer 加入到變量觀察窗,會(huì)發(fā)現(xiàn)該數(shù)組的數(shù)值無序分布,這是因?yàn)槲覀冸m然在源程序中定義了這個(gè)數(shù)組,但沒有對(duì)它明確賦值,而 C54x C 編譯器并不會(huì)自動(dòng)對(duì)變量進(jìn)行初始化。利用圖形顯示工具,可以幫助我們更清楚的看到這一點(diǎn)。選擇“View-Graph- Time/Frequency”(在某些版本中 Graph 位于 Tools 菜單下),彈出圖形屬性對(duì)話框。設(shè)置方法如下圖所示:數(shù)據(jù)顯示的起始位置; 填入數(shù)組名表示從第一個(gè)元素開始顯示選擇DSP的數(shù)據(jù)類型版本不同, 對(duì)話框的形式也會(huì)略有差異選擇圖形類型Acquis
16、ition Buffer Size/ Display Data Size: 讀取/顯示多少個(gè)數(shù)據(jù)選擇數(shù)據(jù)存儲(chǔ)位置設(shè)置好圖形顯示屬性后點(diǎn)擊“OK”,會(huì)彈出圖形顯示窗口,并顯示 inp_buffer 的波形??梢钥吹絠np_buffer中的數(shù)據(jù)呈無序狀態(tài)。若要更改顯示類型等屬性,可在該窗口內(nèi)右鍵點(diǎn)選 “Properties”。任務(wù) 2:修改顯示屬性,觀察并記錄 out_buffer 的幅頻和相頻特性; 修改顯示屬性,同時(shí)觀察并記錄 inp_buffer 和 out_buffer 的波形; 注意輸出信號(hào)的幅度并不是輸入信號(hào)的幅度*GAIN,解釋原因3 調(diào)試過程中的數(shù)據(jù)裝載CCS 允許我們?cè)谡{(diào)試過程中
17、使用本地存儲(chǔ)的數(shù)據(jù)文件來裝載或更新測(cè)試數(shù)據(jù)。負(fù)責(zé)讀取數(shù)據(jù)的dataIO()函數(shù)目前為空,在該函數(shù)的入口或出口處調(diào)入測(cè)試數(shù)據(jù)是一個(gè)不錯(cuò)的選擇。選擇“Debug- Breakpoints”打開斷點(diǎn)管理窗;在該窗口中點(diǎn)擊之前設(shè)置的斷點(diǎn)的“Action”屬性,默認(rèn)斷點(diǎn)行為為“Halt Target”(不同版本文字表述不同),在下拉框中選擇“Read Data from File”,彈出對(duì)話框;選擇讀取“C:CCStudio_v3.3tutorialsim62xxsinewavesine.dat”(或?qū)⑵湎葟?fù)制到工程目錄下再讀取),其余設(shè)置參考下圖;若在給定位置找不到數(shù)據(jù)文件,可在CCS安裝目錄下搜索s
18、ine.dat。重新運(yùn)行程序,將圖形顯示屬性中的“Display Data Size”改為200,然后在圖形顯示窗口中右鍵點(diǎn)選“Refresh”,可以得到類似于下圖的顯示波形:只所以觀察到的波形與預(yù)期不一致,是因?yàn)槌绦蜻\(yùn)行時(shí),圖形顯示工具并不會(huì)自動(dòng)更新數(shù)據(jù),而手動(dòng)更新無法準(zhǔn)確定時(shí);解決辦法是另外設(shè)置一處斷點(diǎn),專門用來更新顯示。在調(diào)用 processing() 函數(shù)之前設(shè)置斷點(diǎn),該斷點(diǎn)會(huì)自動(dòng)出現(xiàn)在斷點(diǎn)管理窗口中;點(diǎn)擊該斷點(diǎn)的“Action”屬性欄,選擇“Update All Windows”(在某些版本中,只能選擇“Refresh a Window”),得到如下波形:任務(wù) 3:記錄兩個(gè)信號(hào)的時(shí)域
19、波形;解釋信號(hào)不同步的原因;解決這一問題并記錄波形選作任務(wù):修改源程序,使得輸出與輸入相比延遲1/4周期,記錄波形實(shí)驗(yàn)三: C54x 匯編語言編程實(shí)驗(yàn)一. 實(shí)驗(yàn)?zāi)康?. 編寫簡(jiǎn)單的匯編語言程序,掌握 C54x 匯編 語言開發(fā)的基本技巧;2. 進(jìn)一步熟悉和掌握 CCS 的操作環(huán)境和基本功能,如變量觀察窗、內(nèi)存觀察窗等;3. 學(xué)習(xí)閱讀列表文件,進(jìn)一步理解匯編器的主要功能;4. 學(xué)習(xí)編寫鏈接命令文件,進(jìn)一步理解鏈接器的主要功能。二. 實(shí)驗(yàn)設(shè)備計(jì)算機(jī)、Code Composer Studio 2.2 或以上版本三. 實(shí)驗(yàn)步驟1 測(cè)試常用的匯編偽指令建立工程“spc_test.pjt”,加入一個(gè)非常簡(jiǎn)單
20、的匯編程序“spc_test.asm”,其內(nèi)容如下:.datacoef .word 011h, 022h, 033h .bss var1, 1.bss buffer, 10 ptr .word 0123h該程序無法通過編譯,錯(cuò)誤信息為“Invalid mnemonic specification”。任務(wù) 1:檢查源程序,修改語法錯(cuò)誤缺省情況下,CCS不會(huì)輸出 .lst 列表文件,需在“Build options- Compiler- Assembly”下選中“Generate Assembly Listing File”或在編輯窗中加入“-al”選項(xiàng),然后重新編譯。任務(wù) 2:預(yù)先判斷列表文件的
21、內(nèi)容;打開“Debugspc_test.lst”,進(jìn)行驗(yàn)證編輯源程序,加入以下語句:.byte 0aah.word 0ccch.xlong 0eeeefffh.long0eeeeffffh.string “help”.field 5,3.field 9,6.field 16,5NUM .set01234h.field NUM, 20.field NUM, 32任務(wù) 3:預(yù)先判斷列表文件的內(nèi)容;重新編譯,打開列表文件,進(jìn)行驗(yàn)證選做任務(wù) 1:改寫源程序,測(cè)試 .align & .even 偽指令和其它符號(hào)定義偽指令2 編寫鏈接器命令文件鏈接器命令文件的主要作用是引導(dǎo)鏈接器完成存儲(chǔ)器的最終配置,即將
22、段映射到物理存儲(chǔ)器。如果在鏈接時(shí)不提供命令文件,鏈接器將采用缺省配置,并提出警告。任務(wù) 4:用 notepad 打開Debugspc_test.map,記錄缺省情況下的存儲(chǔ)器映射信息,驗(yàn)證課堂上學(xué)習(xí)過的缺省配置方案將下面的鏈接器命令文件加入工程,重新編譯,發(fā)現(xiàn)相關(guān)警告信息消失:-e start/* Specify the entry point*/MEMORYPAGE 0: PRAM: o=0x100, l=0x0200PAGE 1: DRAM: o=0x100, l=0x0200SECTIONS.text : PRAM PAGE 0.data : PRAM PAGE 0.bss : DRAM
23、 PAGE 1任務(wù) 5:打開 spc_test.map,與缺省配置進(jìn)行比較;選做任務(wù) 2:修改鏈接器命令文件,將 .bss 段映射到 PAGE1 的 0x2000x12003 加減運(yùn)算指令和傳送指令新建工程,使用鏈接器缺省配置,加入下面的匯編程序 (或覆蓋之前建立的 spc_test.asm): .mmregs .bss x,1 .bss y,1 .bss w,1 .bss z,1 .def start .datatable .word 30,20,10 .textstart STM#0, SWWSR STM#x, AR1 RPT #2 MVPD table,*AR1+LD x,A ADD y
24、,A SUB w,A STL A,zend B end該程序用 .data 段中的 table 數(shù)組為 .bss 段中的 x、y、w 賦值,然后計(jì)算 x+y-w,并將結(jié)果存入 z。實(shí)際執(zhí)行后發(fā)現(xiàn)運(yùn)行結(jié)果與預(yù)期不符??梢越柚鷶帱c(diǎn)調(diào)試法來監(jiān)控程序執(zhí)行過程,查明錯(cuò)誤原因。具體步驟為 (僅供參考): 打開寄存器觀察窗 (View- Registers- CPU Registers); 打開內(nèi)存觀察窗 (View- Memory),在編輯框內(nèi)輸入欲觀察的變量名稱,例如 x,根據(jù)變量類型和鏈接器命令文件選擇存儲(chǔ)器,缺省情況下應(yīng)選擇 Data,如下圖所示;在變量觀察窗中也可以觀察單個(gè)變量,但有時(shí)需要進(jìn)行顯示
25、類型轉(zhuǎn)換,例如,*x- *(int*)x ; 在 STM #x, AR1 一句前設(shè)置斷點(diǎn),執(zhí)行程序,令其在斷點(diǎn)處暫停; 重復(fù)選擇“Debug- Step Into/Step Over”,控制程序自斷點(diǎn)處以步進(jìn)方式向下運(yùn)行; 在此過程中觀察相關(guān)變量及寄存器的變化,找出錯(cuò)誤原因。指定內(nèi)存地址; 可以是符號(hào), 數(shù)值或表達(dá)式選擇存儲(chǔ)器類型選擇數(shù)值顯示格式任務(wù) 6:使用前面給出的鏈接器命令文件,修改程序,使其能正確運(yùn)行;總結(jié)使用直接尋址方式時(shí)應(yīng)注意的問題選做任務(wù) 3:修改程序,使用間接尋址方式,完成計(jì)算及賦值過程實(shí)驗(yàn)四: C54x 混合編程實(shí)驗(yàn)一. 實(shí)驗(yàn)?zāi)康?. 使用 C54x C 語言和匯編語言編寫一
26、個(gè)簡(jiǎn)單程序,掌握混合編程的基本技巧:(1) 如何在混合編程中實(shí)現(xiàn)變量的互相訪問;(2) 如何在 C 程序中調(diào)用匯編函數(shù);(3) 如何在 C 程序中內(nèi)嵌匯編語句;2. 進(jìn)一步熟悉和掌握 CCS 的操作環(huán)境和基本功能。二. 實(shí)驗(yàn)設(shè)備計(jì)算機(jī)、Code Composer Studio 2.2 或以上版本三. 實(shí)驗(yàn)步驟1 變量的互相訪問C 編譯器在對(duì) C 程序進(jìn)行編譯時(shí)會(huì)自動(dòng)在所有標(biāo)識(shí)符 (函數(shù)名, 變量名等) 前添加下劃線“_”,所以,要在匯編程序中訪問 C 全局變量或常變量“x”應(yīng)使用“_x”標(biāo)識(shí)符,同時(shí)還要用“.global/.ref” 命令加以說明。同樣的,要在匯編程序中定義一個(gè)將會(huì)被 C 程序
27、訪問的變量“x”,也應(yīng)使用“_x”標(biāo)識(shí)符,而且要用“.global/.def”命令將其聲明為全局變量。建立一個(gè)新的工程“volume2.pjt”;將“volume1”目錄下的 C 程序文件“volume.c”和頭文件 “volume.h”復(fù)制到“volume2”文件夾,對(duì)源文件進(jìn)行如下修改:(1) 打開volume.h,將 #define GAIN 2 一句注釋掉;(2) 打開volume.c,將 GAIN 聲明為外部變量,即在 main 函數(shù)外加入 extern int GAIN;(3) 建立一個(gè)新的匯編源文件 test.asm,其內(nèi)容為:.def_GAIN; declare a globa
28、l identifier _GAIN.set2; set “_GAIN” to be 2將該匯編程序加入工程文件后,編譯鏈接可順利通過。這說明在 volume.c 中順利實(shí)現(xiàn)了對(duì)匯編常量 _GAIN 的訪問。任務(wù) 1:改寫源程序,測(cè)試如何在匯編程序中訪問 C 變量;嘗試在匯編程序中訪問使用預(yù)處理命令 #define 定義的標(biāo)識(shí)符,解釋失敗的原因2 內(nèi)嵌匯編語句內(nèi)嵌匯編就是在 C 程序中以下列方式直接“調(diào)用”匯編代碼:格式: asm ( 匯編語句); 例如: asm ( SSBX INTM);雙引號(hào)包裹的內(nèi)容應(yīng)完全符合匯編語言語法規(guī)則。內(nèi)嵌匯編雖然形式簡(jiǎn)單,但很容易破壞運(yùn)行環(huán)境,所以要慎重使用,
29、尤其是在需要對(duì) C 代碼進(jìn)行優(yōu)化的情況下。下面用這種方式來完成一個(gè)簡(jiǎn)單的數(shù)據(jù)傳送任務(wù),即將 inp_buffer 的內(nèi)容復(fù)制到 out_buffer:(1) 打開 volume.c,將 main 主函數(shù)中的 processing(input, output) 一行注釋掉;(2) 在該行之后加入以下代碼:asm( STM #_inp_buffer, AR2);asm( STM #_out_buffer, AR3);asm( RPT #99);/ repeat next instruction 100 timesasm(MVDD *AR2+, *AR3+);/ check for grammar
30、error firstasm( NOP);(3) 重新編譯鏈接和加載;按照實(shí)驗(yàn) 2 中介紹的步驟,使用sine.dat中的數(shù)據(jù)進(jìn)行測(cè)試,并借助圖形顯示工具觀察輸入和輸出信號(hào)的波形。注意:將 RPT 指令的操作數(shù)改為 _size -1 或 #(_size-1) 或別的形式,都不能得到正確結(jié)果。原因在于 _size 為符號(hào)地址。若一定要利用 _size 來定義單重復(fù)次數(shù),可先將 _size-1 存儲(chǔ)到數(shù)據(jù)存儲(chǔ)器。另一選項(xiàng)是使用 RPTB 或 BANZ 指令實(shí)現(xiàn)循環(huán),但那樣的話就不能發(fā)揮單重復(fù)指令的速度優(yōu)勢(shì)。選做任務(wù) 1:修改上述代碼,利用_size 定義單指令重復(fù)次數(shù)選做任務(wù) 2:使用內(nèi)嵌匯編方式
31、實(shí)現(xiàn) out_buffer = inp_buffer*GAIN,記錄波形圖3 匯編函數(shù)調(diào)用建立一個(gè)新的工程“volume3.pjt”;將“volume1”目錄下的 C 程序文件“volume.c”和頭文件 “volume.h”復(fù)制到“volume3”文件夾,對(duì)源文件進(jìn)行如下修改:(1) 打開 volume.c,定義兩個(gè)全局變量 gain2 和 size,即在 main 主函數(shù)外加入 int gain2 = GAIN 和 int size = BUFSIZE;添加外部函數(shù)聲明,即加入 extern void asmfunc();將 main 函數(shù)中的 processing(input, outp
32、ut) 一行改成 asmfunc();(2) 新建匯編源文件 asm_proc.asm,并將其加入該工程;文件內(nèi)容如下:.def _asmfunc.ref _inp_buffer.ref _out_buffer.ref _gain2.ref _size;.mmregs.text_asmfunc: STM #_inp_buffer, AR2 STM #_out_buffer, AR3 MVDM _gain2, T MVDM _size, ALsub #1, A STLM A, AR4loop: MPY *AR2+, ASTL A, *AR3+BANZ loop, *AR4 ; *AR4-;ret
33、任務(wù) 2:參照講義,閱讀并理解上面給出的匯編程序;修改語法錯(cuò)誤,重新編譯鏈接任務(wù) 3:加載并執(zhí)行生成的 .out 文件;按照在實(shí)驗(yàn) 2 中介紹過的步驟,使用 sine.dat 數(shù)據(jù)文件進(jìn)行測(cè)試,在圖形顯示窗中對(duì)比輸入和輸出信號(hào)波形并做記錄選做任務(wù) 3:上述程序中的“MVDM _size, AL”負(fù)責(zé)將 C 變量 size 的內(nèi)容復(fù)制到 AL;如果將該句替換為“LD _size, A”還能否得到正確結(jié)果?若不能該如何修改?借助斷點(diǎn)調(diào)試法進(jìn)行驗(yàn)證選做任務(wù) 4:修改源程序,嘗試在 C 程序中訪問匯編變量和常量,并總結(jié)規(guī)律實(shí)驗(yàn)五: 指示燈實(shí)驗(yàn)一. 實(shí)驗(yàn)?zāi)康?. 了解 ICETEK-VC5509-A 評(píng)
34、估板在 TMS320VC5509 DSP 外部擴(kuò)展存儲(chǔ)空間上的擴(kuò)展;2. 了解 ICETEK-VC5509-A 評(píng)估板上指示燈擴(kuò)展原理;3. 學(xué)習(xí)如何訪問擴(kuò)展的控制寄存器。二. 實(shí)驗(yàn)設(shè)備計(jì)算機(jī)、Code Composer Studio 2.2 或以上版本、ICETEK-VC5509-EDU 實(shí)驗(yàn)箱三. 實(shí)驗(yàn)原理1 TMS320VC5509的EMIF接口存儲(chǔ)器擴(kuò)展接口(EMIF: External Memory InterFace)是DSP擴(kuò)展片外資源的主要接口,它提供了一組控制信號(hào)和地址、數(shù)據(jù)線,可以擴(kuò)展各類存儲(chǔ)器和存儲(chǔ)器、寄存器映射的外設(shè)。ICETEK-VC5509-A評(píng)估板在擴(kuò)展接口方面除
35、擴(kuò)展了片外SRAM外,還擴(kuò)展了指示燈、DIP開關(guān)和D/A設(shè)備。具體擴(kuò)展地址如下:400800-400802h:D/A轉(zhuǎn)換控制寄存器400000h: 板上DIP開關(guān)控制寄存器400001h: 板上指示燈控制寄存器2 指示燈擴(kuò)展原理通過相應(yīng)的EMIF接口可對(duì)四位寄存器進(jìn)行讀寫操作,以控制或獲取發(fā)光二極管的通斷電狀態(tài)。3 程序流程圖四. 實(shí)驗(yàn)步驟1 連接實(shí)驗(yàn)設(shè)備,關(guān)閉擴(kuò)展模塊和信號(hào)源電源開關(guān)(參考實(shí)驗(yàn)箱結(jié)構(gòu)圖);2 在硬件仿真(Emulator)方式下啟動(dòng)CCS;3 打開LED.pjt,閱讀源程序 LED.c,理解其內(nèi)容;以下為 LED.c 的主要內(nèi)容,注意紅色顯示部分:#define LBDS (
36、*(unsigned int *)0x400001) / 定義指示燈寄存器地址和寄存器類型/ 子程序接口void Delay(unsigned int nDelay);/ 延時(shí)子程序main()unsigned int uLED4=1,2,4,8;/ 控制字,逐位置1: 0001B 0010B 0100B 1000Bint i;CLK_init();/ 初始化DSP運(yùn)行時(shí)鐘SDRAM_init();/ 初始化EMIF接口while ( 1 ) for ( i=0;i=0;i- ) LBDS=uLEDi;/ 反向順序送控制字Delay(256);/ 延時(shí)4 裝載并運(yùn)行程序,觀察運(yùn)行結(jié)果任務(wù) 1:
37、修改源程序,依序點(diǎn)亮第1,12,13,14個(gè)指示燈任務(wù) 2:修改源程序,使得四個(gè)指示燈全部點(diǎn)亮后,先全部熄滅,再重復(fù)依序點(diǎn)亮過程圖表 1 實(shí)驗(yàn)箱結(jié)構(gòu)圖實(shí)驗(yàn)六: DSP數(shù)據(jù)存取實(shí)驗(yàn)一. 實(shí)驗(yàn)?zāi)康?. 了解 TMS320VC5416A 的內(nèi)部存儲(chǔ)器空間的分配及指令尋址方式;2. 了解 ICETEK-VC5416-F 開發(fā)板擴(kuò)展存儲(chǔ)器空間尋址方法,及其應(yīng)用;3. 學(xué)習(xí)如何在CCS環(huán)境中觀察、修改和填充DSP 數(shù)據(jù)存儲(chǔ)器單元;4. 學(xué)習(xí)并掌握 TMS320VC54xx 的內(nèi)存指令。二. 實(shí)驗(yàn)設(shè)備計(jì)算機(jī)、Code Composer Studio 2.2 或以上版本、ICETEK-VC5416-F-EDU
38、 實(shí)驗(yàn)箱(或ICETEK 仿真器+ICETEK-VC5416-F 評(píng)估板+相關(guān)連線及電源)三. 實(shí)驗(yàn)原理C54x/C54xx 系列 DSP 基于改進(jìn)哈佛體系結(jié)構(gòu) (數(shù)據(jù)和代碼獨(dú)立存儲(chǔ)),配置了816位總線,從而使得對(duì)存儲(chǔ)空間的并行訪問成為可能 (具體參閱課堂講義或教材)。 四. 實(shí)驗(yàn)步驟1實(shí)驗(yàn)準(zhǔn)備連接實(shí)驗(yàn)設(shè)備,關(guān)閉實(shí)驗(yàn)箱上擴(kuò)展模塊和信號(hào)源電源開關(guān)。2設(shè)置CCS 在硬件仿真方式下運(yùn)行 (Emulator)3啟動(dòng) CCS,打開工程文件工程文件為:C:ICETEK-VC5416-F-EDULabLab0201-MemoryMemory.pjt5編譯、下載程序。6程序區(qū)的觀察和修改(1) 運(yùn)行到mai
39、n 函數(shù)入口:選擇菜單Debug-Go Main,當(dāng)程序運(yùn)行并停止在main 函數(shù)入口時(shí),展開“Disassembly”反匯編窗口,發(fā)現(xiàn)main 函數(shù)入口地址為0100H,也就是說從此地址開始存放主函數(shù)的程序代碼。(2)顯示程序區(qū):(3) 修改程序區(qū)的存儲(chǔ)單元程序區(qū)單元的內(nèi)容由CCS 的下載功能填充,但也能用手動(dòng)方式修改;雙擊“Code”窗口地址“0x0100:”后的第一個(gè)數(shù),顯示“Edit Memory”窗口,在“Data”中輸入0xF495,單擊“Done”按鈕,觀察“Code”窗口中相應(yīng)地址的數(shù)據(jù)被修改,同時(shí)在反匯編窗口中的反匯編語句也發(fā)生了變化,當(dāng)前語句被改成了“NOP”。將地址0x1
40、00 上的數(shù)據(jù)改回0x4A11,程序又恢復(fù)成原樣。(4) 觀察修改數(shù)據(jù)區(qū)a) 顯示片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū) (在數(shù)據(jù)觀察窗中觀察Data和Data1);b) 在數(shù)據(jù)編輯窗中雙擊某一數(shù)據(jù)單元可對(duì)其內(nèi)容進(jìn)行單獨(dú)編輯,或?qū)σ栽搯卧獮槠瘘c(diǎn)的連續(xù)存儲(chǔ)區(qū)進(jìn)行重復(fù)填充。按下圖演示步驟修改存儲(chǔ)區(qū)內(nèi)容,注意 Data數(shù)據(jù)觀察窗的變化。7運(yùn)行程序觀察結(jié)果打開Memory.c,在有注釋的行上加軟件斷點(diǎn)。按“F5”鍵運(yùn)行到各斷點(diǎn),注意觀察窗口“Data”和“Data1”中的變化,體會(huì)用程序修改數(shù)據(jù)區(qū)語句的方法實(shí)驗(yàn)七: 方波發(fā)生器一. 實(shí)驗(yàn)?zāi)康?. 借助匯編語言在 C54x 平臺(tái)上實(shí)現(xiàn)一個(gè)方波發(fā)生器,練習(xí)并掌握以下內(nèi)容:(1)
41、堆棧的初始化及基本操作;(2) 中斷服務(wù)程序的編寫與加載;(3) 定時(shí)器編程與應(yīng)用;6. 進(jìn)一步熟悉和掌握 CCS 開發(fā)環(huán)境和軟件調(diào)試技巧。二. 實(shí)驗(yàn)設(shè)備計(jì)算機(jī)、Code Composer Studio 2.2 或以上版本三. 實(shí)驗(yàn)預(yù)習(xí)1 中斷服務(wù)程序的加載完整的中斷系統(tǒng)的構(gòu)建一般包括三個(gè)步驟:編寫中斷服務(wù)程序,定義中斷向量,加載中斷向量。后兩個(gè)步驟的主要任務(wù)是將中斷服務(wù)程序與相應(yīng)的中斷請(qǐng)求聯(lián)系起來。中斷向量的基本格式為“B ISR_START_POINT”,其中“ISR_STARTPOINT”代表中斷服務(wù)程序的入口。中斷向量的定義通常在一個(gè)單獨(dú)的中斷向量表文件中完成 (一般命名為“vecto
42、rs.asm”),中斷向量的加載則是在鏈接器命令文件的指引下由鏈接器完成。例如:若有一中斷服務(wù)程序 ISR_INT0,對(duì)應(yīng)的中斷序號(hào)為16 (10H),則在中斷向量表文件中應(yīng)包含以下內(nèi)容:.sectINT0 BINT0在鏈接器命令文件中必需對(duì)該中斷向量的加載地址做出明確說明。中斷向量地址 = IPTR 7 + 中斷序號(hào) INT0 PAGE 1 2 定時(shí)器編程除根據(jù)需求相應(yīng)設(shè)置定時(shí)器寄存器 (PRD+TCR) 外,在定時(shí)器初始化過程中還必需正確設(shè)置中斷標(biāo)志寄存器 IFR、中斷屏蔽寄存器 IMR、和中斷屏蔽標(biāo)志位 INTM。具體內(nèi)容參考講義或教材。3 方波發(fā)生器的原理每收到一個(gè)定時(shí)器中斷請(qǐng)求,就將
43、狀態(tài)寄存器 ST1 的 XF 標(biāo)志位取反 (XF 標(biāo)志直接控制外部引腳 XF 的狀態(tài)),從而在 XF 引腳上得到占空比為50%的周期方波信號(hào),其周期為定時(shí)器中斷周期*2。四. 實(shí)驗(yàn)步驟1 啟動(dòng) CCS,如有必要,應(yīng)先運(yùn)行 Setup CCS,切換至 C5402 軟件仿真環(huán)境;2 建立工程“timer_test.pjt”,并將下面的匯編程序加入到該工程中:; 文件1:timer_header.asm; 堆棧大小STACK_SIZE.set0010H;中斷標(biāo)志寄存器和中斷屏蔽寄存器的初值IFR_INIT.set0008HIMR_INIT.set0008H; K_TCR0:設(shè)置定時(shí)器控制寄存器的內(nèi)容K_TCR0_SOFT.set0b ; Soft=0K_TCR0_FREE .set
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工作總結(jié)中如何進(jìn)行S分析計(jì)劃
- 高效協(xié)作的實(shí)踐指南計(jì)劃
- 2024-2025學(xué)年年七年級(jí)數(shù)學(xué)人教版下冊(cè)專題整合復(fù)習(xí)卷28.1 銳角三角函數(shù)(1)(含答案)-
- 促進(jìn)發(fā)展小班幼兒的成長(zhǎng)計(jì)劃
- 拋射劑相關(guān)行業(yè)投資方案
- 醫(yī)藥中間體相關(guān)行業(yè)投資方案
- 音響設(shè)備采購招標(biāo)合同三篇
- 《故宮博物院教用》課件
- 車間配置窗簾報(bào)告范文
- 修身養(yǎng)性、贏在職場(chǎng)有效課件情商與影響力
- 2024年農(nóng)村公寓房屋買賣協(xié)議書參考樣本3篇
- 2024年山東省政府采購專家入庫考試真題(共五套 第一套)
- 五年級(jí)數(shù)學(xué)(小數(shù)乘除法)計(jì)算題專項(xiàng)練習(xí)及答案匯編
- 初中濟(jì)南版生物實(shí)驗(yàn)報(bào)告單
- 北京郵電大學(xué)《自然語言處理》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年廣西安全員A證考試題及答案
- 《網(wǎng)絡(luò)系統(tǒng)管理與維護(hù)》期末考試題庫及答案
- 警務(wù)指揮與戰(zhàn)術(shù)學(xué)總論學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 名畫中的瘟疫史智慧樹知到期末考試答案章節(jié)答案2024年上海健康醫(yī)學(xué)院
- 中國竹編藝術(shù)智慧樹知到期末考試答案章節(jié)答案2024年浙江廣廈建設(shè)職業(yè)技術(shù)大學(xué)
- 國開電大-工程數(shù)學(xué)(本)-工程數(shù)學(xué)第4次作業(yè)-形考答案
評(píng)論
0/150
提交評(píng)論