下面是我的中断函数
u8 TIM5CH1_CAPTURE_STA=0;
u16 Dval;
u32 RmtRec=0; //红外接收到的数据
static u8 IR_rece_Flag;
void TIM5_IRQHandler(void)
{
u16 tsr;
static u8 bitnum=0;
tsr=TIM5->SR;
if(tsr&(1<<2))
{
if((TIM5CH1_CAPTURE_STA&0x40)==0)
{
// printf("上升沿\r\n");
Dval=0;
TIM5CH1_CAPTURE_STA|=0X40;
TIM5->CNT=0;
TIM5->CCER|=1<<5; //下降沿
}
if(TIM5CH1_CAPTURE_STA&0x40)
{
// printf("下降沿\r\n");
Dval=TIM5->CCR2;
TIM5->CCER&=~(1<<5);
TIM5CH1_CAPTURE_STA&=~0x40; //清除收到上升沿标志
if(TIM5CH1_CAPTURE_STA&0X20)//接收到了引导码
{
if(Dval>300&&Dval<800) //560为标准值,560us
{
RmtRec<<=1; //左移一位.
RmtRec|=0; //接收到0
}else if(Dval>1400&&Dval<1800) //1680为标准值,1680us
{
RmtRec<<=1; //左移一位.
RmtRec|=1; //接收到1
}
if((++bitnum) >= 33) //一帧数据含有32位码
{
bitnum = 0;
TIM5CH1_CAPTURE_STA=0;
IR_rece_Flag = 1; //一帧数据接收完毕,置位接收成功标志
}
}
else if(Dval>4200&&Dval<4700) //4500为标准值4.5ms
{
TIM5CH1_CAPTURE_STA|=0x20; //标记成功接收到了引导码
bitnum = 0;
// printf("成功接收引导码");
}
}
}
TIM5->SR=0;//清除中断标志位
}
在这个中断函数读出来的结果都是0,各位大神看一下,谢谢。
|