问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
CSDN
1.
https://blog.csdn.net/kevin1499/article/details/141531328

本文详细介绍了ARM Cortex-A7处理器中通用中断控制器(GIC)的边沿触发和电平触发中断处理流程。通过对比两种触发方式的中断处理流程,帮助读者深入理解GIC的工作原理。

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需要使用软件方式实现嵌套中断,有些实现可能在执行中断服务函数前已经使能了自己的中断),则可以配置成电平触发。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号