使用定时器捕获输入脉冲(来自于红外遥控器)时长,初始设置如下:
TMR0_CapInit(Edge_To_Edge);
TMR0_CAPTimeoutCfg(1000 * (g_sys_clock_hz/1000));
TMR0_ITCfg(ENABLE, TMR0_3_IT_DATA_ACT); // 开启中断
PFIC_EnableIRQ(TMR0_IRQn);
在中断函数中先TMR0_ClearITFlag( TMR0_3_IT_DATA_ACT ),然后使用TMR0_CAPGetData()读取数据。
经过多次测试,按下一次遥控按键后,前60个左右的Edge_To_Edge边沿变化可以正常捕获(包括NEC红外引导码在内的数据都正确),但到60个(或62个,64个,似乎与脉冲所代表的数据有关)时,不再产生中断。间隔任意时长后,再次按下遥控按键时,中断再次产生,前一次按键未接收完的数据会首先被接收到(完整的红外数据帧应该产生差不多67个中断),之后才是第二次按键自己的数据。但前一次按键的第60个Edge_To_Edge边沿变化的捕获时长是一个非常大的值,明显超出了红外脉冲编码的范围。
请帮忙看一下以上捕获代码是否有问题,为什么在接收到60个左右的边沿变化后就不再产生中断了?