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

下載本文檔

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

文檔簡介

1、電子科技大學(xué) 通信 學(xué)院標(biāo) 準(zhǔn) 實(shí) 驗 報 告(實(shí)驗)課程名稱 DSP設(shè)計與實(shí)踐 電子科技大學(xué)教務(wù)處制表電 子 科 技 大 學(xué)實(shí) 驗 報 告學(xué)生姓名: 學(xué) 號: 指導(dǎo)教師:向超實(shí)驗地點(diǎn): 實(shí)驗時間:1、 實(shí)驗室名稱:電子科技大學(xué)美國德州儀器DSP技術(shù)/培訓(xùn)中心 2、 實(shí)驗項目名稱:用定時器實(shí)現(xiàn)數(shù)字振蕩器三、實(shí)驗學(xué)時:4學(xué)時四、實(shí)驗原理:數(shù)字振蕩器原理設(shè)一個傳遞函數(shù)為正弦序列sinkT,其z變換為 H(z)=EMBED Equation.3 EMBED Equation.3 v儭丌=2cosÉ, B=-1, C=sinÉ其中,A=2cosT, B=-1, C=sinT。設(shè)初始

2、條件為0,求出上式的反Z變換得: yk=Ayk-1+Byk-2+Cxk-1這是一個二階差分方程,其單位沖擊響應(yīng)即為sinkT。利用單位沖擊函數(shù)xk-1的性質(zhì),即僅當(dāng)k=1時,xk-1=1,代入上式得: k=0 y0 = Ay-1 + By-2 + 0 = 0 k=1 y1 = Ay0 + By-2 + c = c k=2 y2 = Ay1 + By0 + 0 = Ay1 k=3 y3 = Ay2 + By1 . . k=n yn= Ayn-1 + Byn-2在k>2以后,yk能用yk-1和yk-2算出,這是一個遞歸的差分方程。 根據(jù)上面的說明,我們可以開始數(shù)字振蕩器的設(shè)計。設(shè)該振蕩器的頻

3、率為2kHz,采樣率為40kHz(通過定時器設(shè)置,每隔25us中斷一次,即產(chǎn)生一個yn),則遞歸的差分方程系數(shù)為: A=2cosT=2cos (2 x PI x 2000 / 40000)=2 x 0.95105652 x4 1e6f0 B=-1 C=sinT=sin (2 x PI x 2000 / 40000)=0.30901699 x4 =9e4b為了便于定點(diǎn)DSP處理,我們將所有的系數(shù)除以2,然后用16位定點(diǎn)格式表示為:a f378 c 4f25 這便是本實(shí)驗中產(chǎn)生2KHz正弦信號的三個系數(shù)。在本實(shí)驗中,主程序在初始化時先計算出y1和y2,然后開放定時器中斷。以后每次進(jìn)入定時器中斷服務(wù)

4、程序時,利用前面的y1和y2,計算出新的有y0,通過CCS提供的圖形顯示工具,我們將在圖形窗口中看到一個正弦信號波形。下面是初始化和中斷服務(wù)程序代碼片段:初始化y1和y2:ssbxFRCT;置FRCT=1,準(zhǔn)備進(jìn)行小數(shù)乘法運(yùn)算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中斷服務(wù)程序片段:ldBB,T;將系數(shù)B裝入T寄存

5、器mpyy2,a;y2乘系數(shù)B,結(jié)果放入A寄存器ltdy1;將y1裝入T寄存器,同時復(fù)制到y(tǒng)2macAA,a;完成新正弦數(shù)據(jù)的計算,a寄存器中為; y1*AA+y2*BBstha,1,y1;將新數(shù)據(jù)存入y1,因所有系數(shù)都除過2,所以在保;存結(jié)果時轉(zhuǎn)移一位,恢復(fù)數(shù)據(jù)正常大小。stha,1,y0;將新正弦數(shù)據(jù)存入y0 (2)C54X的定時器操作 C54X的片內(nèi)定時器利用CLKOUT時鐘計數(shù),用戶使用三個寄存器(TIM,PRD,TCR)來控制定時器,參見表4-1。在表4-2中列出了定時器控制寄存器的各個比特位的具體定義。VC5402的另一個定時器(定時器1)的控制寄存器分別為:0x30(TIM1),

