TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2530 P1_3设置为下降沿外部中断后,在外部一直高电平情况下会被莫名触发。

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:

好的

赞(0)
未经允许不得转载:TI中文支持网 » CC2530 P1_3设置为下降沿外部中断后,在外部一直高电平情况下会被莫名触发。
分享到: 更多 (0)