目录
1 怎么描述一个中断
2 怎么描述一个中断控制器
3 总结
1 怎么描述一个中断
我们想在设备树文件中描述一个中断,那么需要两个东西
a.指定是哪一个中断控制器
b.是中断控制器里面的哪一个中断。
假设我们有一个网卡,当网卡有数据时会产生一个中断,然后中断接到GPIO控制器中,那么我们要想描述这个网卡中断,首先我们要指定它的中断控制器interrupt_parent是哪一个,然后我们还需要指定他使用了这个中断控制器中的哪个节点,我们看一下设备树文件,
从设备树文件中可以看到,interrupt-parent = <&gpf>;表明了使用gpf中断控制器,然后interrupts = <7 IRQ_TYPE_EDGE_RISING>;表明它使用gpf中断控制器中的7号中断,然后中断触发方式是IRQ_TYPE_EDGE_RISING,
2 怎么描述一个中断控制器
然后至于中断控制器,它自己在设备中文件中也有一个节点,他有两个属性,其中一个是interrupt_controller,这是一个没有值的属性,表明自己是一个中断控制器,第二个属性是interrupt-cells,这个属性表明它下一级的设备用多少个32位的数据来描述一个中断,我们在刚才的设备树文件中搜索interrupt-controller,一共可以找到三个中断控制器,
其实我们也可以在中断控制器的节点中指定该中断控制器的上一级中断控制器interrupt-parent,但是在上面的gpf和gpg中断控制器中我们并没有看到interrupt-parent,那怎么找到他的父亲呢,我们看gpf节点的父节点是pinctrl@56000000,但是在pinctrl里面也没有看到interrupt-parent属性,然后继续网上找pinctrl的父节点,发现pinctrl的父节点就是根节点了,然后我们在根节点中看到有一个
然后可以看到interrupt-parent=<0x1>,而interrupt-controller的phandle就是0x1,那么根节点的中断父节点就是interrupt-controller。
这里补充一个设备树文件中的引用语法
从上面的描述可以看到,在设备树中我们定义了三个中断控制器,但是之前我们说在硬件上还有一个subinterrupt,实际上子中断控制器和主中断控制器它用一个节点来描述,我们可以看到主中断控制器的interrupt-cells里面有四个32位的数据,其中有一个32位的数据用来表述那个中断是主中断还是子中断,在软件上我们只用了一个interrupt-controller描述了硬件的两个中断控制器,
3 总结