共用中断线,中断服务子函数不能判断中断源的BUG

2019-07-20 23:46发布

今天发现外部中断同一个中断服务子函数不能判断中断源。如下面所示,假设发生了line9中断,line5处理函数1也会执行,假设发生了line9中断,处理函数2也会执行。void EXTI9_5_IRQHandler(void)//中断服务函数,如果中断线是5-9。
{
        if(EXTI_GetITStatus(EXTI_Line5) != RESET)
        {
                处理函数1
                EXTI_ClearITPendingBit(EXTI_Line5);     
        }  

        if(EXTI_GetITStatus(EXTI_Line9) != RESET)
        {
                处理函数2
                EXTI_ClearITPendingBit(EXTI_Line9);     
        }
}       
库函数里面清中断标志函数,只会把对应中断标志置1来清除对应中断,所以我觉得应该是假如上一次发生了对应中断,下一次该标志位还是置位,所以即使线中断没有发生,对应处理函数还是会执行。

void EXTI_ClearITPendingBit(uint32_t EXTI_Line)
{
  /* Check the parameters */
  assert_param(IS_EXTI_LINE(EXTI_Line));

  EXTI->PR = EXTI_Line;
}

不知道大家有没有遇到过这样的问题
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。