Zigbee|CC2530定时器3通道1输入捕获中断
【Zigbee|CC2530定时器3通道1输入捕获中断】 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);
//启动定时器 T3T3CCTL1 &= ~(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;
//清中断标志,也可由硬件自动完成
}
}
推荐阅读
- 芯灵思SinlinxA33开发板Linux内核定时器编程
- STM32F4|STM32F4 TIM6 TIM7 基本定时器
- 闭包-定时器-BOM
- 全志A33开发板Linux内核定时器编程
- javascript|javascript--21--定时器
- 点击其他界面清除定时器,返回启动定时器
- STM32 CUbeIDE 定时器中断使用
- Golang(定时器的终止与重置)
- Boost中ASIO的一些用法-定时器
- 用boost的asio+deadline_timer实现一个循环定时器