DSP應(yīng)用技術(shù)第6章 DSP應(yīng)用技術(shù)實(shí)訓(xùn)_第1頁
DSP應(yīng)用技術(shù)第6章 DSP應(yīng)用技術(shù)實(shí)訓(xùn)_第2頁
DSP應(yīng)用技術(shù)第6章 DSP應(yīng)用技術(shù)實(shí)訓(xùn)_第3頁
DSP應(yīng)用技術(shù)第6章 DSP應(yīng)用技術(shù)實(shí)訓(xùn)_第4頁
DSP應(yīng)用技術(shù)第6章 DSP應(yīng)用技術(shù)實(shí)訓(xùn)_第5頁
已閱讀5頁,還剩393頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

6.1.1功能框圖本系統(tǒng)采用模塊化設(shè)計(jì),主要包括DSP處理器(TMS320VC5402)及外部存儲(chǔ)器、單片機(jī)(計(jì)算機(jī)接口部分)、語音編/解碼及通道、可編程邏輯器件(產(chǎn)生時(shí)鐘以及DSPI/O擴(kuò)展)、數(shù)碼管、液晶顯示屏、鍵盤等。系統(tǒng)硬件組成如圖6.1所示。圖6.1系統(tǒng)硬件組成框圖(3)RAM區(qū)。先是數(shù)據(jù)區(qū),后為程序區(qū),用戶的開發(fā)使用COFF文件格式。(4)與計(jì)算機(jī)的串行口接口,可提供給用戶使用。(5)DSP的兩個(gè)外部中斷、一個(gè)McBSP中斷和一個(gè)定時(shí)器中斷都可由用戶使用。(6)CPLD器件采用Altera公司的EPM7128S,用戶可使用MAX+PLUSⅡ軟件對(duì)器件進(jìn)行編程修改。(7)提供單片機(jī)AT89C51、鍵盤與液晶顯示屏及數(shù)碼管給用戶使用。1)實(shí)驗(yàn)?zāi)康?1)了解DSP開發(fā)系統(tǒng)的組成和結(jié)構(gòu);(2)熟悉DSP集成開發(fā)環(huán)境;(3)掌握TMS320C54xDSP程序空間的分配;(4)掌握TMS320C54xDSP數(shù)據(jù)空間的分配;(5)掌握操作TMS320C54xDSP存儲(chǔ)器的相關(guān)指令;(6)掌握TMS320C54xDSP相關(guān)運(yùn)算的指令;(7)TMS320C54xDSP相關(guān)程序流程控制類的指令;(8)熟悉DSP開發(fā)軟件的使用。實(shí)驗(yàn)1CCS的使用與匯編語言程序設(shè)計(jì)入門6.2.1匯編語言程序設(shè)計(jì)2)實(shí)驗(yàn)內(nèi)容設(shè)計(jì)一匯編程序,實(shí)現(xiàn)對(duì)一組所給的數(shù)的累加,并將結(jié)果送數(shù)碼管顯示。3)預(yù)備知識(shí)高速靈活的數(shù)據(jù)存取功能是高速信號(hào)處理的基礎(chǔ)之一。TMS320C54xDSP支持七種基本的數(shù)據(jù)尋址模式,用于操作數(shù)據(jù)空間、程序空間和I/O空間。各種模式靈活運(yùn)用可以實(shí)現(xiàn)高速的數(shù)據(jù)傳輸。由于DSP的強(qiáng)大功能在于對(duì)數(shù)據(jù)的處理,因此它具有豐富的訪問和操作數(shù)據(jù)空間的指令。程序空間和I/O空間的讀取操作指令相對(duì)少一些。對(duì)程序空間進(jìn)行讀/寫的指令有MVDP、MVPD、MACD、MACP、FIRS等;對(duì)I/O空間讀/寫的指令為PORTR和PORTW。由于DSP的數(shù)據(jù)空間可以和程序空間共享,也就是說,數(shù)據(jù)和程序在空間地址上可以混合放置,所以,在片內(nèi)的數(shù)據(jù),一般以數(shù)據(jù)空間方式訪問。若在片外,則要通過一定的地址譯碼實(shí)現(xiàn)數(shù)據(jù)程序空間共享。4)實(shí)驗(yàn)設(shè)備硬件:TMS320C54xDSP數(shù)字信號(hào)處理及嵌入式系統(tǒng)實(shí)驗(yàn)開發(fā)系統(tǒng)、JTAG仿真器、Pentium100以上的PC機(jī)。軟件:Windows98或以上PC機(jī)操作系統(tǒng)、CCS集成開發(fā)環(huán)境、仿真器驅(qū)動(dòng)程序。5)實(shí)驗(yàn)步驟(1)連接好DSP開發(fā)系統(tǒng),運(yùn)行CCS軟件;(2)用匯編語言設(shè)計(jì)一程序并輸入相應(yīng)的鏈接命令文件(.cmd文件),或輸入?yún)⒖汲绦蚣版溄用钗募?.cmd文件),使一組所給的數(shù)累加,并將結(jié)果送數(shù)碼管顯示;(3)新建一個(gè)工程;(4)向工程添加匯編程序及鏈接命令文件(.cmd文件);(5)編譯、鏈接工程中的所有文件,生成.out文件;(6)裝載上述.out文件,并運(yùn)行。6)實(shí)驗(yàn)現(xiàn)象與結(jié)果運(yùn)行程序后,用CCS觀察相應(yīng)的存儲(chǔ)單元(見參考程序中的變量z),該單元存儲(chǔ)了所給的一組數(shù)的累加值,且與數(shù)碼管顯示結(jié)果一致。7)思考題修改參考程序,實(shí)現(xiàn)所給的一組數(shù)的連乘,并將結(jié)果送數(shù)碼管顯示。參考程序如下。匯編語言程序:.title "mac.asm".mmregs.defstartSIZE.set100stack.usect"STK",SIZESEGSEL.set0001b;數(shù)碼管使能控制數(shù)據(jù),此處為第0個(gè)數(shù)碼管選通 SEGSELPORT.set0h;數(shù)碼管使能控制口地址SEGPORT.set1h;數(shù)碼管數(shù)據(jù)口地址.bssSEG_DATA,10;用于存放從SEG_VALUE裝載進(jìn)來的數(shù)碼管編碼數(shù)據(jù).bssx,5 ;用于存放從table0裝載進(jìn)來的輸入數(shù)據(jù).bssz,1 ;用于存放輸出數(shù)據(jù)(計(jì)算結(jié)果).datatable0:.word1,2,3,4,5;待計(jì)算的一組輸入數(shù)據(jù);以下用于存放數(shù)碼管編碼數(shù)據(jù),分別控制數(shù)碼管顯示0~9SEG_VALUE.word077h,014h,0b3h,0b6h,0d4h,0e6h,0e7h,034h,0f7h,0f6H.textstart:stm#stack+SIZE,SP ;;;;;;;;;C5402初始化;;;;;;;;;;;;;;; stm#2b40h,ST1;STM#2B40H,ST1; stm#1e00h,ST0; stm#02024h,PMST ;IPTR=0010,0000,0->RESET=2000H stm#0h,SWWSR stm#04007h,CLKMD ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; stm#SEG_DATA,AR3;將數(shù)碼管編碼數(shù)據(jù)從SEG_VALUE裝入SEG_DATA

