你好,期望的功能,一段脉冲输入到2530的P1.7脚,用定时器3的通道1去捕获,
上下边沿都捕获,捕获周期1us,把测量的脉冲宽度存到数组里,然后分析,请问如下的代码有什么问题?
数组里测量的时间和示波器测量的不符合,请帮忙分析一下原因,谢谢!
void irCaptureGpioInit(void)
{
P1SEL |= 0x80;
P1DIR &= ~0x80;
P1_7 = 1;
PERCFG |= 0x20;//定时器3的备用位置2,必须设置
P2SEL |= 0x20;//设置定时器3优先
//P1IEN |= 0x80;
}
void timer3CaputureInit(void)
{
T3CTL &= 0x00; //T3溢出中断屏蔽
T3CTL |= 0xA0; //标记频率/32 1MHz
T3CTL |= 0x04; //清除计数器
T3CTL |= 0x08; //溢出中断使能
T3CTL |= 0x10; //启动定时器T3
T3CCTL1 &= ~0x04; //捕获模式
T3CCTL1 |= 0x03; //上升、下降沿都捕获
T3CCTL1 |= 0x40; //T2的通道1中断使能
IRCON = 0; //清除中断标志
//IEN1 |= 0x08; //T3中断使能
T3IE = 1; //使能定时器3中断
//IEN0 |= 0x80;//使能所有中断
}
void timer3CaptureConfig(void)
{
irCaptureGpioInit();
timer3CaputureInit();
}
__interrupt void T3_ISR(void)
{
unsigned char a;
if(TIMIF & (~0xFB)) //边沿触发中断
{
a = T3CC1;
if(a > 5
{
rec1[signle++] = T3CC1;
//setFlag = 1;
}
T3CC1 = 0;
IRCON = 0x00; //清中断标志,也可由硬件自动完成
}
if(TIMIF & (~0xFE)) //溢出中断
{
/*if(setFlag)
{
signle = 0;
setFlag = 0;
}*/
IRCON = 0x00; //清中断标志,也可由硬件自动完成
}
}
