中断控制器

设备树中的中断控制器节点和 GPIO 控制器类似,都是由芯片厂家编写,如果是外部中断,中断控制器和 GPIO 控制器是共存的,例如:

itop-3568开发板驱动学习笔记(26)设备树(五)中断实例分析-LMLPHP

中断控制器中,#interrupt-cells 和 interrupt-controller 两个属性是必须存在的,

interrupt-controller 属性表示该节点是一个中断控制器,
#interrupt-cells 属性表示其他节点使用该中断控制器时需要几个参数来表示要使用的中断,

上面例子中 interrupts 属性用于指定中断控制器、中断号 及 中断触发方式,

GIC 是一个通用中断控制器(Generic Interrupt Controller),SPI 是中断类型,IRQ_TYPE_LEVEL_HIGH 表示中断触发方式。

中断类型包括:
SGI(Software-generated interrupt):范围0 - 15,软件触发的中断,一般用于核间通讯
PPI(Private processer interrupt): 范围16 - 31,私有外设中断,只对指定的core有效
SPI(Shared processer interrupt):范围32 - 1019,共享中断,不限定特定的core

中断触发方式包括:

#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 

该控制器的 interrupts 属性之所以有三个参数,是因为 gic 中断控制器中 #interrupt-cells 属性值为 3,

itop-3568开发板驱动学习笔记(26)设备树(五)中断实例分析-LMLPHP

配置中断

下面是 ft5x061 触摸屏芯片对应的设备树信息:

itop-3568开发板驱动学习笔记(26)设备树(五)中断实例分析-LMLPHP

触摸屏用到了一个外部中断,对应的 pin 为 GPIO3_A5,设备树中用 interrupts-parent 和 interrupts 两个属性来指定设备使用的中断。

interrupts-parent 用于指定该节点需要用到的中断控制器,
interrupts 第一个参数为中断控制器 gpio3 中的中断号,第二个参数为中断触发方式,参数个数由中断控制器 gpio3 的 #interrupt-cells 属性值决定。

在上文的中断控制器介绍中,同样有 interrupts 属性,但却没有对应的 interrupts-parent,是不需要指定该属性吗?其实在设备树根节点下已经定义了该属性,又因为 gpio3 节点为根节点的子节点,所以 gpio3 会使用根节点的 interrupts-parent 属性。

itop-3568开发板驱动学习笔记(26)设备树(五)中断实例分析-LMLPHP

其他属性

在 RK3568 设备树中,还能看到 interrupt-affinity 和 interrupt-names 两个属性,

interrupt-affinity 属性用来关联中断和 CPU core,例如:

itop-3568开发板驱动学习笔记(26)设备树(五)中断实例分析-LMLPHP

interrupt-names 属性用于指定中断的名称,例如:

itop-3568开发板驱动学习笔记(26)设备树(五)中断实例分析-LMLPHP

05-20 10:18