中断触发类型(边沿触发与电平敏感)不匹配

Posted

技术标签:

【中文标题】中断触发类型(边沿触发与电平敏感)不匹配【英文标题】:Interrupt triggering type (edge-triggered vs level-sensitive) mismatch 【发布时间】:2021-09-21 07:17:59 【问题描述】:

我正在使用 GICv3 在 ARMv8 架构上编写一个小型操作系统。

在设备初始化期间,我预计操作系统会收到一个中断。但是,它从未触发过。结果我错误地将设备的中断触发类型配置为“电平敏感”,即使实际的中断触发类型是“边沿触发”。将中断触发类型改为“边沿触发”后,就可以接收到设备的中断了。

这是我的问题:

GIC 如何接收和转发断言的中断取决于中断触发类型? 根据 GIC 的工作方式(接收和转发),为什么我的错误配置从未触发中断? 如果我以相反的方式错误配置了中断触发类型会发生什么? (如果我将中断触发类型错误配置为“边沿触发”,但实际应该是“电平敏感”。)

提前谢谢你。

【问题讨论】:

【参考方案1】:

一般来说,中断只是信号线的断言。当存在中断条件时,该线路被断言;当不存在时,该行被取消断言。

监听线路的东西,一个中断控制器,可以通过两种方式解释信号:通过转换或状态。过渡意味着控制器记住它声明了自己,并保留该内存,直到采取某种行动清除该内存。状态是指控制器仅仅反映信号线的状态。

转换或边缘允许更简单的硬件控制器,它可以仅断言脉冲指示状态变化,无论是检测到载波还是接收到字符。在状态或 Level 控制器中,像 carrier detected 这样简单的事情变成了控制器和 CPU 之间繁琐的多状态交换。

然而,

State 或 Level 允许硬件控制器坚持关注,直到满足基本条件。这不仅在多个设备共享单个中断信号时很方便,而且可以避免硬件控制器和 CPU 之间的竞争。一般来说,面向Edge的设备在处理完中断后需要重新检查,以确保中断控制器的静噪不会错过一个中断脉冲。

因此,当您在 GIC 之类的设备中设置模式时,您需要了解硬件设备的行为方式,并相应地对 GIC 进行编程。这不是您希望设备如何运行的选择;相反,它是设备行为方式的配置。幸运的是,设备树为您提供了该信息,如果您不相信设备树,那么一切都将丢失。

【讨论】:

以上是关于中断触发类型(边沿触发与电平敏感)不匹配的主要内容,如果未能解决你的问题,请参考以下文章

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

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

单片机外部中断有两种信号方式,即电平方式和脉冲方式.啥叫电平方式啥叫脉冲方式

边沿触发 与电平触发

D触发器深入详细介绍(zhuanzai)

中断程序详解(附例题)