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