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; //清中断标志,也可由硬件自动完成
}
}