GIC介绍
GIC(全称Genetic Interrupt Controller)是ARM公司提供的一个通用的中断控制器。它可以管理4种类型的中断:
1、外设中断(Peripheral Interrupt)
外设中断包含内部中断和外部中断。定时器、i2c这些属于内部中断,外部管脚引发的中断例如下降沿中断属于外部中断。
外设中断分为PPI(Private Peripheral Interrupt)和SPI(share Peripheral Interrupt)。PPI只能分配给指定的CPU核心,而SPI可以分配给所有的CPU核心,并由其中一个去处理。这里用得比较多的是SPI。比如i2c的中断用的就是SPI
i2c_3: i2c@13890000 {
...
interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>; /* SPI中断 */
};
还有定时器中断也是用GIC_SPI
backlight_demo_dts@139D0000{
//名字无所谓
...
interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
};
2、软件触发的中断SGI(Software-generated interrupt)
软件可以通过写GICD_SGIR寄存器来触发一个中断事件。
3、虚拟中断
4、Maintenance interrupt
GIC中断号
比如tiny4412的背光驱动中需要定时器去模拟pwm信号然后设置背光值。这里需要用到定时器3,查看确定datasheet对应的中断号。
可以看出中断号是40,所以dts可以这样来表示
interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
GIC_SPI表示这是一个共享的外设中断,40表示中断号,IRQ_TYPE_LEVEL_HIGH表示中断高优先级
DTS
描述中断连接需要4个属性
1、interrupt-controller : 一个空的属性定义, 该节点作为一个接收中断信号的设备。
2、#interrupt-cells :中断控制器节点的属性。它声明了该中断控制器的后续的中断指示符中 cell 的个数。一般来说定时器中断、i2c中断这些中断的cell为<3>;外部引脚中断的cell为