C語言定時器實驗
實驗三 C語言定時器實驗
一、實驗目的
1.進一步熟悉DSP的中斷機制
2.在掌握中斷服務程式編寫的基礎上進一步熟悉定時器的運用
3.進一步掌握如何編寫DSP中斷服務子程式
二、實驗裝置
1.具有USB接口的PC機一台
2.USB仿真器一台
3.ARM/DSP/FPGA實驗箱一台
三、實驗原理
本實驗是在我們基本上掌握DSP中斷機制的基礎上,進一步學習如何在DSP内部實作定時器的正确操作以及定時器中斷服務程式的編寫。
在TMS320VC5410A中,有一個16位的硬體定時器,該定時器有一個4位的預分頻器,由CLKOUT來驅動,也就是說在CLKOUT時鐘的作用下進行遞減計數。當計數器遞減到0的時候,會産生一個定時器中斷。通過控制定時器相關寄存器,該定時器可以被停止、重新啟動、複位或禁止。
與該定時器有關的寄存器有定時計數寄存器(TIM)、定時周期寄存器(PRD)以及定時器控制寄存器(TCR)。
下面對這幾個寄存器作簡要介紹:
TIM:該寄存器是一個存儲器映射的寄存器,位址為0x0024。該寄存器中儲存了定時器目前的計數值,并且該寄存器的值會在預分頻器中的計數器遞減至0的時候遞減1。當TIM寄存器中的至遞減至0的時候,定時器複位,TIM重新加載PRD寄存器中的值,開始下一輪計數,與此同時,當該寄存器中的值遞減至0的時候,産生定時器中斷。
PRD:該寄存器是一個存儲器映射的寄存器,位址為0x0025。該寄存器用于控制定時器的周期。
TCR:該寄存器是一個存儲器映射的寄存器,位址為0x0026。該寄存器主要用于控制定時器的啟動、停止、複位以及初始化定時器的預分頻器等操作。該寄存器的具體内容如表3-1所示。
表3-1 TCR寄存器
TCR寄存器中的具體内容意義如下:
TDDR:定時器的4位預分頻器,TDDR的值為0~15。
TSS:定時器啟動/停止位。‘1’可停止定時器計數;‘0’可啟動定時器。
TRB:向該位寫入‘1’可複位定時器。
PSC:預分頻器的遞減計數器。該計數器會在CLKOUT的作用下遞減,當遞減至0的時候,TIM的值便會遞減1,同時PSC會重新加載TDDR的預分頻值。
Free:該位用來配置定時器是否工作在Soft制定的工作方式。當該位為‘0’時,標明Soft位所指定的工作模式;當該位為‘1’時,定時器将會正常運作,而不會采取Soft位所指定的工作模式。
Soft:該位用來配置定時器在遇到程式中斷時的工作方式。當該位為‘0’時,遇到中斷定時器會立即停止運作;當該位為‘1’時,定時器将會正常運作,遇到中斷定時器會在遞減到0後停止運作。
根據以上講述,可以得到DSP中定時器的中斷頻率為
fT中斷 = (fCLKOUT/(TDDR+1))/(PRD+1)
要對定時器正确配置和操作,可以通過以下步驟來實作:
1)首先通過寫TCR寄存器中的TSS位來停止寄存器。
2)初始化定時器的預分頻器TDDR。
3)初始化定時器周期PCR。
4)編寫定時器中斷服務函數。
5)在中斷向量表中相應的位置放置中斷跳轉指令,指向4)中定義的函數。
6)通過寫IFR将定時器中斷标志清零,通過寫IMR寄存器使能定時器中斷。
7)使能全局中斷INTM。
8)通過設定BSCR寄存器中的DIVFCT(見表3-2)設定CLKOUT的時鐘頻率,具體為fCLKOUT =fDSPCLK/(DIVFCT + 1)。
9)啟動定時器。
表3-2 BSCR寄存器
本實驗要完成的任務就是利用定時器中斷配合定時器中斷服務函數,學習定時器的具體使用方法。在定時器中斷服務子程式中,點亮LED和關滅LED以表示定時器工作正常,同時在CCS的消息輸出視窗輸出相應的中斷資訊。
四、實驗内容
用C語言編寫定時器實驗:兩個燈以不同頻率閃爍,并用示波器讀頻率
五、實驗步驟
第一步驟:建立項目fangbo.pjt及編寫定時中斷檔案( Timer.c,vectors.asm,c54_zzh.cmd),在對各個檔案進行編譯及運作,其檔案分别如下。
#include
#include
#include "c54xx.h"
#include "fpg