GIC通用中断控制器介绍
https://blog.youkuaiyun.com/hnzziafyz/article/details/81180518
设备树中的GIC中断控制器
gic: interrupt-controller@38800000 {
compatible = "arm,gic-v3";
reg = <0x0 0x38800000 0 0x10000>, /* GIC Dist */
<0x0 0x38880000 0 0xC0000>, /* GICR (RD_base + SGI_base) */
<0x0 0x30340000 0x0 0x10000>; /* IOMUXC_GPR */
#interrupt-cells = <3>; //使用3个字节描述中断
interrupt-controller; //声明自己为中断控制器
interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>; //声明使用的中断
interrupt-parent = <&gic>;
};
对应的参考文档:Documentation/devicetree/bindings/interrupt-controller/arm,gic-v3.txt
1. 第一个字节代表中断类型 GIC type // include\dt-bindings\Interrupt-controller\arm-gic.h
#define GIC_SPI 0 // 共享中断
#define GIC_PPI 1 // 每个处理器拥有独立中断
ARM SMP cores are often associated with a GIC, providing per processor interrupts (PPI), shared processor interrupts (SPI)
除了这两个值之外的其他值无效。
2. 第二个32字节数代表中断编号,SPI形式的中断编号范围是0-987,PPI形式的中断范围是0-15.
3. 第三个字节代表中断触发方式 IRQ type // include\dt-bindings\interrupt-controller\irq.h
#define IRQ_TYPE_NONE 0 内核不改变它,开机或uboot设置它是什么样就什么样。
#define IRQ_TYPE_EDGE_RISING 1 上升沿触发
#define IRQ_TYPE_EDGE_FALLING 2 下降沿
#define IRQ_TYPE_EDGE_BOTH (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING) 双边沿
#define IRQ_TYPE_LEVEL_HIGH 4 电平触发-高电平
#define IRQ_TYPE_LEVEL_LOW 8 电平触发-低电平