中断控制器类型:
interrupts 属性的第一个参数指定了中断控制器的类型。常见的类型包括 GIC (Generic
Interrupt Controller)、IRQ (Basic Interrupt Handling) 等。例如,在给定的代码片段中,GIC_SPI 表
示中断控制器的类型为 GIC SPI 中断。
中断控制器是硬件系统中管理中断请求(IRQ)的核心组件,其类型决定了中断的分配、优先级和触发方式。以下是关键中断控制器类型的解析及使用场景:
1. GIC (Generic Interrupt Controller)
- 定义:ARM架构中广泛使用的中断控制器,支持多核处理器和复杂中断管理。
- 子类型:
- GIC_SPI (Shared Peripheral Interrupt)
- 用途:外部设备共享的中断(如网卡、USB控制器)。
- 特点:全局唯一中断号,可路由到任意CPU核心。
- 示例:
interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>
表示使用GIC的SPI中断34,电平触发高电平有效。
- GIC_PPI (Private Peripheral Interrupt)
- 用途:处理器内部私有中断(如定时器、软件中断)。
- 特点:每个CPU核心有独立的中断号,不可共享。
- 示例:
interrupts = <GIC_PPI 15 IRQ_TYPE_EDGE_RISING>
表示使用GIC的PPI中断15,边沿触发上升沿有效。
- GIC_SPI (Shared Peripheral Interrupt)
2. IRQ (Basic Interrupt Handling)
- 定义:传统中断控制器,常见于简单系统或兼容旧架构的场景。
- 典型实现:
- 8259 PIC:早期x86系统使用的可编程中断控制器。
- OpenPIC:多核系统的扩展中断控制器。
- 特点:
- 中断号直接对应硬件线路(如IRQ0对应定时器)。
- 配置简单,但缺乏优先级和动态分配功能。
- 示例:
interrupts = <IRQ 10 IRQ_TYPE_EDGE_RISING>
表示使用IRQ控制器(如8259)的中断10,边沿触发。
3. 其他中断控制器类型
- MSI (Message Signaled Interrupts)
- 用途:PCIe设备通过内存写操作触发中断,避免共享IRQ线路。
- 示例:
msi-parent = <&gic>;(与GIC结合使用)。
- APIC (Advanced Programmable Interrupt Controller)
- 用途:x86架构的高级中断控制器,支持多核和高级特性(如中断亲和性)。
- 示例:
interrupts = <APIC 15 IRQ_TYPE_LEVEL_LOW>。
设备树中的配置
在设备树(Device Tree)中,interrupts属性的第一个参数指定中断控制器类型,后续参数定义中断号和触发方式:
// 使用GIC_SPI中断34,电平触发高电平
ethernet@10000000 {
interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
};
// 使用IRQ控制器中断10,边沿触发
uart@9000000 {
interrupts = <IRQ 10 IRQ_TYPE_EDGE_RISING>;
};
选择中断类型的依据
- 架构兼容性:
- ARM系统优先使用GIC(SPI/PPI)。
- x86系统使用APIC或8259。
- 中断共享需求:
- 外部设备共享中断选GIC_SPI。
- 私有中断(如定时器)选GIC_PPI。
- 触发方式:
- 电平触发(Level)适用于持续信号(如DMA完成)。
- 边沿触发(Edge)适用于脉冲信号(如按键按下)。
通过合理选择中断控制器类型和参数,可确保系统高效、稳定地处理硬件中断。
4558

被折叠的 条评论
为什么被折叠?



