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

2530中断

协议栈:mesh1.0.0

芯片:2530

问题:请问我配置了P1_2引脚下降沿中断,程序不断进入中断是什么原因?测试时在中断函数内部打断点,发现能进入,但是不断重复进入。中断代码如下,求解谢谢。

HAL_ISR_FUNCTION( halKeyPort1Isr, P1INT_VECTOR )
{HAL_ENTER_ISR();if (HAL_KEY_DoorSW_PXIFG & HAL_KEY_DoorSW_BIT){halProcessKeyInterrupt();}if (HAL_KEY_Power_PXIFG & HAL_KEY_Power_BIT)// P1_2引脚为 power_key{halProcessKeyInterrupt();}/*Clear the CPU interrupt flag for Port_1PxIFG has to be cleared before PxIF*/HAL_KEY_DoorSW_PXIFG = 0;HAL_KEY_Power_PXIFG = 0;HAL_KEY_CPU_PORT_1_IF = 0;CLEAR_SLEEP_MODE();HAL_EXIT_ISR();
}
void halProcessKeyInterrupt (void)
{bool valid=FALSE;if (HAL_KEY_DoorSW_PXIFG & HAL_KEY_DoorSW_BIT)  /* Interrupt Flag has been set */{HAL_KEY_DoorSW_PXIFG = ~(HAL_KEY_DoorSW_BIT); /* Clear Interrupt Flag */valid = TRUE;}if (HAL_KEY_SW_5_PXIFG & HAL_KEY_SW_5_BIT)  /* Interrupt Flag has been set */{HAL_KEY_SW_5_PXIFG = ~(HAL_KEY_SW_5_BIT); /* Clear Interrupt Flag */valid = TRUE;}if (HAL_KEY_Power_PXIFG & HAL_KEY_Power_BIT)  /* Interrupt Flag has been set */{HAL_KEY_Power_PXIFG &= ~(HAL_KEY_Power_BIT); /* Clear Interrupt Flag */
//HAL_KEY_Power_PXIFG =0; /* Clear Interrupt Flag */valid = TRUE;}if (valid){osal_start_timerEx (Hal_TaskID, HAL_KEY_EVENT, HAL_KEY_DEBOUNCE_VALUE);}
}

user6069081:

而且当IO口处在低电平的时候,也能不断触发中断。求解啊各位大佬

YiKai Chen:

回复 user6069081:

檢查看看是否是其他P1的腳位造成的觸發

Susan Yang:

请问您在程序中
if (HAL_KEY_DoorSW_PXIFG & HAL_KEY_DoorSW_BIT){halProcessKeyInterrupt();}

这一个对应是哪个引脚?

您现在主要应用了几个IO中断?

user6069081:

回复 Susan Yang:

一共用了三个引脚,都为中断模式,分别为P0_5,P1_2(HAL_KEY_Power_BIT),P1_3(HAL_KEY_DoorSW_BIT),问题是P1_2(HAL_KEY_Power_BIT)引脚会不断触发中断,求解,万分感谢

YiKai Chen:

回复 user6069081:

触发中断的時候看一下P1IFG的值確認是誰触发中断

user6069081:

回复 YiKai Chen:

Dear YK ,由于你说的可能有其他的P1口的干扰,现在我换成了P0_7引脚,问题仍旧,我在调试的时候查看寄存器发现P0IFG的第七位在进入中断的时候并且位于低电平的时候,该中断标志位不能清零,并且不断进入中断,而当P0_7位于高电平的时候,该中断标志位可以清零,并且跳出了中断,请问这是什么原因呢,调试图以及代码如下

/* Power_key is at P0.7 */
#define HAL_KEY_Power_PORT P0
#define HAL_KEY_Power_BITBV(7)
#define HAL_KEY_Power_SELP0SEL
#define HAL_KEY_Power_DIRP0DIR#define HAL_KEY_Power_EDGEBITBV(0)
#define HAL_KEY_Power_EDGEHAL_KEY_FALLING_EDGE#define HAL_KEY_Power_IENIEN1/* CPU interrupt mask register */
#define HAL_KEY_Power_IENBITBV(5) /* Mask bit for all of Port_0 */
#define HAL_KEY_Power_ICTLP0IEN /* Port Interrupt Control register */
#define HAL_KEY_Power_ICTLBITBV(7) /* P1IEN - P1.5 enable/disable bit */
#define HAL_KEY_Power_PXIFGP0IFG /* Interrupt flag at source */

YiKai Chen:

回复 user6069081:

halProcessKeyInterrupt是不管P0/P1/P2來的中断触发都會進去,所以你可以看到你P0IF_7/P1IF_4/P1IF_1都有触发;中断标志位不能清零是指你P0IF_7無法清除為0嗎?

user6069081:

回复 YiKai Chen:

是的,只要进入了中断之后,并且P0_7为低电平的情况下,就无法清除P0IF_7;为高电平则可以清除P0IF_7标志位。请问我程序有错误吗?

YiKai Chen:

回复 user6069081:

試試 用 "P0IFG &= ~(BV(7));"

user6069081:

回复 YiKai Chen:

似乎还是不行,为何直接操控寄存器没有反应呢?

赞(0)
未经允许不得转载:TI中文支持网 » 2530中断
分享到: 更多 (0)