6、0x31(PRD1),0x32(TCR1)。 從上面的介紹可以看到定時器實(shí)際上可以有20個比特的周期寄存器。它對CLKOUT信號計數(shù),先將PSC減1,直到PSC為0,然后用TDDR重新裝入PSC,同時將TIM減1,直到TIM減為0。這時CPU發(fā)出TINT中斷,同時在TOUT引腳輸出一個脈沖信號,脈沖寬度為CLKOUT一致。然后用PRD重新裝入TIM,重復(fù)下去直到系統(tǒng)或定時器復(fù)位。因而定時器中斷的頻率由下面的公式?jīng)Q定: TINT的頻率= EMBED Equation.3 EMBED Equation.3 v儭乴ch蠺祃LKOUT其中tc表示CLKOUT的周期。定時器當(dāng)前的值可以通過讀取TIM寄存

7、器和TCR寄存器的PSC比特位得到。下面是本實(shí)驗中初始化定時器的程序片段: stm#10h,TCR;停止定時器stm#2499,PRD;設(shè)置PRD寄存器值為2499,TINT中斷頻率為 ; Foutclk /(2499+1)= 100MHz/2500 = 40 KHzstm#20h,TCR; 重新裝入TIM和PSC,然后啟動定時器 (3)C54X中斷的使用 在C54X中用戶可以通過中斷屏蔽寄存器IMR來決定開放或關(guān)閉一個中斷請求。其中,HPINT表示HPI接口中斷,INT3-INT0為外部引腳產(chǎn)生的中斷,TXINT和TRINT為TDM串口的發(fā)送和接收中斷,BXINT0和BRINT0為BSP串口

8、的發(fā)送和接收中斷,TINT0為定時器0中斷。在中斷屏蔽寄存器IMR中,1表示允許CPU響應(yīng)對應(yīng)的中斷,0表示禁止。當(dāng)然要CPU響應(yīng)中斷,ST1寄存器中的INTM還應(yīng)該為0(允許所有的中斷)。當(dāng)DSP響應(yīng)中斷時,PC指針指向中斷向量表中對應(yīng)中斷的地址,進(jìn)入中斷服務(wù)子程序。中斷向量表是C54X存放中斷服務(wù)程序的一段內(nèi)存區(qū)域,大小為80H。在中斷向量表中,每一個中斷占用4個字的空間,一般情況是將一條跳轉(zhuǎn)或延時跳轉(zhuǎn)指令存放于此。當(dāng)然,如果中斷服務(wù)程序很短(小于或等于4個字),可以直接放入該向量表。中斷向量表的位置可以通過修改基地址來改變,其基地址由PMST寄存器中的IPTR(15-7 bits)決定。

9、表4-3給出了中斷向量表的各中斷的偏移說明。例如C54x復(fù)位后其IPTR全為1,所以中斷向量表起始位置在0FF80H,因而復(fù)位后程序從0FF80H開始運(yùn)行。本實(shí)驗的初始化程序讀取中斷向量表的啟始地址,然后設(shè)置PMST的高9位,以便DSP能正確響應(yīng)中斷,代碼如下: ld #0,dp;設(shè)置DP頁指針 ssbx intm;關(guān)閉所有中斷 ld #vector, a;讀出中斷向量(地址vector在中斷向量表程序中定義) and #0FF80h, a;保留高9位(IPTR) andm #007Fh, pmst;保留PMST的低7位 or pmst, a; stlm a, pmst;設(shè)置PMST(其中包括

10、IPTR)五、實(shí)驗?zāi)康模涸跀?shù)字信號處理中,會經(jīng)常使用到正弦/余弦信號。通常的方法是將某個頻率的正弦/余弦值預(yù)先計算出來后制成一個表,DSP工作時僅作查表運(yùn)算即可。在本實(shí)驗中將介紹另一種獲得正弦/余弦信號的方法,即利用數(shù)字振蕩器用疊代方法產(chǎn)生正弦信號。 本實(shí)驗除了學(xué)習(xí)數(shù)字振蕩器的DSP實(shí)現(xiàn)原理外,同時還學(xué)習(xí)C54X定時器使用以及中斷服務(wù)程序編寫。另外,在本實(shí)驗中我們將使用匯編語言和C語言分別完成源程序的編寫。六、實(shí)驗內(nèi)容:本實(shí)驗需要使用C54X匯編語言或C語言實(shí)現(xiàn)數(shù)字振蕩器,并通過CCS提供的圖形顯示窗口觀察輸出信號波形以及頻譜。七、實(shí)驗器材(設(shè)備、元器件):計算機(jī)一臺8、 實(shí)驗步驟:(1).

