您好!
我正在使用 cc2533进行红外学习。 但我没有成功捕获任何数据…
我的 IR_IN 位于端口1引脚0上。
以下是我的初始化代码:
"
void initIR_Reception (void)(空)
{
//外设 I/O 控制
PERCFG |= 0x40;//P1.1 Timer1替代方法2
//第一优先级:定时器1通道0-1
P2DIR!= 0x80;
P2DIR &=~0x40;
//端口1功能选择
P1SEL |= BV (0);//外设
//端口1方向寄存器
P1DIR &=~(0x01);
//将定时器1的通道1设置为捕获模式4
T1CCTL1 |= BV (6);//在定时器1通道1上启用中断
T1CCTL1 &=~BV (2);//捕捉模式
T1CCTL1 |= BV (1)|BV (0);//在所有边沿上进行捕捉
P1IEN |= BV (0);//在 P1_1处启用中断
T1IE =1;
//清除计时器
//这将激活输出引脚,以便立即启动计时器。
T1CNTL = 0;
//防止睡眠
OSAL_pwrmgr_task_state (hal_taskID、1);
//(void) osal_set_event (hal_taskID、HAL_PWRMGR_HOLD_event);
//(void) osal_set_event (hal_taskID、HAL_PWRMGR_SAVE_EVENT);
}
”
我在进入 osal_start_system()之前调用此函数。
当出现中断时,应该调用 halProcessIrInterrupt()。
"
HAL_ISR_function (halKeyPort1Isr、P1INT_vector)
{
HAL_ENTER_ISR ();
disableKeypadInt();
if (((P1IFG & HAL_KEY_P1_INTERRUPT_Pins)!= 0x00)
{
halProcessKeyInterrupt();
#if HAL_KEY
//清除中断标志
P1IFG=(uint8)(~HAL_key_p1_interrupt_pins);//清除中断标志
P1IF=0x00;
#endif
}
否则(((P1IFG & HAL_IR_P1_INTERRUPT_Pins)!= 0x00)
{
halProcessIrInterrupt();
#if HAL_IR
P1IFG =(uint8)(~HAL_IR_P1_INTERRUPT_Pins);
P1IF = 0;
#endif
//T1STAT =~0x02;//清除计时器1通道1
}
//清除中断标志
P1IFG=0x00;
P1IF=0x00;
HAL_EXIT_ISR();
}
"
但它根本不起作用。
有人可以帮我吗?
提前感谢 您!