zstack 2.5.1a
初始化:
P1SEL &= ~0x48; //P1_6 P1_3 设置为通用IO口
P1DIR &= ~0x48; //P1_6 P1_3 设置为输入
P1INP &= ~0x48; //P1_6 P1_3 设置为上拉或下拉输入
P2INP &= ~0x40; //P1端口设置为上拉输入
IEN2 |= 0x10 ;// 开启P1中断 P1IEN |= 0x48 ;//开启P1_6 、P1_3 外部中断
PICTL |= 0x06; //P1 端口配置为下降沿触发
P1IFG &= ~0x48; //清除中断标志位
P1IF = 0;
EA = 1;
中断:
if( P1IFG&0x08 )
{
P1IFG &= ~0x08;
osal_start_timerEx( GenericApp_TaskID,
GENERICAPP_KEY_EVT,
20);
}
P1IF = 0;
Kevin Qiu1:
用示波器测P1_3电平一直处于高电平?
user6314671:
回复 Kevin Qiu1:
是的,一直高电平,debug时候 P1IFG初始化后为0x27,但是触发中断时候P1IFG 为0xEF
user6314671:
回复 Kevin Qiu1:
调试发现 执行了 P0_0 = 1 后 P1IFG 变为0xEF
P0_0 配置:P0DIR |= ( 1<<0 ); P0SEL &= ~( 1<<0 );
Kevin Qiu1:
user6314671 IEN2 |= 0x10 ;// 开启P1中断 P1IEN |= 0x48 ;//开启P1_6 、P1_3 外部中断 PICTL |= 0x06; //P1 端口配置为下降沿触发 P1IFG &= ~0x48; //清除中断标志位 P1IF = 0; EA = 1;
删了这句试试
user6314671:
回复 Kevin Qiu1:
删除以上代码后,执行到 P0_0 = 1 后 P1IFG 变为0xEB,如果开启中断还是会被触发
Kevin Qiu1:
回复 user6314671:
先单独测试下P1_3的中断,用外部中断服务函数的方式试试,中断看起来没有作用
user6314671:
回复 Kevin Qiu1:
P1_3的 中断服务函数作用是软复位系统,
因为每次开机都会执行 P0_0 = 1,导致P1IFG 对应的P1_3标志位置位,触发软复位。
Kevin Qiu1:
回复 user6314671:
if( P1IFG&0x08 ) 也就是说这个条件总是成立的,所以一直进入中断?
user6314671:
回复 Kevin Qiu1:
是的,调试发现 是因为执行了 P0_0 =1 后 P1IFG 变为0xEF,然后触发外中断
Kevin Qiu1:
回复 user6314671:
好的
TI中文支持网