STM32中断问题:if(EXTI_GetITStatus(EXTI_Line5)==SET)这句话如何理解?
我的中断方式是下降沿触发,上面的那句话是检查中断触发与否,为什么=SET就能检查出来了呢?如果我把这句话改为if(EXTI_GetITStatus(EXTI_Line5)...
我的中断方式是下降沿触发,上面的那句话是检查中断触发与否,为什么=SET就能检查出来了呢?如果我把这句话改为if(EXTI_GetITStatus(EXTI_Line5)==RESET)时,又该如何理解呢?
展开
2个回答
展开全部
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line)
{
ITStatus bitstatus = RESET;
uint32_t enablestatus = 0;
/* Check the parameters */
assert_param(IS_GET_EXTI_LINE(EXTI_Line));
enablestatus = EXTI->IMR & EXTI_Line; //1
if (((EXTI->PR & EXTI_Line) != (uint32_t)RESET) && (enablestatus != (uint32_t)RESET)) //2
{
bitstatus = SET;
}
else
{
bitstatus = RESET;
}
return bitstatus;
}
由这个函数本身可以看出,//1处屏蔽EXTI_Line5之外的外部中断;//2处看EXTI->PR挂起寄存器中EXTI_Line5对应的位是否置1(不等于RESET说明置1),置1说明发生了选择的触发请求,然后函数返回SET,你一判断SET了,说明中断发生了。相反==RESET说明中断没有发生。
{
ITStatus bitstatus = RESET;
uint32_t enablestatus = 0;
/* Check the parameters */
assert_param(IS_GET_EXTI_LINE(EXTI_Line));
enablestatus = EXTI->IMR & EXTI_Line; //1
if (((EXTI->PR & EXTI_Line) != (uint32_t)RESET) && (enablestatus != (uint32_t)RESET)) //2
{
bitstatus = SET;
}
else
{
bitstatus = RESET;
}
return bitstatus;
}
由这个函数本身可以看出,//1处屏蔽EXTI_Line5之外的外部中断;//2处看EXTI->PR挂起寄存器中EXTI_Line5对应的位是否置1(不等于RESET说明置1),置1说明发生了选择的触发请求,然后函数返回SET,你一判断SET了,说明中断发生了。相反==RESET说明中断没有发生。
2015-07-19
展开全部
中断线是否被挂起(不为0)。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询