概述
1、边沿触发
边沿触发包括上升沿触发和下降沿触发,边沿触发检测的是电平变化,高电平转低电平或低电平转高电平时,触发一次中断。
边沿沿触发是锁存中断信号的,由D触发器记忆,即:若CPU来不及响应中断,外部中断信号撤消后,由于D触发器的记忆作用,消失的中断信号仍然有效,直到中断被响应并进入中断ISR,记忆的中断信号才会由硬件自动清除。
2、电平触发
电平触发分为高电平触发和低电平触发;电平触发需要手动清除中断信号
电平触发根据硬件设计的不同,分为即时触发和信号锁存触发;
(1)即时的电平触发,当外部中断信号撤消时,中断申请信号随之消失。如果在外部中断信号申请期间,CPU来不及响应此中断,那么有可能这次中断申请就漏掉了。
即时的电平触发是一个时间段,需要一直触发中断的,就用电平触发。比如高电平触发,只要检测到是高电平就触发中断。
(2)信号锁存的电平触发,当检测到高电平或低电平信号,该触发信号也会被锁存,类似于边沿触发,但是触发信号需要进行手动清除;
3、边沿触发及电平触发的区别
如果是采用边沿检测外部中断,检测到电平变化会中断,但是如果中断检测口一直保持某一电平,则无法产生下次中断,需要等下次检测到电平变化才会中断。中断得到响应后由硬件自动清除。
如果是采用电平检测外部中断,检测到低/高电平会中断,但是如果中断检测口一直保持低电平,中断处理完成后,会继续产生下次中断,需要检测到高电平才会停止中断产生。中断得到响应后由硬件手动清除。
验证:msm8909上,gpio中断的对应寄存器TLMM_GPIO_INTR_STATUSn
The GPIO_INTR_STATUS[n] indicates the status of the summary interrupt for GPIO[n].
When read it returns the status for the interrupt on GPIO[n]. When written with a 1 in this position, it sets the interrupt for GPIO[n]. When it is written with a 0, it clears the interrupt.
实际发现对于边沿中断而言:
- 大部分情况下,中断一旦触发就被处理,所以寄存器的值都为0
- 先通过disable_irq屏蔽一个gpio边沿中断,再触发这个中断,可以发现这个状况下,寄存器的值keep为1,然后通过enable_irq打开这个中断,中断处理将被调用。
- 先验证寄存器的值在常态下为0,然后手动写入1,发现中断处理被执行
- 问题:先通过disable_irq屏蔽一个gpio边沿中断,再触发这个中断,寄存器的值变为1,然后手动写入0,验证成功写入,enable_irq打开中断,中断处理也被调用了。所以寄存器描述里的写0可以清楚中断这件事,我暂时很怀疑,但是手边的资料没有找到更多关于高通中断寄存器相关的,有了解的朋友也可以和我分享下
最后
以上就是和谐日记本为你收集整理的边沿触发与电平触发的区别的全部内容,希望文章能够帮你解决边沿触发与电平触发的区别所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复