rpt#9 mvpdSEG_VALUE,*AR3+ stm#x,AR1 ;從空間table0裝載輸入數(shù)據(jù)進(jìn)入空間x rpt#4 mvpdtable0,*AR1+ callsum ;調(diào)用累加子程序 ld#SEGSEL,B ;第0個(gè)數(shù)碼管選通 portw*(0bH),SEGSELPORT stlmA,AR0 ;累加子程序返回的計(jì)算結(jié)果轉(zhuǎn)入AR0 stm#SEG_DATA,AR7;數(shù)碼管編碼數(shù)據(jù)區(qū)首地址送AR7 nop mar*AR7+0 ;首地址(AR7中的內(nèi)容)+偏移地址(AR0中的內(nèi)容) nop portw*AR7,SEGPORT;讓數(shù)碼管顯示計(jì)算結(jié)果end: bendsum: stm#x,AR3 ;累加子程序 rptzA,#4 add*AR3,A stm#z,AR4 stlA,*AR4 ret .end鏈接命令文件(.cmd文件):mac.obj-omac.out-mmac.map-estartMEMORY{PAGE0:EPROM:org=02000h,len=200hPAGE1:SPRAM:org=0060h,len=001fhDARAM:org=0080h,len=100h}SECTIONS{.text:>EPROMPAGE0.data:>EPROMPAGE0.bss:>SPRAMPAGE1.stack:>DARAMPAGE1}實(shí)驗(yàn)2CCS使用與乘累加運(yùn)算程序的設(shè)計(jì)1)實(shí)驗(yàn)?zāi)康?1)了解DSP開發(fā)系統(tǒng)的組成和結(jié)構(gòu);(2)熟悉DSP集成開發(fā)環(huán)境;(3)掌握TMS320C54xDSP程序空間的分配;(4)掌握TMS320C54xDSP數(shù)據(jù)空間的分配;(5)掌握操作TMS320C54xDSP存儲(chǔ)器的相關(guān)指令;(6)掌握TMS320C54xDSP相關(guān)運(yùn)算的指令;(7)掌握TMS320C54xDSP相關(guān)程序流程控制類的指令;(8)熟悉DSP開發(fā)軟件的使用。2)實(shí)驗(yàn)內(nèi)容設(shè)計(jì)一段匯編程序,實(shí)現(xiàn)數(shù)字信號(hào)處理中常用的乘累加基本運(yùn)算,并將運(yùn)算結(jié)果送數(shù)碼管顯示。運(yùn)行程序后,數(shù)碼管即顯示兩組數(shù)(如參考程序中開辟的兩段數(shù)據(jù)區(qū)table0和table1)的對(duì)應(yīng)數(shù)值乘積之和。3)預(yù)備知識(shí)高速靈活的數(shù)據(jù)存取功能是高速信號(hào)處理的基礎(chǔ)之一。TMS320C54xDSP支持七種基本的數(shù)據(jù)尋址模式,用于訪問數(shù)據(jù)空間、程序空間和I/O空間。各種模式靈活運(yùn)用可以實(shí)現(xiàn)高速的數(shù)據(jù)傳輸。由于DSP的強(qiáng)大功能在于對(duì)數(shù)據(jù)的處理,因此它具有豐富的訪問和操作數(shù)據(jù)空間的指令。程序空間和I/O空間的讀取操作指令相對(duì)少一些。對(duì)程序空間進(jìn)行讀/寫的指令有MVDP、MVPD、MACD、MACP、FIRS等;對(duì)I/O空間讀/寫的指令有PORTR和PORTW。由于DSP的數(shù)據(jù)空間可以和程序空間共享,也就是說,數(shù)據(jù)和程序在空間地址上可以混合放置,所以,在片內(nèi)的數(shù)據(jù),一般以數(shù)據(jù)空間方式訪問。若在片外,則要通過一定的地址譯碼實(shí)現(xiàn)數(shù)據(jù)程序空間的共享。5)實(shí)驗(yàn)步驟(1)連接好DSP開發(fā)系統(tǒng),運(yùn)行CCS軟件;(2)用匯編語言設(shè)計(jì)一程序并輸入相應(yīng)的鏈接命令文件(.cmd文件),分別保存;或輸入?yún)⒖汲绦蚣跋鄳?yīng)的鏈接命令文件(.cmd文件);(3)新建一個(gè)工程;(4)向工程添加匯編程序及鏈接命令文件(.cmd文件);(5)編譯、鏈接工程中的所有文件,生成.out文件;(6)裝載上述.out文件,并運(yùn)行。參考程序如下。匯編語言程序:.title "mac.asm".mmregs.defstartSIZE.set100stack.usect"STK",SIZESEGSEL.set0001b ;數(shù)碼管使能控制數(shù)據(jù),此處為第0個(gè)數(shù)碼管選通 SEGSELPORT.set0h ;數(shù)碼管使能控制口地址SEGPORT.set1h;數(shù)碼管數(shù)據(jù)口地址.bssSEG_DATA,10 ;用于存放從SEG_VALUE裝載進(jìn)來的數(shù)碼管編碼數(shù)據(jù).bssx,3 ;用于存放從table0裝載進(jìn)來的輸入數(shù)據(jù).bssy,3 ;用于存放從table1裝載進(jìn)來的輸入數(shù)據(jù).bssz,1 ;用于存放輸出數(shù)據(jù)(計(jì)算結(jié)果).datatable0:.word1,1,2;待計(jì)算的輸入數(shù)據(jù)table1:.word1,1,3;以下用于存放數(shù)碼管編碼數(shù)據(jù),分別控制數(shù)碼管顯示0~9SEG_VALUE.word077h,014h,0b3h,0b6h,0d4h,0e6h,0e7h,034h,0f7h,0f6h.textstart: stm#stack+SIZE,SP ;;;;;;;;;C5402初始化;;;;;;;;;;;;;;; stm#2b40h,ST1 ;STM#2B40H,ST1; stm#1e00h,ST0; stm#02024h,PMST ;IPTR=0010,0000,0->RESET=2000H stm#0h,SWWSR stm#04007h,CLKMD ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; stm#SEG_DATA,AR3;將數(shù)碼管編碼數(shù)據(jù)從SEG_VALUE裝入SEG_DATA rpt#9 mvpdSEG_VALUE,*AR3+ ;stm#SEG_DATA,AR3 ;stm#9,AR5 stm#x,AR1 ;從空間table0,table1裝載輸入數(shù)據(jù)進(jìn)入空間x,y rpt#2 mvpdtable0,*AR1+ stm#y,AR2 rpt#2 mvpdtable1,*AR2+ callmacc ;調(diào)用累加乘子程序 ld#SEGSEL,B ;第0個(gè)數(shù)碼管選通 portw*(0bh),SEGSELPORT stlmA,AR0 ;累加乘子程序返回的計(jì)算結(jié)果轉(zhuǎn)入AR0 stm#SEG_DATA,AR7 ;數(shù)碼管編碼數(shù)據(jù)區(qū)首地址送AR7 nop mar*AR7+0 ;首地址(AR7中的內(nèi)容)+偏移地址(AR0中的內(nèi)容) nop portw*AR7,SEGPORT;讓數(shù)碼管顯示計(jì)算結(jié)果end: bendmacc: stm#x,AR3 ;累加乘子程序 stm#y,AR4 rsbxFRCT rptzA,#2 mac*AR3+,*AR4+,A stm#z,AR4 stlA,*AR4 ret .end鏈接命令文件(.cmd文件):mac.obj-omac.out-mmac.map-estartMEMORY{PAGE0:EPROM:org=02000h,len=200hPAGE1:SPRAM:org=0060h,len=001fhDARAM:org=0080h,len=100h}SECTIONS{.text:>EPROMPAGE0.data:>EPROMPAGE0.bss:>SPRAMPAGE1.stack:>DARAMPAGE1}實(shí)驗(yàn)3I/O讀寫實(shí)驗(yàn)1)實(shí)驗(yàn)?zāi)康?1)掌握TMS320C54xDSP的I/O讀寫指令;(2)熟悉CCS開發(fā)軟件的使用;(3)了解數(shù)碼管的顯示原理和指令控制。2)實(shí)驗(yàn)內(nèi)容數(shù)碼管的選通信號(hào)通過DSP的I/O空間的某個(gè)地址譯碼產(chǎn)生,即將數(shù)碼管映射為DSP的I/O空間,在該地址上寫數(shù)據(jù)直接顯示在數(shù)碼管上。編程實(shí)現(xiàn)在數(shù)碼管上顯示從0~9的十進(jìn)制數(shù)(靜態(tài)顯示方式),并在數(shù)碼管顯示變化時(shí),四個(gè)獨(dú)立的發(fā)光二極管與之同步閃爍。3)預(yù)備知識(shí)I/O接口電路簡稱接口電路,它是主機(jī)和外圍設(shè)備之間交換信息的連接部件(電路),在主機(jī)和外圍設(shè)備之間的信息交換中起著橋梁和紐帶作用。I/O接口的編址方式:(1)I/O接口獨(dú)立編址。這種編址方式是將存儲(chǔ)器地址空間和I/O接口地址空間分開設(shè)置,互不影響。設(shè)有專門的輸入指令和輸出指令來完成I/O操作。(2)I/O接口與存儲(chǔ)器統(tǒng)一編址方式。這種編址方式不區(qū)分存儲(chǔ)器地址空間和I/O接口地址空間,把所有的I/O接口的端口都當(dāng)作是存儲(chǔ)器的一個(gè)單元對(duì)待,每個(gè)接口芯片都安排一個(gè)或幾個(gè)與存儲(chǔ)器統(tǒng)一編號(hào)的地址號(hào)。不設(shè)專門的輸入/輸出指令,所有傳送和訪問存儲(chǔ)器的指令都可用來對(duì)I/O接口操作。在DSP應(yīng)用系統(tǒng)中,為了便于人們觀察和監(jiān)視運(yùn)行情況,常常需要用顯示器顯示運(yùn)行的中間結(jié)果及狀態(tài)等信息,因此顯示器也是不可缺少的外部設(shè)備之一。顯示器的種類很多,LED顯示器具有耗電省、成本低廉、配置簡單靈活、安裝方便、耐振動(dòng)、壽命長等優(yōu)點(diǎn)。①LED的結(jié)構(gòu)7段LED由7個(gè)發(fā)光二極管按“日”字形排列組成。所有發(fā)光二極管的陽極連在一起稱共陽極接法,陰極連在一起稱為共陰極接法。一般共陰極可以不需外接電阻,而共陽極接法中發(fā)光二極管必須外接電阻。LED的結(jié)構(gòu)及連接關(guān)系如圖6.2所示。圖6.2LED的結(jié)構(gòu)及連接關(guān)系圖(a)管腳設(shè)置;(b)共陰極;(c)共陽極②LED的工作原理當(dāng)選用共陰極LED顯示器時(shí),所有發(fā)光二極管的陰極連在一起接地。當(dāng)某個(gè)發(fā)光二極管的陽極加入高電平時(shí),對(duì)應(yīng)的二極管點(diǎn)亮。因此要顯示某字形,實(shí)際上就是送一個(gè)用不同電平組合代表的數(shù)據(jù)字(字符的段碼)來控制LED的顯示。字符數(shù)據(jù)字與LED段碼的關(guān)系如圖6.3所示。圖6.3字符數(shù)據(jù)字與LED段碼關(guān)系圖注:①DP為小數(shù)點(diǎn)段。③LED數(shù)碼管靜態(tài)顯示LED數(shù)碼管采用靜態(tài)顯示與單片機(jī)接口時(shí),共陰極或共陽極點(diǎn)連接在一起接地或高電平。每個(gè)顯示位的段選線與一個(gè)8位并行口線對(duì)應(yīng)相連。只要在顯示位的段選線上保持段碼電平不變,該位就能保持相應(yīng)的顯示字符。這里的8位并行口可以直接采用并行I/O接口片,也可以采用串入/并出的移位寄存器或是其他具有三態(tài)功能的鎖存器等。④LED數(shù)碼管動(dòng)態(tài)顯示在多位LED顯示時(shí),為了簡化電路、降低成本,將所有位的段選線并聯(lián)在一起,由一個(gè)8位I/O口控制。而共陰(或共陽)極公共端分別由相應(yīng)的I/O線控制,實(shí)現(xiàn)各位的分時(shí)選通。由于各個(gè)數(shù)碼管共用同一個(gè)段碼輸出口,分時(shí)輪流通電,從而大大簡化了硬件線路,降低了成本。不過這種方式的數(shù)碼管接口電路中,數(shù)碼管不宜太多,一般在8個(gè)以內(nèi),否則每個(gè)數(shù)碼管所分配到的實(shí)際導(dǎo)通時(shí)間太少,顯得亮度不足。若LED位數(shù)較多時(shí)應(yīng)增加驅(qū)動(dòng)能力,來提高顯示亮度。⑤LED與DSP的連接原理如圖6.4所示。4個(gè)8位數(shù)碼管采用動(dòng)態(tài)顯示,首先選中某個(gè)數(shù)碼管,然后在其上顯示。數(shù)碼管的選擇信號(hào)SLED1、SLED2、SLED3、SLED4映射為DSP地址為0的I/O空間,數(shù)碼管的顯示數(shù)據(jù)LE0~LE7映射為DSP地址為1的I/O空間。圖6.4LED與DSP的連接原理圖4)實(shí)驗(yàn)設(shè)備硬件:JLD型DSP實(shí)驗(yàn)與開發(fā)系統(tǒng)、JTAG仿真器、Pentium100以上的PC機(jī)。軟件:Widnows98或以上的PC機(jī)操作系統(tǒng)、CCS集成開發(fā)環(huán)境、仿真器驅(qū)動(dòng)程序。5)實(shí)驗(yàn)步驟(1)連接好DSP開發(fā)系統(tǒng),運(yùn)行CCS軟件;(2)用匯編語言設(shè)計(jì)程序及相應(yīng)的鏈接命令文件(.cmd文件),或輸入?yún)⒖汲绦蚣跋鄳?yīng)的鏈接命令文件(.cmd文件),分別保存;(3)新建一個(gè)工程;(4)向工程添加上述程序及鏈接命令文件(.cmd文件);(5)編譯、鏈接工程中的所有文件,生成.out文件;(6)裝載上述.out文件,并運(yùn)行;(7)LED的顯示刷新速度由子程序delay的定時(shí)周期決定。修改程序,重新設(shè)置刷新速度及LED的顯示內(nèi)容,重復(fù)步驟(5)~(6)。6)實(shí)驗(yàn)現(xiàn)象與結(jié)果數(shù)碼管循環(huán)顯示0~9十個(gè)數(shù)字。顯示變化時(shí),四個(gè)獨(dú)立的發(fā)光二極管與之同步閃爍。7)思考題修改參考程序,使數(shù)碼管循環(huán)顯示9~0(遞減)十個(gè)數(shù)字;顯示變化時(shí),四個(gè)獨(dú)立的發(fā)光二極管與之同步閃爍;每個(gè)循環(huán)結(jié)束后,停頓較長時(shí)間,再自動(dòng)進(jìn)入下一輪循環(huán)顯示。參考程序如下。匯編語言程序:.title "seg_ledtest.asm".mmregs.defstartSIZE.set100stack.usect"STK",SIZESEGSEL.set1111b ;數(shù)碼管使能控制數(shù)據(jù),此處四個(gè)數(shù)碼管均使能SEGSELPORT.set0h ;數(shù)碼管使能控制口地址SEGPORT.set1h;數(shù)碼管數(shù)據(jù)口地址LED1PORT.set2h;LED1地址LED2PORT.set3hLED3PORT.set0ehLED4PORT.set0fh.bssSEG_DATA,10h;用于存放從SEG_VALUE裝載進(jìn)來的數(shù)碼管編碼數(shù)據(jù).data ;存放數(shù)碼管編碼數(shù)據(jù),分別控制數(shù)碼管顯示0~9SEG_VALUE.word077h,014h,0b3h,0b6h,0d4h,0e6h,0e7h,034h,0f7h,0f6h.textstart: stm#stack+SIZE,SP ;;;;;;;;;C5402初始化:;;;;;; STM#2B40h,ST1 STM#1E00h,ST0 stm#02024h,PMST ;IPTR=0010,0000,0->RESET=2000H stm#7FFFh,SWWSR stm#04007h,CLKMD ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; stm#SEG_DATA,AR3 ;從SEG_VALUE裝載數(shù)碼管編碼數(shù)據(jù) rpt#9 ;放入SEG_DATA mvpdSEG_VALUE,*AR3+ stm#SEG_DATA,AR3 ;AR3復(fù)位:指向SEG_DATA首址 stm#9,AR5 ;用作減法記數(shù)(下面程序控制用) ld#SEGSEL,A ;選通數(shù)碼管:四個(gè)均選通 portw*(08h),SEGSELPORT ;08H即累加器A的地址run_led: ;以下程序讓數(shù)碼管循環(huán)顯示0~9,同時(shí)LED閃爍一次 ld*AR3+,A ;向數(shù)據(jù)口送編碼數(shù)據(jù) portw*(08h),SEGPORT ld#0,B ;使LED全亮 portw*(0bh),LED1PORT portw*(0bh),LED2PORT portw*(0bh),LED3PORT portw*(0bh),LED4PORT calldelay ;亮狀態(tài)停頓 ld#1,B ;使LED全滅 portw*(0bh),LED1PORT portw*(0bh),LED2PORT portw*(0bh),LED3PORT portw*(0bh),LED4PORT calldelay ;滅狀態(tài)停頓 banzout_int,*AR5- stm#9,AR5 stm#SEG_DATA,AR3out_int: brun_leddelay: pshmar0 pshmar3 pshmar4 stm#0fffh,ar7wait0: stm#0ffh,ar6wait1: banzwait1,*ar6- banzwait0,*ar7- popmar4 popmar3 popmar0 ret .end鏈接命令文件(.cmd文件):seg_ledtest.obj-oseg_ledtest.out-mseg_ledtest.map-estartMEMORY{PAGE0:EPROM:org=2000h,len=1000hPAGE1:DARAM:org=3000h,len=1000h}SECTIONS{.text:>EPROMPAGE0.vectors:>EPROMPAGE0.data:>DARAMPAGE1.bss:>DARAMPAGE1.stack:>DARAMPAGE1}實(shí)驗(yàn)4CCS的使用與匯編程序的控制設(shè)計(jì)1)實(shí)驗(yàn)?zāi)康?1)了解DSP開發(fā)系統(tǒng)的組成和結(jié)構(gòu);(2)熟悉DSP集成開發(fā)環(huán)境;(3)掌握TMS320C54xDSP程序空間的分配;(4)掌握TMS320C54xDSP數(shù)據(jù)空間的分配;(5)掌握操作TMS320C54xDSP存儲(chǔ)器的相關(guān)指令;(6)掌握TMS320C54xDSP相關(guān)運(yùn)算的指令;(7)掌握TMS320C54xDSP相關(guān)程序流程控制類的指令;(8)熟悉DSP開發(fā)軟件的使用。2)實(shí)驗(yàn)內(nèi)容設(shè)計(jì)一匯編程序,實(shí)現(xiàn)從一組所給的數(shù)中找出最大值,并將結(jié)果送數(shù)碼管顯示。運(yùn)行程序后,用CCS觀察相應(yīng)的存儲(chǔ)單元(參考程序中用z),該單元存儲(chǔ)了所給一組數(shù)中的最大數(shù),且與數(shù)碼管顯示結(jié)果一致。3)預(yù)備知識(shí)高速靈活的數(shù)據(jù)存取功能是高速信號(hào)處理的基礎(chǔ)之一。TMS320C54xDSP支持七種基本的數(shù)據(jù)尋址模式,用于操作數(shù)據(jù)空間、程序空間和I/O空間。各種模式靈活運(yùn)用可以實(shí)現(xiàn)高速的數(shù)據(jù)傳輸。由于DSP的強(qiáng)大功能在于對(duì)數(shù)據(jù)的處理,因此它具有豐富的訪問和操作數(shù)據(jù)空間的指令。程序空間和I/O空間的讀取操作指令相對(duì)少一些。對(duì)程序空間進(jìn)行讀/寫的指令有MVDP、MVPD、MACD、MACP、FIRS等;對(duì)I/O空間讀/寫的指令為PORTR和PORTW。由于DSP的數(shù)據(jù)空間可以和程序空間共享,也就是說,數(shù)據(jù)和程序在空間地址上可以混合放置,所以,在片內(nèi)的數(shù)據(jù),一般以數(shù)據(jù)空間方式訪問。若在片外,則要通過一定的地址譯碼實(shí)現(xiàn)數(shù)據(jù)程序空間共享。5)實(shí)驗(yàn)步驟(1)連接好DSP開發(fā)系統(tǒng),運(yùn)行CCS軟件;(2)用匯編語言設(shè)計(jì)程序及相應(yīng)的鏈接命令文件(.cmd文件),或輸入?yún)⒖汲绦蚣跋鄳?yīng)的鏈接命令文件(.cmd文件),從一組所給的數(shù)中找出最大值,并將結(jié)果送數(shù)碼管顯示。(3)新建一個(gè)工程;(4)向工程添加匯編程序及鏈接命令文件(.cmd文件);(5)編譯、鏈接工程中的所有文件,生成.out文件;(6)裝載上述.out文件,并運(yùn)行。6)實(shí)驗(yàn)現(xiàn)象與結(jié)果運(yùn)行程序后,用CCS觀察相應(yīng)的存儲(chǔ)單元(參考程序中用z),該單元存儲(chǔ)了所給一組數(shù)中的最大數(shù),且與數(shù)碼管顯示結(jié)果一致。.bssSEG_DATA,10;用于存放從SEG_VALUE裝載進(jìn)來的數(shù)碼管編碼數(shù)據(jù).bssnumber,10 ;用于存放從TABLE裝載進(jìn)來的供比較的數(shù)據(jù).bssz,1 ;用于存放最大值.dataTABLE.word4,2,3,5,1,8,6,5,4,9 ;供比較的數(shù)據(jù);以下用于存放數(shù)碼管編碼數(shù)據(jù),分別控制數(shù)碼管顯示0~9SEG_VALUE.word077h,014h,0b3h,0b6h,0d4h,0e6h,0e7h,034h,0f7h,0f6h.textstart: stm#stack+SIZE,SP ;;;;;;;;;C5402初始化;:;;;;;; stm#2b40h,ST1 stm#0,ST0 stm#1e00h,ST0 ;stm#435FH,ST1 stm#02024h,PMST ;IPTR=0010,0000,0->RESET=2000H stm#0h,SWWSR stm#4007h,CLKMD ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; stm#SEG_DATA,AR3 ;從SEG_VALUE裝載數(shù)碼管編碼數(shù)據(jù) rpt#9 mvpdSEG_VALUE,*AR3+ stm#number,AR1 ;從TABLE裝載供比較的數(shù)據(jù) rpt#9 mvpdTABLE,*AR1+ stm#SEG_DATA,AR3 stm#9,AR5 callgetmax ;調(diào)用求最大值子程序 calldisplay ;調(diào)用數(shù)碼管顯示子程序end: Bendgetmax: ld#0,A stm#number,AR3 st#9,BRC rptbrea1 ld*AR3+,Brea1: maxA stm#z,ar6 stlA,*ar6 ret

