diff --git a/Software/Development/OperatingSystem/Linux/Kernel/Modules/DeviceTree/DeviceTree.md b/Software/Development/OperatingSystem/Linux/Kernel/Modules/DeviceTree/DeviceTree.md index 84f93e4..07304f6 100644 --- a/Software/Development/OperatingSystem/Linux/Kernel/Modules/DeviceTree/DeviceTree.md +++ b/Software/Development/OperatingSystem/Linux/Kernel/Modules/DeviceTree/DeviceTree.md @@ -70,6 +70,45 @@ reg = ; * interrupt-parent:设备节点通过这个关键字指定其依附的中断控制器 phandle,如果没有指定,则继承父节点的 interrupt-parent 配置; * interrupt:设备节点里使用,一般包含中断号、触发方法等。具体有多少个 cell,由 #interrupt-cells 决定,每个 cell 的具体含义,一般由驱动决定。 +多个中断可以用 interrupts 描述。interrupts 属性后面,会有不同的参数,有时是两个,有时是三个。 + +两个的时候一般是这样出现: + +```dts +interrupt-parent = <&gpio2>; +interrupts = <29 0>; +``` + +一般这样表明:中断控制器是GPIO2,然后使用它的29号中断。(这里的29号,就是指29号引脚),0是指触发的方式(上升沿、下降沿等)。 + +三个的时候一般是这样出现: + +```dts +interrupts = <0 37 1>; +interrupts = ; +interrupts = ; +``` + +第一个参数表示是 IPI、PPI、SPI、SGI 其中的一个。第二个参数表示:是第一个参数里面的第几个。第三个参数表示:中断触发的类型(上升沿、下降沿等)。 + +IPI、PPI、SPI、SGI 是 ARM 规范的中断,含义如下: + +* IPI:inter-processer interrupt 中断号0~15 +* PPI:per processor interrupts 中断号16~31 +* SPI:shared processor interrupts 中断号 32 ~32+224 +* SGI:software generated interrupts (SGI). + +中断类型的值如下: + +```cpp +#define IRQ_TYPE_NONE 0 +#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 +``` + ### DTS 示例 一个简单的 dts 文件示例如下: