在设备树里面,中断使用interrupts来描述,interrupts属性会有两种不同的参数: 有时是两个参数,有时是三个参数。
两个的时候一般是这样出现:
interrupt-parent = <&gpio2>;
interrupts = <29 0>;
一般这样表明:中断控制器是GPIO2,然后使用它的29号中断。(这里的29号,就是指29号引脚),0是指触发的方式(上升沿、下降沿等)。
或者:
interrupt-parent = <&gpio2>;
interrupts = <5 1>;
表示中断控制器是GPIO2,使用GPIO2的第5号中断,这里的第5号中断指的是5号引脚,1是指中断触发的方式为上升沿触发。
三个的时候一般是这样出现:
interrupts = <0 37 1>;
interrupts = <GIC_SPI 37 1>;
interrupts = <GIC_PPI 37 1>;
先了解一下中断的类型
- IPI:inter-processer interrupt 中断号0~15
- PPI:per processor interrupts 中断号16~31
- SPI:shared processor interrupts 中断号 32 ~32+224
- SGI:software generated interrupts (SGI).
三个的时候:
- 第一个参数表示是IPI、PPI、SPI、SGI其中的一个
- 第二个参数表示:是第一个参数里面的第几个
- 第三个参数表示:中断触发的类型。(上升沿、下降沿等)
以下例子:
interrupts = <GIC_SPI 66 1>;
上述示例表示中断类型为共享处理器中断(SPI),中断号为SPI中断类型中的第66号中断号,计算出来的实际中断号即为32+66=98号中断,1表示上升沿触发中断。
中断类型的值:
#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 //电平触发-低电平
我们使用的外部中断均属于SPI中断类型。