Cortex-A7的GIC(通用中断控制器):边沿触发和电平触发中断处理流程

0 资料

ARM® Generic Interrupt Controller Architecture version 2.0 Architecture Specification

1 边沿触发和电平触发中断处理流程

1.0 边沿触发和电平触发的区别

边沿触发(Edge-triggered)

This is an interrupt that is asserted on detection of a rising edge of
an interrupt signal and then, regardless of the state of the signal,
remains asserted until it is cleared by the conditions defined by this
specification.

当检测到中断上升沿信号时会保持asserted状态(挂起状态),无论此后该中断信号如何变化都会保持asserted状态(挂起状态),直到按照GIC指定的操作将中断清除。
电平触发(Level-sensitive)

This is an interrupt that is asserted whenever the interrupt signal level is active, and deasserted whenever the level is not active.

当中断信号处于有效状态时中断处于asserted状态(挂起状态),当该信号处于无效状态(例如清空中断标志)则该中断会变为未激活状态。

asserted状态参考如下:
在这里插入图片描述

1.1 边沿触发中断处理流程

边沿触发的中断处理状态机转换图如下红色路径所示:
在这里插入图片描述
对应的处理示意图如下:
在这里插入图片描述
处理步骤如下:
(1)中断源发出中断信号,上升沿触发使中断从未激活状态转为挂起状态
(2)进入ISR(中断服务函数)读取GICC_IAR(中断确认寄存器)使中断从挂起状态转为激活状态,SPI电平转为低电平,.接下来便执行中断相对应的回调函数
(3)回调函数执行完毕后写GICC_EOIR(中断结束寄存器)进入未激活状态。注意:在GICv2 中只要对GICC_EOIR进行了有效写入就会自动将对应的中断停用(不再需要设置GICC_DIR中断停用寄存器)。

1.2 电平触发中断处理流程

电平触发的中断处理状态机转换图如下红色路径所示:
在这里插入图片描述
对应的处理示意图如下:
在这里插入图片描述
处理步骤如下:
(1)中断源发出高电平信号,使中断从未激活状态转为挂起状态
(2)进入ISR(中断服务函数)读取GICC_IAR(中断确认寄存器)使中断从挂起状态转为激活及挂起状态(此时中断信号依然为高),接下来便执行中断相对应的回调函数
(3)回调函数执行完毕后写GICC_EOIR(中断结束寄存器)进入未激活状态。注意:在GICv2 中只要对GICC_EOIR进行了有效写入就会自动将对应的中断停用(不再需要设置GICC_DIR中断停用寄存器)。

2 总结

(1)GIC的边沿触发和电平触发中断的处理流程基本一致,不同的是电平触发中断只有在进入中断未激活状态时才会解除挂起,其余状态下均是挂起状态(电平也一直为有效状态)。
(2)为了保证中断能够有效通知到GIC,建议将中断设置为边沿触发。为了保证每次中断都能够相对无误地通知到GIC,也可以将设置为边沿触发。
(3)如果不希望出现同一个中断嵌套自己(ARMv7需要使用软件方式实现嵌套中断,有些实现可能在执行中断服务函数前已经使能了自己的中断),则可以配置成电平触发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NW嵌入式开发

感谢您的支持,让我们一起进步!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值