實驗三-用定時器實現(xiàn)數(shù)字振蕩器DSP_第1頁
實驗三-用定時器實現(xiàn)數(shù)字振蕩器DSP_第2頁
實驗三-用定時器實現(xiàn)數(shù)字振蕩器DSP_第3頁
實驗三-用定時器實現(xiàn)數(shù)字振蕩器DSP_第4頁
實驗三-用定時器實現(xiàn)數(shù)字振蕩器DSP_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

實驗三用定時器實現(xiàn)數(shù)字振蕩器1、實驗目的和要求在數(shù)字信號處理中,正弦/余弦信號是最常見的信號之一。為了產(chǎn)生這些信號,通常的方法是講某個頻率的正弦/余弦值余弦計算出來后制成一個表,DSP工作時僅作查表運算即可。在本實驗中將介紹另一種獲得正弦/余弦信號的方法,即利用數(shù)字振蕩器用疊代方法產(chǎn)生正弦信號。根本思路是:利用定時器產(chǎn)生了一個2kHz的正弦信號,定時器被設置成每25uS產(chǎn)生一次中斷,〔等效于采樣速率未40k〕利用該中斷,在該中斷效勞程序中用疊代算法計算出一個SNT值,并利用CCS的圖形顯示功能查看波形。本實驗除了學習數(shù)字振蕩器的DSP實現(xiàn)原理外,同時還學習C54X定時器使用以及中斷效勞程序編寫。另外,在本實驗中我們將使用匯編語言和C語言分別完成源程序的編寫。2、實驗原理〔1〕數(shù)字振蕩器原理設沖擊響應鼓勵下,一個系統(tǒng)的傳遞函數(shù)為正弦序列sinkwT,其z變換為其中,A=2coswT,B=-1,C=sinwT。設初始條件為0,求出上式的反Z變換得:y[k]=Ay[k-1]+By[k-2]+Cx[k-1]這是個二階差分方程,其單位沖擊響應即為sinkwT。利用單位沖擊函數(shù)x[k-1]的性質(zhì),即僅當k=1時,x[k-1]=1,代入上式得:k=0y[0]=Ay[-1]+By[-2]+0=0k=1y[1]=Ay[0]+By[-2]+c=ck=2y[2]=Ay[1]+By[0]+0=Ay[1]k=3y[3]=Ay[2]+By[1]k=ny[n]=Ay[n-1]+By[n-2]在k﹥2以后,y[k]能用y[k-1]和y[k-2]算出,這是一個遞歸得方法。根據(jù)上面得說明,我們可以開始數(shù)字振蕩器得設計。設該振蕩器得頻率為2kHz,采樣率為40kHz〔通過定時器設置,每隔25us中斷一次,即產(chǎn)生一個y[n]〕那么遞歸得差分方程系數(shù)為:A=2coswT=2cos(2×PI×2000/40000)=2×0.95105652B=-1C=sinwT=sin(2×PI×2000/40000)=0.30901699為了便于定點DSP處理,我們將所有系數(shù)除以2,然后用16為定點格式表示為:這便是本實驗中查生2kHz陣線信號的三個系數(shù)。在本實驗中,主程序在初始化時先計算出y[1]和y[2],然后開放定時器中斷。以后每次進入定時器中斷效勞程序時,利用前面的y[1]和y[2],計算出新的所有y[n],通過CCS提供的圖形顯示工具,我們將在圖形窗口中看到一個正弦信號波形。下面時初始化和中斷效勞程序代碼片斷:初始化y[1]和y[2]:SSBXFRCT:置FRCT=1,準備進行小數(shù)乘法運算ST#INIT_A,AA:將常數(shù)A裝入變量AAST#INIT_B,BB:將常數(shù)B裝入變量BBST#INIT_C,CC:將常數(shù)C裝入變量CCPSHDCC:將變量CC壓入堆棧POPDy2:初始化y2=CCLDAA.T:裝AA到T存放器MPYy2,A:y2乘系數(shù)A,結(jié)果放入A存放器STHA,y1:將A存放器得高16位存入變量y1中斷效勞程序片斷LDBB,T:將系數(shù)B裝入T存放器MPYy2,A:y2乘系數(shù)B,結(jié)果放入A存放器LTDy1:將y1裝入T存放器,同時復制到y(tǒng)2MACAA,A:完成新正弦數(shù)據(jù)的計算,A存放器中為y1*AA+y2*BBSTHA,l,y1:將新數(shù)據(jù)存入y1,因所有系數(shù)都除過2,所以在保存結(jié)果時轉(zhuǎn)移一位,恢復數(shù)據(jù)正常大小STHA,l,y0:將新正弦數(shù)據(jù)存入y0(2)C54X的定時器操作C54X的片內(nèi)定時器利用CLKOUT時鐘計數(shù),用戶使用三個存放器〔TIM,PRD,TCR〕來控制定時器,參見表4-1。在表4-2中列出了定時器控制存放器的各個比特位的具體定義。‘VC5402得另一個定時器〔定時器1〕的控制存放器分別為:0×30〔TIM1〕,0×31〔PRD1〕,0×32〔TCR1〕。表4-1‘VC5402定時器0的相關(guān)存放器存放器地址名稱用途0024hTIM定時器存放器,每計數(shù)一次自動減一0025hPRD定時器周期存放器,當TIM減為0后,CPU自動將PRD的值裝入TIM0026hTCR定時器控制存放器表4-2定時器控制就存起〔TCR〕bit概要比特名稱功能15-12保存讀出時為011soft該比特位與10位配合使用以決定定時器在使用仿真調(diào)試時的狀態(tài).Soft=0當進入仿真調(diào)試時,定時器立即停止工作。Soft=1當計數(shù)器被減為0后,停止工作。10free該比特位與11位配合使用以決定定時器在使用仿真調(diào)試時的狀態(tài)free=0根據(jù)11比特位決定定時器狀態(tài)free=1忽略11比特位,定時器不受影像9-6PSC定時器預置計數(shù)器。當PSC減為0后,CPU自動將TDDR裝入,然后TIM開始減1。5TRB定時器復位。當TRB=1時,CPU將PRD存放器的值裝入TIM存放器,將TDDR的值裝入PSC4TSS定時器停止狀態(tài)。當系統(tǒng)復位時,TSS被去除,定時器立刻開始工作。TSS=0表示啟動定時器TSS=1表示停止定時器0-3TDDR定時器擴展周期。當PSC減到0,CPU自動將TDDR的值裝入PSC,然后TIM減。所以整個定時器得周期存放器可以有20個比特〔PRD+TDDR〕.從上面的介紹可以看到定時器實際上可以有20個比特的周期存放器。它對于CLKOUT信號計數(shù),先將PSC減1,知道PSC為0。這是CPU發(fā)出TINT中斷,同時在TOUT引腳輸出一個脈沖信號,脈沖寬度與CLKOUT一致。然后用PDR重新裝入TIM,重復下去一直到系統(tǒng)或定時器復位。因而定時器中斷得頻率由一下的公式?jīng)Q定:TINT的頻率=其中tc表示CLKOUT的周期。定時器當前得值可以通過讀取TIM存放器和TCR存放器的PSC比特位得到。下面時本實驗中初始化定時器得程序片段:STM#10h,TCR:停止定時器STM#2499,PDR:設置PDR存放器值為2499,TINT中斷頻率為Foutclk/(2499+1)=100MHz/2500=40KHzSTM#20h,TCR:重新裝入TIM和,PSC,然后啟動定時器〔3〕C54X中斷的使用在C54X中用戶可以通過中斷屏蔽酒釀起IMR來決定開放或關(guān)閉一個中斷請求。圖4-1出了C5402得IMR存放器的各個比特位的定義。圖4-1C5402的IMR存放器其中,HPINT表示HPI接口中斷,INT3-INTO為外部引腳產(chǎn)生的中斷,TXINT和TRINT為TDM串口發(fā)送和接受中斷,BXINT0和BRINT0為BSP串口的發(fā)送和接收中斷,TINT0為定時器0中斷。在中斷屏蔽存放器IMR中,1表示允許CPU響應對應的中斷,0表示禁止。當然要CPU響應中斷,ST1存放器中的INTM還應該為0(允許所有的中斷)。當DSP響應中斷時,PC指針指向中斷向量表中對應中斷的地址,進入中斷效勞子程序。中斷向量表是C54X存放中斷效勞程序的一段內(nèi)存區(qū)域,大小為80H。在中斷向量表中,每一個中斷占用4個字的空間,一般情況是將一條跳轉(zhuǎn)或延時延時跳轉(zhuǎn)指令存放于此。當然,如果中斷效勞程序很短〔小于或等于4個字〕,可以直接放入該向量表。中斷向量表的位置可以通過修改基地址來改變,其基地址由PMST存放器中的IPTR(15-7bit)決定。表4-3給出了中斷向量表的各中斷的偏移說明。例如C54x復位后其IPTR全為1,所以中斷向量表位置在OFF80H,因而復位后程序從OFF80H開始運行。本實驗的初始化程序讀取中斷向量表的起始地址,然后設置PMST的高9位,以便DSP能正確響應中斷,代碼如下:LD#0,dp;設置DP頁指針SSBXintm;關(guān)閉所有中斷LD#vector;讀出中斷向量〔地址vector在中斷向量表程序中定義〕AND#OFF80h,A;保存PMST的低7位ORPMST,A;STLMA,PMST;設置PMST(其中包括IPTR)表4-354X的中斷向量表3、實驗內(nèi)容本實驗需要使用C54X匯編語言或C語言實現(xiàn)數(shù)字振蕩器,并通過CCS提供的圖形顯示窗口觀察輸出信號波形以及頻譜。實驗分下面幾步完成:〔1〕根據(jù)確定數(shù)字振蕩器的頻率,確定系數(shù)。數(shù)字振蕩器系數(shù)確實定在前面已經(jīng)說明,這里不再贅述。〔2〕啟動CCS,新建工程文件,如文件名為sinewave.mak。選擇Project菜單中的addFiletoProject選項,將匯編源程序exer3.sdm、vec_tAble.asm和連接定位sinewaved文件依次添加到工程文件中。注意,你可以在添加文件對話框中選擇顯示不同的文件類型來加快文件選擇速度。你頁可以使用鼠標右鍵單擊工程文件名〔如sinewave.mak〕并選擇addFiles愛添加需要的文件。其中,exer3.asm包括初始化代碼和中斷效勞程序,而vec_talbe.asm包含中斷向量表。〔3〕選擇Project菜單中的Option選項,或使用鼠標右鍵單擊工程文件名〔如sinewave.mak〕并選擇Option項來修改或添加編譯、連接中使用的參數(shù)。例如,選擇assemble窗口,選擇“EnableSymbolicDebugInformation〞以便使用匯編代碼級調(diào)試〔你可以在匯編源程序設置斷點等等〕。選擇Linker窗口,在“OutputFilename〞欄中寫入輸出OUT文件的名字,如sina.out,你還可以設置生成的MaP文件名。〔4〕寫成編譯、連接,正確生成OUT文件。然后使用File菜單中的“LoadProgram〞選項,將生成的OUT文件〔如sina.out〕裝入DSP的片內(nèi)存儲器。這是CCS將顯示程序的起始地址_c_int00.〔5〕選ViewGraphTime/Frequency…翻開圖形顯示設置窗口。在彈出的對話框中按下列圖設置,主要修改“STaraddress〞為y0(y0為生成的正弦波輸出變量);“acquisitionBufferSize〞為1,“DSPDataType〞為“16-bitsignedinteger〞。(6)在匯編源程序的中斷效勞程序〔_tint〕中的“nop〞語句處設置斷點。該行被加亮為洋紅色。選擇Debuganimate,運行程序,觀察輸出波形。〔7〕用右鍵單擊圖形顯示窗口,并選擇“Proporties〞項以便修改顯示屬性。將“DisplayType〞項改為“FFTMagnitude〞以便顯示信號頻譜。修改“SamplingRate(Hz)〞項為40000,然后退出。注意觀察生成的正弦波頻率。〔8〕去除所有斷點,關(guān)閉除波形顯示窗口外的所有窗口,并關(guān)閉工程文件。現(xiàn)面我們使用C語言完本錢實驗。新建一個工程文件,如sinewave_c.mak并添加timer.c,vec_table.asm源程序,再添加timerd,再添加C使用的標準庫rts.lib。該文件應該再CCS安裝目錄中。例如,假設CCS安裝在d:\ti下,那么rts.lib應該在d:\ti\c5400\cgtools\lib下。修改編譯、連接選項,參加符號調(diào)試選項,修改生成的OUT文件名,如tiner.out。〔9〕完成編譯。連接,正確生成OUT文件。然后使用File菜單的“LoadProgram〞選項,將生成的OUT文件〔如timer.out〕裝入DSP的片內(nèi)存儲器。這時CCS將顯示程序的啟始地址_c_int00.(10)翻開C源程序〔timer.c〕窗口,在中斷效勞程序〔函數(shù)tint()〕的“con_buf=0;〞語句處增加一個斷點。同樣翻開圖形顯示窗口,并將“STartaddress〞改為128,“DisplayDataSize〞改為128,“DSPDataType〞為“32-bitfloatingpoint〞。選擇Debug→animate,運行程序,觀察輸出波形。算算頻率是否是2kHz?同樣用右鍵單擊圖形顯示窗口,顯示信號頻譜,。注意修改“SamplingRata(Hz)〞項為40000,然后退出。注意觀察生成的正弦波頻率。實驗結(jié)果實驗程序:title

"sine.asm"

.mmregs

.global

_c_int00,_tint,vector

OFF_INTIMER

.set

04Ch

COM_A

.set

07642h

COM_B

.set

0c000h

COM_C

.set

0187eh

.bss

y0,1

.bss

y1,1

.bss

y2,1

.bss

temp,1

.bss

Aa,1

.bss

Bb,1

.bss

Cc,1

.text

_c_int00:

ld

#0,dp

ssbx

intm

st

#1fffh,sp

ld

#vector,

a

and

#0FF80h,

a

andm

#007Fh,

pmst

or

pmst,

a

stlm

a,

pmst

stm

#10h,TCR

stm

#2499,PRD

stm

#20h,TCR

ldm

IMR,a

or

#08h,a

stlm

a,IMR

ld

#temp,dp

ssbx

FRCT

st

#COM_A,Aa

st

#COM_B,Bb

st

溫馨提示

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

評論

0/150

提交評論