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