21ic电子技术开发论坛

标题: 关于EXTI_GetITStatus的问题 [打印本页]

作者: fql19931128    时间: 2016-6-18 10:17
标题: 关于EXTI_GetITStatus的问题
void EXTI0_IRQHandler()
{       
        if(EXTI_GetITStatus(EXTI_Line0)==SET)                //读取中断标志位
        {
                EXTI_ClearITPendingBit(EXTI_Line0);               
                delay_ms(10);                                                                       
                if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==Bit_SET)       
                {
                        LED_Display();
                }
                while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==Bit_SET);
        }       
}
进入了中断为什么还要读取标志位

作者: popeye021    时间: 2016-6-19 20:08
很多时候一个中断向量对应了好几个中断,所以读一下中断标志位,确认中断

作者: popeye021    时间: 2016-6-19 20:10
你这个应该是中断方式读取按键信号的demo程序,正式使用不会在中断处理程序里用硬延时

作者: fql19931128    时间: 2016-6-20 16:45
popeye021 发表于 2016-6-19 20:10
你这个应该是中断方式读取按键信号的demo程序,正式使用不会在中断处理程序里用硬延时 ...

谢谢指教,我是初学者,那在中断里应该怎么延时呢

作者: Rangar    时间: 2016-6-20 22:03
什么叫硬延时

作者: popeye021    时间: 2016-6-21 08:47
fql19931128 发表于 2016-6-20 16:45
谢谢指教,我是初学者,那在中断里应该怎么延时呢

一般采用定时器延时,延时的时候mcu还可以执行其他的程序。你随便搜索一下按键扫描程序就有了。
采用mcu强制等待延时的一般是教学demo,或者系统实时性实在不高的时候采用的。

作者: popeye021    时间: 2016-6-21 08:48
Rangar 发表于 2016-6-20 22:03
什么叫硬延时

就是mcu强制等待的延时方式,好像是在哪看到的说法,我就沿用了,可能说法不规范吧。

作者: bbapple    时间: 2016-6-21 14:09
读取中断标志位没是怎么问题呀。。。。

作者: fql19931128    时间: 2016-6-27 16:12
popeye021 发表于 2016-6-21 08:47
一般采用定时器延时,延时的时候mcu还可以执行其他的程序。你随便搜索一下按键扫描程序就有了。
采用mcu ...

那用systick可以吗

作者: popeye021    时间: 2016-6-27 16:44
fql19931128 发表于 2016-6-27 16:12
那用systick可以吗

可以

作者: dongnanxibei    时间: 2016-6-28 10:05
读取标志位才知道具体是哪个中断,而中断入口是包含多个并列管脚的。

作者: dongnanxibei    时间: 2016-6-28 10:05
不仅要读,而且还有关闭中断,清理标志位,读出来后,执行对应的操作,最后清理,退出钱恢复中断。





欢迎光临 21ic电子技术开发论坛 (https://bbs.21ic.com/)