display:ld#SEGSEL,B portw*(0bh),SEGSELPORT stlmA,AR0 stm#SEG_DATA,AR7 nop mar*AR7+0 nop portw*AR7,SEGPORT ret .end鏈接命令文件(.cmd文件):max.obj-omax.out-mmax.map-estartMEMORY{PAGE0:EPROM:org=2000h,len=1000hPAGE1:DARAM:org=3000h,len=1000h}SECTIONS{.text:>EPROMPAGE0.vectors:>EPROMPAGE0.data:>DARAMPAGE1.bss:>DARAMPAGE1.stack:>DARAMPAGE1}實(shí)驗(yàn)5中斷實(shí)驗(yàn)1)實(shí)驗(yàn)?zāi)康?1)了解TMS320C54xDSP中斷向量表以及中斷服務(wù)子程序的編寫;(2)掌握TMS320C54xDSP中斷的使用。2)實(shí)驗(yàn)內(nèi)容使用外部按鍵(INT)觸發(fā)TMS320C54xDSP的外部中斷,每來一次中斷,就響應(yīng)中斷程序。按鍵INT,啟動(dòng)int0中斷,中斷服務(wù)程序使數(shù)碼管顯示的數(shù)加1,循環(huán)遞增。顯示變化時(shí),四個(gè)獨(dú)立的發(fā)光二極管與之同步閃爍。3)預(yù)備知識(shí)DSP的中斷包括不可屏蔽中斷NMI,外部中斷INT0~3和軟中斷。中斷響應(yīng)實(shí)際是特殊的程序調(diào)用過程。當(dāng)滿足中斷響應(yīng)條件時(shí),相應(yīng)的中斷服務(wù)程序被調(diào)用。中斷的使用包括中斷設(shè)置和中斷服務(wù)程序設(shè)計(jì)。中斷設(shè)置包括:(1)全局中斷控制位(INTM),用于控制所有中斷(除不可屏蔽中斷NMI)是否允許響應(yīng)。清0時(shí)使能(RSBXINTM),置1時(shí)關(guān)閉(SSBXINTM)。(2)中斷屏蔽寄存器(IMR)的設(shè)置。當(dāng)相應(yīng)位置1時(shí),對(duì)應(yīng)的中斷被打開。(3)中斷向量指針I(yè)PTR,位于處理器狀態(tài)寄存器PMST中。IPTR用于定位中斷向量表的首地址。中斷服務(wù)程序的設(shè)計(jì)包括:(1)中斷向量表的設(shè)計(jì)。中斷響應(yīng)時(shí),CPU自動(dòng)從IPTR包含的地址定位中斷向量的位置,并從此處執(zhí)行。所以中斷向量一般為跳轉(zhuǎn)指令,跳轉(zhuǎn)到響應(yīng)服務(wù)程序執(zhí)行。(2)中斷服務(wù)程序主體的編寫。包含中斷事件的處理指令。服務(wù)程序由中斷返回指令(RC、RETF或RETE)結(jié)束。5)實(shí)驗(yàn)步驟(1)連接好DSP開發(fā)系統(tǒng),運(yùn)行CCS軟件;(2)用匯編語言設(shè)計(jì)程序及相應(yīng)的鏈接命令文件(.cmd文件),或輸入?yún)⒖汲绦蚣跋鄳?yīng)的鏈接命令文件(.cmd文件),分別保存;(3)新建一個(gè)工程,添加相關(guān)文件;(4)編譯、鏈接工程中的所有文件,生成.out文件;(5)裝載.out文件并運(yùn)行,按下實(shí)驗(yàn)箱上的中斷實(shí)驗(yàn)按鍵INT;觀察數(shù)碼管顯示變化。6)實(shí)驗(yàn)現(xiàn)象與結(jié)果按鍵INT,啟動(dòng)int0中斷,中斷服務(wù)程序使數(shù)碼管顯示的數(shù)加1,循環(huán)遞增。顯示變化時(shí),四個(gè)獨(dú)立的發(fā)光二極管與之同步閃爍。7)思考題修改參考程序中的中斷服務(wù)程序,使四個(gè)獨(dú)立的發(fā)光二極管移位發(fā)亮。參考程序如下。匯編程序:.title "int00.asm" .mmregs .defstart .defint00SIZE.set100stack.usect"STK",SIZESEGSEL.set0001b;數(shù)碼管使能控制數(shù)據(jù),此處為第0個(gè)數(shù)碼管選通SEGSELPORT.set0h ;數(shù)碼管使能控制口地址SEGPORT.set1h ;數(shù)碼管數(shù)據(jù)口地址.bssSEG_DATA,10;用于存放從SEG_VALUE裝載進(jìn)來的數(shù)碼管編碼數(shù)據(jù).bssz,1 ;用于存放最大值.data;以下用于存放數(shù)碼管編碼數(shù)據(jù),分別控制數(shù)碼管顯示0~9SEG_VALUE.word077h,014h,0b3h,0b6h,0d4h,0e6h,0e7h,034h,0f7h,0f6h.textstart: stm#stack+SIZE,SP ;;;;;;;;;C5402初始化;;;;;;;;;;;;;;; stm#1e00h,ST0 stm#0b40h,ST1 stm#02024h,PMST ;IPTR=0010,0000,0->RESET=2000h stm#0h,SWWSR stm ;工作于鎖相環(huán)模式:CLKOUT=1/4CLKIN;CLKIN=10MHz STM#0001h,IMR ;打開int0中斷 RSBXINTM ;中斷使能 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; stm#SEG_DATA,AR3 ;從SEG_VALUE裝載數(shù)碼管編碼數(shù)據(jù) rpt#9 mvpdSEG_VALUE,*AR3+ stm#SEG_DATA,AR3 stm#1,AR0 stm#10,BKhere: Bhereint00: mar*AR3+0% ld*AR3,A CALLdisplay retedisplay: ld#SEGSEL,B portw*(0bh),SEGSELPORT stlmA,AR0 stm#SEG_DATA,AR7 nop mar*AR7+0 nop portw*AR7,SEGPORT ret .end.title"Vectors.asm".refstart.refstart.refint00.sect"Vectors"reset:Bstart NOP NOP NOPnmi: RETE NOP NOP NOP;softwareinterruptssint17.space4*16sint18.space4*16sint19.space4*16sint20.space4*16sint21.space4*16sint22.space4*16sint23.space4*16sint24.space4*16sint25.space4*16sint26.space4*16sint27.space4*16sint28.space4*16sint29.space4*16sint30.space4*16int0:BDint00 NOP NOP NOPint1: RETE NOP NOP NOPint2: RETE NOP NOP NOPtint: RETE NOP NOPrint0: RETE NOP NOP ;Interrupt0 NOPxint0: RETE ;SerialPortTransmit NOP NOP NOPrint2: RETE ;SerialPortReceive NOP ;Interrupt1 NOP NOPxint2: RETE ;SerialPortTransmit NOP ;Interrupt1 NOP NOPint3: RETE NOP NOP NOPhintp: RETE NOP NOP NOPrint1: RETE NOP NOP NOPxint1: RETE NOP NOP NOP .space4*16.end鏈接命令文件(.cmd文件):Vectors.objint00.obj-mint00.map-oint00.out-estartMEMORY/*TMS320C54xmicroprocessormodememorymap*/{PAGE0:PROG1:origin=0x2000,length=0x200PROG2:origin=0x2200,length=0x0d00PAGE1:DARAM1:origin=0x3000,length=0x1000/*databuffer,8064words*/PAGE2:FLASHRAM:origin=0x8000,length=0xffff}SECTIONS{.Vectors:load=PROG1 page0/*interruptvectortable*/.text:load=PROG2 page0/*executablecode*/.cinit:load=PROG2 page0/*tablesforinitializingvariablesandconstants*/.stack:load=DARAM1 page1/*Csystemstack*/.const:load=DARAM1 page1/*datadefinedasCqualifierconst*/.bss:load=DARAM1 page1