11、根據(jù)確定數(shù)字振蕩器的頻率,確定系數(shù)。數(shù)字振蕩器系數(shù)的確定在前面已經(jīng)說明,這里不再贅述。(2). 啟動CCS,新建工程文件,如文件名為sinewave.mak。選擇Project菜單中的Add File to Project選項,將匯編源程序exer3.asm、vec_table.asm和連接定位sinewave.cmd文件依次添加到工程文件中。注意,你可以在添加文件對話框中選擇顯示不同的文件類型來加快文件選擇速度。你也可以使用鼠標(biāo)右鍵單擊工程文件名(如sinewave.mak)并選擇Add Files項來添加需要的文件。其中,exer3.asm包括初始化代碼和中斷服務(wù)程序,而vec_talbe

12、.asm包含中斷向量表。(3). 選擇Project菜單中的Options選項,或使用鼠標(biāo)右鍵單擊工程文件名(如sinewave.mak)并選擇Options項來修改或添加編譯、連接中使用的參數(shù)。例如,選擇Assembler窗口,選擇“Enable Symbolic Debug Infomation”以便使用匯編源代碼級調(diào)試(你可以在匯編源程序設(shè)置斷點(diǎn)等等)。選擇Linker窗口,在“Output Filename”欄中寫入輸出OUT文件的名字,如sine.out,你還可以設(shè)置生成的MAP文件名。(4). 完成編譯、連接,正確生成OUT文件。然后使用File菜單的“Load Program”選

13、項,將生成的OUT文件(如sine.out)裝入DSP的片內(nèi)存儲器。這時CCS將顯示程序的啟始地址_c_int00。(5).選ViewGraphTime/Frequency打開圖形顯示設(shè)置窗口。在彈出的對話框中按下圖設(shè)置,主要修改“Start Address”為y0(y0為生成的正弦波輸出變量);“Acquisition Buffer Size”為1,“DSP Data Type”為“16-bit signed integer”。想想為什么要這樣修改? EMBED PBrush EMBED PBrush (6) . 在匯編源程序的中斷服務(wù)程序(_tint)中的“nop”語句處設(shè)置斷點(diǎn)。該行被加

14、亮為洋紅色。選擇DebugAnimate,運(yùn)行程序,觀察輸出波形。數(shù)一數(shù)一個周期的正弦波有多少個點(diǎn)?算算頻率是否是2kHz?另外,想想Run和Animate兩種運(yùn)行方式的區(qū)別? 通過計算發(fā)現(xiàn),一個周期大約有2.5個點(diǎn),按照每一格為20ms,計算發(fā)現(xiàn),頻率為2kHz。 Run方式為靜態(tài),每Run一次,程序跑一次。Animate可以連續(xù)運(yùn)行程序,波形可連續(xù)顯示。(7) . 用右鍵單擊圖形顯示窗口,并選擇“Proporties”項以便修改顯示屬性。將“Display Type”項改為“FFT Magnitude”以便顯示信號頻譜。修改“Sampling Rate(Hz)”項為40000,然后退出。注

15、意觀察生成的正弦波頻率。生成的正弦波為:(8). 清除所有斷點(diǎn),關(guān)閉除波形顯示窗口外的所有窗口,并關(guān)閉工程文件。下面我們使用C語言完成本實(shí)驗。新建一個工程文件,如sinewave_c.mak,并添加timer.c,vec_table.asm源程序,再添加timer.cmd,再添加C使用的標(biāo)準(zhǔn)庫rts.lib。該文件應(yīng)該在CCS安裝目錄中。例如,若CCS安裝在d:ti下,則rts.lib應(yīng)該在d:tic5400cgtoolslib下。修改編譯、連接選項,加入符號調(diào)試選項,修改生成的OUT文件名,如timer.out。(9). 完成編譯、連接,正確生成OUT文件。然后使用File菜單的“Load

16、Program”選項,將生成的OUT文件(如timer.out)裝入DSP的片內(nèi)存儲器。這時CCS將顯示程序的啟始地址_c_int00。 (10). 打開C源程序(timer.c)窗口,在中斷服務(wù)程序(函數(shù)tint())的“con_buf=0;”語句處增加一個斷點(diǎn)。同樣打開圖形顯示窗口,并將“Start Address”改為buf;“Acquisition Buffer Size”改為128,“Display Data Size”改為128,“DSP Data Type”為“32-bit floating point”。想想為什么這次將“Acquisition Buffer Size”項設(shè)置為128?(11). 選擇DebugAnimat

溫馨提示

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

最新文檔

評論

0/150

提交評論