CC2530的T3定時器(8位)需要了解T3CTL,T3CCTL0,T3CC0,T3CCTL1,T3CC寄存器.定時器3/4是8位定時器,具有定時器/計數(shù)器/PWM功能。
定時器2又稱MAC定時器,是專門為支持IEEE 802.15.4 MAC 中的事件跟蹤協(xié)議而特別設(shè)計的。該定時器具有一個可以用來記錄已經(jīng)發(fā)生的周期數(shù)的8位溢出計數(shù)器;有一個16位捕獲寄存器,用來記錄一個幀開始定界符接收/發(fā)送的精確時間或者傳輸完成的精確時間;還含有一個16位輸出比較寄存器,用來在特定時間對無線模塊產(chǎn)生各種命令選通信號(開始接受,開始發(fā)送等)。關(guān)于定時器2,想了解的話可以參看有關(guān)資料。
有沒有發(fā)現(xiàn)只要寄存器配置對了剩下的就沒什么問題了。
T3CTL(0XCB)的作用是定時器 3 的控制和狀態(tài)
Bit[7:5] : 定時器時鐘分頻倍數(shù)選擇:
000:不分頻 001:2 分頻 010:4 分頻
011:8分頻 100:16 分頻 101:32分頻
110:64 分頻 111:128 分頻
Bit4 : T3 起止控制位
Bit3 : 溢出中斷掩碼 0:關(guān)溢出中斷 1:開溢出中斷
Bit2 : 清計數(shù)值 高電平有效
Bit[1:0] T3模式選擇
00:自動重裝 0x00-0xFF
01: DOWN (從T3CC0 到0X00計數(shù)一次)
10: 模計數(shù)(反復(fù)從 0X00到T3CC0 計數(shù))
11 : UP/DOWN(反復(fù)從0X00到T3CC0 計數(shù)再到0X00)
T3CCTL0(0xCC) 是 T3 通道 0 捕獲/ 比較控制寄存器
Bit6: 通道0 中斷屏蔽 0:中斷禁止 1:中斷使能
Bit[5: 3] T3 通道 0 比較輸出模式選擇
Bit2: T3 通道 0 模式選擇: 0:捕獲 1 :比較
Bit[1:0] T3 通道 0 捕獲模式選擇
00 沒有捕獲 01 上升沿捕獲10 下降沿捕獲 11 邊沿捕獲
T3CC0(0xCD) 為定時器 3 通道 0捕獲/比較值
定時器捕獲/比較值通道 0。當 T3CCTL0.MODE=1(比較模式)時寫該寄存器會導(dǎo)致 T3CC0.VAL[7:0]更新到入值延遲到 T3CNT.CNT[7:0]=0x00。
T3CCTL1(0xCE)為T3 通道 1 捕獲/ 比較控制寄存器
Bit6: 通道1中斷屏蔽 0:中斷禁止 1:中斷使能
Bit[5: 3] T3 通道1 比較輸出模式選擇
Bit2: T3 通道 1 模式選擇: 0:捕獲 1 :比較
Bit[1:0] T3 通道 1 捕獲模式選擇00 沒有捕獲 01 上升沿捕獲
10 下降沿捕獲 11 邊沿捕獲
T3CC1(0xCF) 定時器 3 通道 1捕獲/比較值
定時器捕獲/比較值通道 1。當 T3CCTL1.MODE=1(比較模式)時寫該寄存器會導(dǎo)致 T3CC1.VAL[7:0]更新寫入值延遲到 T3CNT.CNT[7:0]=0x00。
對 T3 進行配置如下,由于定時器 T3 為8位所以配置稍有不同。
T3CTL |= 0x08 ; //開溢出中斷
T3IE = 1; //開總中斷和 T3 中斷
T3CTL |= 0xE0; //128 分頻,128/16000000*N=0.5S,N=62500
T3CTL &= ~0x03; //自動重裝 00->0xff 62500/255=245(次)
T3CTL |= 0x10; //啟動
EA = 1; //開總中斷
/****************************************************************************
* 描 述: 定時器T3通過中斷方式控制LED閃爍
****************************************************************************/
#include
typedef unsigned char uchar;
typedef unsigned int uint;
#define LED1 P1_0 // P1.0口控制LED1
uint count; //用于定時器計數(shù)
/****************************************************************************
* 名 稱: InitLed()
* 功 能: 設(shè)置LED燈相應(yīng)的IO口
* 入口參數(shù): 無
* 出口參數(shù): 無
****************************************************************************/
void InitLed(void)
{
P1DIR |= 0x01; //P1.0定義為輸出
LED1 = 1; //使LED1燈上電默認為熄滅
}
/****************************************************************************
* 名 稱: InitT3()
* 功 能: 定時器初始化,系統(tǒng)不配置工作時鐘時默認是2分頻,即16MHz
* 入口參數(shù): 無
* 出口參數(shù): 無
****************************************************************************/
void InitT3()
{
T3CTL |= 0x08 ; //開溢出中斷
T3IE = 1; //開總中斷和T3中斷
T3CTL |= 0xE0; //128分頻,128/16000000*N=0.5S,N=62500
T3CTL &= ~0x03; //自動重裝 00->0xff 62500/255=245(次)
T3CTL |= 0x10; //啟動
EA = 1; //開總中斷
}
//定時器T3中斷處理函數(shù)
#pragma vector = T3_VECTOR
__interrupt void T3_ISR(void)
{
IRCON = 0x00; //清中斷標志, 也可由硬件自動完成
if(count++ > 244) //245次中斷后LED取反,閃爍一輪(約為0.5 秒時間)
{ //經(jīng)過示波器測量確保精確
count = 0; //計數(shù)清零
LED1 = ~LED1; //改變LED1的狀態(tài)
}
}
/****************************************************************************
* 程序入口函數(shù)
****************************************************************************/
void main(void)
{
InitLed(); //設(shè)置LED燈相應(yīng)的IO口
InitT3(); //設(shè)置T3相應(yīng)的寄存器
while(1)
{};
}