边沿触发与电平触发的区别

14 篇文章 1 订阅
6 篇文章 0 订阅

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.

实际发现对于边沿中断而言:

  1.  大部分情况下,中断一旦触发就被处理,所以寄存器的值都为0
  2. 先通过disable_irq屏蔽一个gpio边沿中断,再触发这个中断,可以发现这个状况下,寄存器的值keep为1,然后通过enable_irq打开这个中断,中断处理将被调用。
  3. 先验证寄存器的值在常态下为0,然后手动写入1,发现中断处理被执行
  4. 问题:先通过disable_irq屏蔽一个gpio边沿中断,再触发这个中断,寄存器的值变为1,然后手动写入0,验证成功写入,enable_irq打开中断,中断处理也被调用了。所以寄存器描述里的写0可以清楚中断这件事,我暂时很怀疑,但是手边的资料没有找到更多关于高通中断寄存器相关的,有了解的朋友也可以和我分享下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值