CC2530定時器3通道1輸入捕獲中斷
使用的是tim3的通道1的輸入捕獲P1_7口。
//GPIO配置成複用功能,同時設定P1_7為輸入。
//Capture.c
static void Init_CaptureGPIO(void)
{
P1SEL |= (1<<7); //複用功能
P1DIR &= ~(1<<7); //設定 GPIO 口為輸入
P1_7 = 1;
PERCFG |= (1<<5); //定時器3的備用位置2,必須設定
P2SEL |= (1<<5); //定時器3優先
}
static void Init_Timer3(void)
{
T3CTL = 0X00; //T3溢出中斷屏蔽
T3CTL |= (1<<7); //16分頻 - 1MHz
T3CTL |= (1<<2); //清除計數器
T3CTL |= (1<<3); //溢出中斷使能
T3CTL |= (1<<4); //啟動定時器 T3
T3CCTL1 &= ~(1<<2); //捕獲模式
T3CCTL1 |= 0X03; //兩個下降沿都捕獲
T3CCTL1 |= (1<<6); //使能通道1中斷
IRCON = 0; //清除中斷标志
T3IE = 1; //使能定時器3中斷
}
void Init_Timer3Caputure(void)
{
Init_CaptureGPIO();
Init_Timer3();
}
//main.c
#pragma vector = T3_VECTOR //定時器3
__interrupt void T3_ISR(void)
{
unsigned char a;
if(TIMIF & (~0xFB)) //邊沿觸發中斷
{
a = T3CC1;
if(a > 18 && a < 40)
{
rec1[signle++] = T3CC1;
setFlag = 1;
}
T3CC1 = 0;
IRCON = 0x00; //清中斷标志,也可由硬體自動完成
}
if(TIMIF & (~0xFE)) //溢出中斷
{
if(setFlag)
{
signle = 0;
setFlag = 0;
}
IRCON = 0x00; //清中斷标志,也可由硬體自動完成
}
}