|
C55x DSP片內有兩個2通用定時器,利用定時器可向CPU產生周期性中斷或向DSP片外的器件提供周期信號。其中TMS320VC5503/5507/5509/5510 DSP提供的是2個20位通用定時器.
1 結構框圖
20位的定時器由兩部分組成:一個4位的預定標器(PSC)和一個16位的主計數器(TIM)。
定時器有兩個計數寄存器(PSC,TIM)和兩個周期寄存器(TDDR,PRD),在定時器初始化過程中,周期寄存器的內容拷貝到計數寄存器中。
2 工作原理
定時器的工作時鐘可以來自DSP內部的CPU時鐘,也可以來自引腳TIN/TOUT。
定時器控制寄存器(TCR)中的字段FUNC可以確定時鐘源和TIN/TOUT引腳的功能,這樣定時器的工作模式包括以下幾種:
當FUNC=00b時,TIN/TOUT為高阻態,時鐘源是內部時鐘(CPU時鐘)。
當FUNC=01b時,TIN/TOUT為定時器輸出,時鐘源是內部時鐘(CPU時鐘)。
當FUNC=10b時,TIN/TOUT為通用輸出,時鐘源是內部時鐘(CPU時鐘)。
當FUNC=11b時,TIN/TOUT為定時器輸入,時鐘源是外部時鐘。
在定時器中,預定標器由輸入時鐘驅動,PSC在每個輸入時鐘周期減1,當其減到0時,TIM減1,當TIM減到0,定時器向CPU發送一個中斷請求(TINT)或向DMA控制器發送同步事件。定時器發送中斷信號或同步事件信號的頻率可用下式計算:
TINT頻率 = 輸入時鐘頻率 / (TDDR + 1) * (PRD+1)
通過設置TCR中的自動重裝控制位ARB,可使定時器工作于自動重裝模式,當TIM減到0,重新將周期寄存器(TDDR,PRD)的內容拷貝到計數寄存器(PSC,TIM)中,繼續定時。
每個定時器包括4個寄存器,即定時器預定標寄存器PRSC、主計數寄存器TIM、主周期寄存器PRD和定時器控制寄存器TCR。
3 使用方法
在定時器的工作過程中,要注意以下因素對定時器的影響。
1.初始化定時器
通用定時器的初始化過程如下:
(1)停止計時(TSS=1),定時器裝載使能(TLB=1), 并將周期寄存器(TIM,PSC)的內容拷貝到計數寄存器(PRD,TDDR);
(2)將預定標計數周期數寫入TDDR;
(3)將主計數器周期數裝入PRD;
(4)關閉定時器裝載(TLB=0),啟動計時(TSS=0)。
2.停止/啟動定時器
利用時鐘控制寄存器中的TSS位可以停止或啟動定時器。
TSS=1,停止計時
TSS=0,啟動計時
3.DSP復位
DSP復位后定時器的寄存器將按照如下規則復位:
l停止定時(TSS=1);
預定標計數器值為0;
主計數器值為FFFFh;
定時器不進行自動重裝(ARB=0);
idle指令不能使定時器進入省電模式;
仿真時遇到軟件斷點定時器立即停止工作;
TIN/TOUT為高阻態,時鐘源是內部時鐘(FUNC=00b)。
4 通用定時器的應用
如果使用芯片支持庫函數對通用定時器進行編程,則必須包含頭文件csl_timer.h。
首先定義通用定時器句柄和配置結構:
TIMER_Handle hTimer;
TIMER_Config Config_TIMER = {
0X0310,
/*; 載入 TCR0t:
; IDLE_EN = 0 (不允許空閑狀態)
; FUNC = 00b (引腳為高阻態)
; TLB = 0 (TLB 被清除)
; FREE = 1 (遇到斷點時時鐘不停止)
; PWID = 00b (脈沖延遲一個 CPU 時鐘周期)
; ARB = 1 (當TIM計數到0時重新載入TIM和
; PSC)
; TSS = 1 (停止計數器)
; C/P = 0 (引腳輸出為脈沖模式)
; POLAR = 0 (引腳信號開始為低)
; 其他為0
*/
0X197,
/* prd = 407 */
0X0007
/* prsc = 7 TDDR=7 */
//; 計數器每 3264(408*8) 個時鐘周期輸出:
};
接下來打開句柄:
hTimer = TIMER_open(TIMER_DEV0,0);//設置計數器0,中斷20K/s
調用定時器配置函數對計數器初始化:
TIMER_config(hTimer,&Config_TIMER);
調用定時器開始函數使定時器開始工作:
TIMER_start(hTimer);
如果在程序中需要暫時停止定時器計數可以調用定時器停止函數:
TIMER_stop(hTimer);
當使能定時器中斷時,則當定時中斷發生時將運行定時中斷服務程序:
interrupt void Timer0_Isr()
{
……
}
5 通用定時器的調試
通用定時器可以產生定時中斷,或者作為DMA同步事件來同步DMA傳送,如果將通用定時器的輸出從通用定時器引腳引出,也可以為系統的其他部分提供定時。
通用定時器的調試步驟如下:
設定通用定時器的時鐘源,通用定時器的時鐘源可以是CPU時鐘,也可由外部信號提供,如果選擇外部時鐘,則需要將這個信號從TIN/TOUT引腳引入,應當注意此時TIN/TOUT引腳將不能夠作為定時器輸出使用;
正確設置定時器寄存器值,使定時器開始工作;
在定時器中斷服務程序中設置斷點,看能否進入定時中斷,如果定時器的時鐘源是CPU時鐘,這時也可以將定時器信號從TIN/TOUT引腳輸出,通過示波器檢測定時器輸出是否正常
|
|