05、设备树中断的属性描述 (最常用)
📢设备树中断的属性介绍。
一、RK中断 设备树节点案例
下面展示的是 RK3568
开发板 SDK
源码中的 ft5x06
设备树, 其中蓝色字体部分就是关于中断相关的描述, 包括了
interrupts
、interrupt-controller
: 对当前节点的一个定义(说明)。#interrupt-cells
、interrupt-parent
----> 指向gpio0\gpio1\gpio2
文件:rk3568.dtsi
文件:rk3566-rk817-tablet-k108.dts
二、interrupts属性
当设备需要处理中断时(比如按键、触摸屏),设备树的 interrupts
属性会描述三个关键信息:
1. 中断控制器类型(可选)
作用:告诉系统这个中断是通过哪个控制器传递的(比如GIC、IRQ等)。
是否需要写:
- 如果节点里写了
interrupt-parent
属性(指向中断控制器节点),就可以省略这个参数。 - 否则需要写第一个参数,比如
GIC_SPI
表示使用GIC控制器的SPI中断。
- 如果节点里写了
例子:
interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
(如果用了interrupt-parent
,可以直接写成<33 IRQ_TYPE_LEVEL_HIGH>
)
2. 中断号(必填)
作用:设备的唯一“身份证号”,系统通过这个数字识别是哪个设备触发了中断。
从哪找:
- 硬件原理图里会标明设备连接到哪个中断号(比如GPIO按键用中断号33)。
- 设备手册或芯片资料也会说明。
3. 触发类型(必填)
作用:告诉系统设备是用什么方式触发中断的。
两种常见类型:
边沿触发:信号变化时触发(比如按钮按下瞬间)。
- 上升沿:
IRQ_TYPE_EDGE_RISING
- 下降沿:
IRQ_TYPE_EDGE_FALLING
- 双边沿:同时支持上升和下降沿
- 上升沿:
电平触发:信号保持高/低电平时触发。
- 高电平:
IRQ_TYPE_LEVEL_HIGH
- 低电平:
IRQ_TYPE_LEVEL_LOW
- 高电平:
:::
为什么有的节点只有两个参数?
比如 ft5x06
节点的 interrupts
只写了中断号和触发类型,因为:
它通过 interrupt-parent
属性指向了中断控制器(比如 &gpio0
或其他控制器节点)。
这样就能省略第一个参数(控制器类型),直接写后面两个参数即可。 :::
三、interrupt-controller属性
interrupt-controller属性是设备树中用来标记某个设备是中断控制器的标识。只要节点包含这个属性,就表示该设备负责处理中断信号。
这个属性不需要任何具体值,只需要出现在设备节点的属性列表里就行。它的作用就像一个身份标签,告诉系统"这个设备是专门管理中断的"。
中断控制器就像是硬件系统的"信号调度员",它接收来自各个设备的中断请求,按照优先级和设定规则把中断信息传递给对应的处理器或设备。操作系统通过识别这个属性,就能正确配置中断管理系统。
例如:rk3568.dtsi
四、interrupt-parent属性
interrupt-parent是设备树中用来指定设备中断归属的设置项。它的核心作用就是:告诉系统当某个硬件(比如触摸屏传感器)需要发出中断信号时,应该由哪个控制器来接收和处理这个信号。
具体来说,这个设置指向负责管理设备中断的控制器节点。例如,如果一个传感器需要中断功能,就在它的设备节点里写上interrupt-parent = &gpio0,这样系统就知道这个设备的中断请求应该交给gpio0控制器处理。
属性值通常用&符号加控制器名称(如&gpio0)来表示,这种方式比写完整路径更简洁易读。当系统有多级中断控制器时(比如主控连接多个子控件),设备可以指定上级控制器作为interrupt-parent。这样中断信号会一层层上报,让中断管理结构更清晰,也方便系统高效处理。
举个例子:假设触摸屏设备 rk817 连接在 gpio0 控制器上,它的设备节点里写上 interrupt-parent = <&gpio0>
,系统就知道它的中断信号应该由 gpio0 处理,而不是其他控制器。这样设备和控制器就能正确联动,中断功能也能正常工作。
五、#interrupt-cells 属性
设备或中断源需要通过interrupt-parent
属性明确指定它们对应的中断控制器。这样,当设备发出中断请求时,系统就能准确知道该把信号交给哪个控制器处理。
简单来说:
interrupt-parent
的作用就是告诉设备:"你的中断信号应该由哪个控制器来管理"- 设备在
interrupts
属性里写的中断号等信息,会和这个指定的控制器绑定使用
当多个控制器组成层级结构时(比如主控制器连接副控制器),下级控制器可以把自己的interrupt-parent
指向上级控制器。这样就像建立了一个中断传递的链条,确保所有中断信号都能沿着正确的路径逐级上报。