提示:通过RK3568 触摸屏中断 程序,了解中断基本知识,先入门!
文章目录
前言
在 Linux 驱动开发中,中断(Interrupt) 是一种重要的机制,用于处理硬件设备与 CPU 之间的异步事件(如数据到达、设备状态变化等)。Linux 内核提供了完善的中断处理框架,驱动开发者需要遵循内核的 API 来注册和处理中断。
一、 参考资料
迅为RK3568开发板如何修改默认配置并保存
Linux 驱动开发 三十九:Linux 中断
RK3568驱动指南|第五篇-中断-第39章中断实验
rk3568 | 瑞芯微平台GPIO引脚驱动编写
二、基础概念-知识
1、中断类型
按触发方式分类
这里的类型是后面 申请中断函数request_irq 中的一个触发方式的 参数Flag ,这里先介绍如下:
IRQF_TRIGGER_NONE:无触发方式,表示中断不会被触发。
IRQF_TRIGGER_RISING:上升沿触发方式,表示中断在信号上升沿时触发。
IRQF_TRIGGER_FALLING:下降沿触发方式,表示中断在信号下降沿时触发。
IRQF_TRIGGER_HIGH:高电平触发方式,表示中断在信号为高电平时触发。
IRQF_TRIGGER_LOW:低电平触发方式,表示中断在信号为低电平时触发。
IRQF_SHARED:中断共享方式,表示中断可以被多个设备共享使用。
电平触发中断(Level-triggered):
-
中断信号保持有效电平直到被处理
-
适用于共享中断线
边沿触发中断(Edge-triggered):
-
中断信号在电平变化时触发
-
通常用于非共享中断
中断类型中断器来分
GIC-V3支持四种类型的中断
分别是SGI、PPI、SPI和LPI,每个中断类型的介绍如下:
| GIC-V3支持四种类型 | 介绍 |
|---|---|
| SGI | SGI(Software Generated Interrupt,软件生成中断):SGI 是通过向 GIC 中的 SGI 寄存器写入来生成的中断。它通常用于处理器之间的通信,允许一个 PE 发送中断给一个或多个指定的 PE,中断号ID0 - ID15用于SGI。 |
| PPI | PPI(Private Peripheral Interrupt,私有外设中断):针对特定 PE 的外设中断。不与其他 PE 共享,中断号ID16 - ID31用于PPI。 |
| SPI | SPI(Shared Peripheral Interrupt,共享外设中断):全局外设中断,可以路由到指定的处理器核心(PE)或一组 PE,它允许多个 PE 接收同一个中断。中断号ID32 - ID1019用于SPI, |
| LPI | LPI(Locality-specific Peripheral Interrupt,特定局部外设中断):LPI 是 GICv3 中引入的一种中断类型,与其他类型的中断有几个不同之处。LPI 总是基于消息的中断,其配置存储在内存表中,而不是寄存器中。 |
GIC-V3四种类型中断号
| 中断类型 | INTID范围 | 备注 |
|---|---|---|
| SGI(软件生成中断) | 0 - 15 | 每个核心分别存储 |
| PPI(私有外设中断) | 16 - 31 | 每个核心分别存储 |
| SPI(共享外设中断) | 32 - 1019 | |
| 特殊中断号 | 1020 - 1023 | 用于表示特殊情况 |
| 保留 | 1024 - 8191 | |
| LPI(特定局部外设中断) | 8192及更大 | 上限由实现定义 |
2、中断号
在 linux 内核中, 我们使用 IRQ number 和 HW interrupt ID 两个 ID 来标识一个来自外设的中断:
IRQ number
CPU 需要为每一个外设中断编号, 我们称之 IRQ Number。 这个 IRQ number是一个虚拟的 interrupt ID, 和硬件无关, 仅仅是被 CPU 用来标识一个外设中断。
HW interrupt ID
对于 GIC 中断控制器而言, 它收集了多个外设的 interrupt request line 并向上传递, 因此, GIC 中断控制器需要对外设中断进行编码。 GIC 中断控制器用 HW interrupt ID来标识外设的中断。 如果只有一个 GIC 中断控制器, 那 IRQ number 和 HW interrupt ID 是可以一一对应的。
3、常用中断函数API
gpio_to_irq
gpio_to_irq() 是 Linux 内核中用于将 GPIO 引脚号转换为对应中断号(IRQ)的函数,常用于驱动开发中处理 GPIO 中断。
对于硬件来说,一个板卡上面、芯片上面对应的是引脚号。对于系统、软件、cpu 来说 识别的是中断号。 那么就是把这个硬件的触发中断的引脚号转化为 系统、软件、cpu 可识别的中断号
函数原型
int gpio_to_irq(unsigned int gpio);<

最低0.47元/天 解锁文章
1015

被折叠的 条评论
为什么被折叠?