/*globalandstaticvariables*//*WAB3/19/90*/.data:>DARAM1 page1/*.datfiles*/}實(shí)驗(yàn)6外部標(biāo)志輸出引腳(XF)實(shí)驗(yàn)1)實(shí)驗(yàn)?zāi)康?1)熟悉CCS開發(fā)軟件的使用;(2)掌握TMS320C54xDSP的I/O讀/寫指令;(3)了解DSP的XF的使用方法;(4)熟悉匯編語言編程的方法。2)實(shí)驗(yàn)內(nèi)容編程實(shí)現(xiàn)XF輸出占空比和頻率可調(diào)的方波信號(hào)。3)預(yù)備知識(shí)通用輸入/輸出引腳VC54xDSP通過兩個(gè)專用的引腳,提供了可編程控制的通用輸入/輸出引腳,分別是分支轉(zhuǎn)移控制輸入引腳()和外部標(biāo)志輸出引腳(XF)。方波的周期和占空比可由程序來控制??梢杂脕頇z測外圍設(shè)備的狀態(tài)。在時(shí)間要求很緊張的系統(tǒng)里,通過檢測該引腳的狀態(tài)來決定程序控制是對(duì)中斷方式的一個(gè)特別有用的替代選擇??赏ㄟ^的狀態(tài)來執(zhí)行條件指令。XF可以用來通知外圍設(shè)備,也可以由指令方便地控制其輸出電平。5)實(shí)驗(yàn)步驟(1)連接好DSP開發(fā)系統(tǒng),運(yùn)行CCS軟件;(2)用匯編語言設(shè)計(jì)程序及相應(yīng)的鏈接命令文件(.cmd文件),或輸入?yún)⒖汲绦蚣跋鄳?yīng)的鏈接命令文件(.cmd文件),分別保存;(3)新建一個(gè)工程,添加相關(guān)文件;(4)編譯、鏈接工程,生成.out文件;(5)裝載.out文件,并運(yùn)行;(6)修改主程序和延時(shí)子程序中有關(guān)變量,調(diào)節(jié)方波的占空比和頻率,重復(fù)步驟(1)~(5)。6)實(shí)驗(yàn)現(xiàn)象與結(jié)果用示波器可以在XF的輸出端看到一個(gè)周期性方波信號(hào)。方波的周期和占空比可由程序來控制。7)思考題修改參考程序,通過設(shè)置時(shí)鐘模式寄存器(CLKMD)來改變方波信號(hào)的頻率,并用示波器觀察。參考程序如下。匯編語言程序:.title "xf_pulse.asm" .mmregs .defstartSIZE.set100HIGH_WIDTH.set7fh ;設(shè)置高電平寬度LOW_WIDTH.set7fh ;設(shè)置低電平寬度stack.usect"STK",SIZE.textstart: stm#stack+SIZE,SP ;;;;;;;;;C5402初始化;;;;;;;;;;;;;;; stm#2b40h,ST1 ;STM#2B40H,ST1; stm#1e00h,ST0; stm#02024h,PMST ;IPTR=0010,0000,0->RESET=2000h stm#0h,SWWSR stm#04007h,CLKMD ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; loop: ssbxxf calldelay rsbxxf calldelay bloopdelay: pshmar0 pshmar3 pshmar4 stmHIGH_WIDTH,ar7wait0: stmLOW_WIDTH,ar6wait1: banzwait1,*ar6- banzwait0,*ar7- popmar4 popmar3 popmar0 ret .end鏈接命令文件(.cmd文件)xf_pulse.obj-oxf_pulse.out-mxf_pulse.map-estartMEMORY{PAGE0:EPROM:org=02000h,len=200hPAGE1:SPRAM:org=0060h,len=001fhDARAM:org=0080h,len=100h}SECTIONS{.text:>EPROMPAGE0.data:>EPROMPAGE0.bss:>SPRAMPAGE1.stack:>DARAMPAGE1}實(shí)驗(yàn)7轉(zhuǎn)移控制輸入引腳()實(shí)驗(yàn)1)實(shí)驗(yàn)?zāi)康?1)熟悉CCS開發(fā)軟件的使用;(2)掌握TMS320C54xDSP的I/O讀/寫指令;(3)了解DSP的的使用方法;(4)熟悉匯編語言編程的方法。2)實(shí)驗(yàn)內(nèi)容用匯編語言編程,測試,通過程序的控制及外圍接口器件來反映不同的測試結(jié)果。將實(shí)驗(yàn)箱的輸入端子通過短路片分別與實(shí)驗(yàn)箱上的高低電平端子短接。當(dāng)接低電平時(shí),數(shù)碼管顯示內(nèi)容發(fā)生變化(循環(huán)顯示0~9十個(gè)數(shù));當(dāng)接高電平時(shí),數(shù)碼管顯示固定;當(dāng)懸空時(shí),數(shù)碼管顯示方式與懸空前的狀態(tài)相同。3)預(yù)備知識(shí)可以用來檢測外圍設(shè)備的狀態(tài)。在時(shí)間要求很緊張的系統(tǒng)里,通過檢測該引腳的狀態(tài)來決定程序控制是對(duì)中斷方式的一個(gè)特別有用的替代選擇。可通過的狀態(tài)來執(zhí)行條件指令。5)實(shí)驗(yàn)步驟(1)連接好DSP開發(fā)系統(tǒng),運(yùn)行CCS軟件;(2)用匯編語言設(shè)計(jì)程序及相應(yīng)的鏈接命令文件(.cmd文件),或輸入?yún)⒖汲绦蚣跋鄳?yīng)的鏈接命令文件(.cmd文件),分別保存;(3)新建一個(gè)工程,添加相關(guān)文件;(4)編譯、鏈接工程,生成.out文件;(5)裝載.out文件,并運(yùn)行;(6)修改程序中有關(guān)內(nèi)容,通過在XF輸出一個(gè)周期性的方波來反映的狀態(tài):為低電平時(shí)有信號(hào)波形輸出,為高電平時(shí)無信號(hào)輸出。6)實(shí)驗(yàn)現(xiàn)象與結(jié)果將實(shí)驗(yàn)箱的輸入端子通過短路片分別與實(shí)驗(yàn)箱上的高低電平端子短接。當(dāng)接低電平時(shí),數(shù)碼管顯示內(nèi)容發(fā)生變化(循環(huán)顯示0~9十個(gè)數(shù));當(dāng)接高電平時(shí),數(shù)碼管顯示固定;當(dāng)懸空時(shí),數(shù)碼管顯示方式與懸空前的狀態(tài)相同。7)思考題修改參考程序,實(shí)現(xiàn)通過改變高低電平來切換發(fā)光二極管的閃爍頻率。參考程序如下。匯編語言程序:.title"bio.asm".mmregs.defstartSIZE.set100stack.usect"STK",SIZESEGSEL.set1111b ;數(shù)碼管使能控制數(shù)據(jù),此處四個(gè)數(shù)碼管均使能SEGSELPORT.set0h;數(shù)碼管使能控制口地址SEGPORT.set1h;數(shù)碼管數(shù)據(jù)口地址LED1PORT.set2h;LED1地址LED2PORT.set3hLED3PORT.set0ehLED4PORT.set0fh.bssSEG_DATA,10h;用于存放從SEG_VALUE裝載進(jìn)來的數(shù)碼管編碼數(shù)據(jù).data;存放數(shù)碼管編碼數(shù)據(jù),分別控制數(shù)碼管顯示0~9SEG_VALUE.word077h,014h,0b3h,0b6h,0d4h,0e6h,0e7h,034h,0f7h,0f6h.textstart: stm#stack+SIZE,SP ;;;;;;;;;C5402初始化:;;;;;; stm#2B40h,ST1 stm#1E00h,ST0 stm#02024h,PMST ;IPTR=0010,0000,0->RESET=2000H stm#7FFFh,SWWSR stm#04007h,CLKMD ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; stm#SEG_DATA,AR3 ;從SEG_VALUE裝載數(shù)碼管編碼數(shù)據(jù) rpt#9 ;放入SEG_DATA mvpdSEG_VALUE,*AR3+ stm#SEG_DATA,AR3 ;AR3復(fù)位:指向SEG_DATA首址 stm#9,AR5 ;用作減法記數(shù)(下面程序控制用) ld#SEGSEL,A ;選通數(shù)碼管:四個(gè)均選通 portw*(08h),SEGSELPORT ;08H即累加器A的地址 loop: xc2,bio ;對(duì)口的判斷跳轉(zhuǎn)指令 callrun_led nop bnnnrun_led:;以下程序讓數(shù)碼管循環(huán)顯示0~9,同時(shí)LED閃爍一次 ld*ar3+,A ;向數(shù)據(jù)口送編碼數(shù)據(jù) portw*(08h),SEGPORT ld#0,B ;使LED全亮 portw*(0bh),LED1PORT portw*(0bh),LED2PORT portw*(0bh),LED3PORT portw*(0bh),LED4PORT calldelay ;亮狀態(tài)停頓 ld#1,B ;使LED全滅 portw*(0bh),LED1PORT portw*(0bh),LED2PORT portw*(0bh),LED3PORT portw*(0bh),LED4PORT calldelay ;滅狀態(tài)停頓 banzout_int,*AR5- stm#9,AR5 stm#SEG_DATA,AR3out_int: ;run_led retdelay: pshmar0 pshmar3 pshmar4 stm#07ffh,ar7wait0: stm#0ffh,ar6wait1: banzwait1,*ar6- banzwait0,*ar7- popmar4 popmar3 popmar0 retnnn: bloop .end鏈接命令文件(.cmd文件)bio.obj-obio.out-mbio.map-estartMEMORY{PAGE0:EPROM:org=2000h,len=1000hPAGE1:DARAM:org=3000h,len=1000h}SECTIONS{.text:>EPROMPAGE0.vectors:>EPROMPAGE0.data:>DARAMPAGE1.bss:>DARAMPAGE1.stack:>DARAMPAGE1}實(shí)驗(yàn)8定時(shí)器實(shí)驗(yàn)1)實(shí)驗(yàn)?zāi)康?1)掌握TMS320C54xDSP定時(shí)器中斷的概念和使用;(2)學(xué)習(xí)定時(shí)器中斷的使用方法,以及定時(shí)器定時(shí)周期的設(shè)定。2)實(shí)驗(yàn)內(nèi)容編寫程序,設(shè)置TMS320C54xDSP定時(shí)器的相關(guān)寄存器,改變定時(shí)器的定時(shí)周期,在定時(shí)器的中斷服務(wù)子程序里使XF端產(chǎn)生方波信號(hào)。其信號(hào)周期可由定時(shí)器周期PRD、定時(shí)器控制寄存器TCR中的TDDR以及控制主時(shí)鐘周期的時(shí)鐘方式寄存器CLKMD決定。3)預(yù)備知識(shí)定時(shí)器中斷TINT的速率可由下面公式計(jì)算: TINTrate=1/tc*u*v=1/tc*(TDDR+1)*(PRD+1)式中,tc為CPU時(shí)鐘周期。通過使用TOUT輸出引腳來定時(shí)設(shè)備或者使用定時(shí)器中斷周期性地從一個(gè)寄存器讀取數(shù)據(jù),定時(shí)器可以產(chǎn)生外圍模擬接口的采樣時(shí)鐘。(1)初始化定時(shí)器時(shí),需要按照以下步驟設(shè)置:①TSS=1,停止定時(shí)器;②載入PRD值;③重新載入TCR初始化TDDR,設(shè)置TSS=0和TRB=1來重載定時(shí)器周期。啟動(dòng)定時(shí)器。(2)狀態(tài)寄存器ST1的中斷模式INTM=1的情況下,可以采取下列步驟激活定時(shí)器中斷:①設(shè)置中斷標(biāo)志寄存器(IFR)中的TINT=1,清除定時(shí)中斷;②設(shè)置中斷屏蔽寄存器(IMR)中的TINT=1,激活定時(shí)器中斷。(3)INTM=0,激活全部中斷。5)實(shí)驗(yàn)步驟(1)連接好DSP開發(fā)系統(tǒng),運(yùn)行CCS軟件;(2)設(shè)計(jì)程序或鍵入下面的參考程序并保存;(3)新建一個(gè)工程,向工程添加所有以上程序;(4)編譯、鏈接工程,生成time_int.out文件;(5)裝載time_int.out文件,并運(yùn)行;(6)修改程序,通過改變寄存器PRD、TCR和CLKMD的內(nèi)容來輸出一個(gè)10kHz的方波。6)實(shí)驗(yàn)現(xiàn)象與結(jié)果程序運(yùn)行后,在XF端口可用示波器看到方波信號(hào)。其信號(hào)周期可由定時(shí)器周期PRD、定時(shí)器控制寄存器TCR中的TDD以及控制主時(shí)鐘周期的時(shí)鐘方式寄存器CLKMD決定。7)思考題修改參考程序,使XF端口的方波信號(hào)頻率為10kHz,占空比為25%。參考程序如下。匯編語言程序: .title "time_int.asm" .mmregs .defstart .deftint00 SIZE.set100TIM0.set0024hPRD0.set0025hTCR0.set0026h.bssxf_flag,1stack.usect"STK",SIZE.textstart: stm#stack+SIZE,SP ;;;;;;;;;C5402初始化;;;;;;;;;;;;;;; stm#1e00h,ST0 stm#2b40h,ST1 stm#02024h,PMST ;IPTR=0010,0000,0->RESET=2000H stm#0h,SWWSR stm ;工作于鎖相環(huán)模式:CLKOUT=1/4CLKIN;CLKIN=10MHz ;;;;;;;;;;定時(shí)器0初始化;;;;;;;;;;;;;;;;;;;;;;;;;;;;; stm先停止定時(shí)器0,再裝載TIM0,PRD0 stm#249,TIM0 stm#249,PRD0;由以上,定時(shí)周期=CLKOUT周期*(PRD0+1)(TDDR0+1)=(1/(10M/4))*250*10=1ms stm#0000000011101001b,TCR0 ;TDDR0=9,并啟動(dòng)定時(shí)器0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; stm#0000h,IFR stm#0008h,IMR ;打開定時(shí)器0的中斷 rsbxINTM ;中斷使能here: bheretint00: ldmST1,A ;定時(shí)器0的中斷服務(wù)程序 xor將ST1的第13位(即XF位)取反 stlmA,ST1 rete .end.title"Vectors.asm".refstart.align0x80.refstart.reftint00.sect"Vectors"reset: bstart nop nop nopnmi: rete nop nop nop;softwareinterruptssint17.space4*16sint18.space4*16sint19.space4*16sint20.space4*16sint21.space4*16sint22.space4*16sint23.space4*16sint24.space4*16sint25.space4*16sint26.space4*16sint27.space4*16sint28.space4*16sint29.space4*16sint30.space4*16int0: rete nop nop nopint1: rete nop nop nopint2: rete nop nop noptint: btint00;定時(shí)器0入口 nop nop noprint0: rete nop nop nopxint0: rete nop nop noprint2: rete nop nop nopxint2: rete nop nop nopint3: rete nop nop nophintp: rete nop nop noprint1: rete nop nop nopxint1: rete nop nop nop .space4*16.end鏈接命令文件(.cmd文件)如下:Vectors.objtime_int.obj-mtime_int.map-otime_int.out-estartMEMORY/*TMS320C5402microprocessormodememorymap*/{PAGE0:PROG1:origin=0x2000,length=0x200PROG2:origin=0x2200,length=0x0d00PAGE1:DARAM1:origin=0x3000,length=0x1000/*databuffer,8064words*/PAGE2:FLASHRAM:origin=0x8000,length=0xffff}SECTIONS{.Vectors :load=PROG1 page0/*interruptvectortable*/.text :load=PROG2 page0/*executablecode*/.stack :load=DARAM1 page1/*systemstack*/.bss :load=DARAM1 page1/*globalandstaticvariables*/.data :>DARAM1 page1/*.datfiles

溫馨提示

  • 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)論