一、设备树下的中断使用
1.首先需要在设备树文件中添加对应代码,
设备树文件路径:/home/ttlion/tools/RK3588S/kernel/arch/arm64/boot/dts/rockchip

然后将编译内核,将生成的boot,img文件下载到板子上 。
2.包含相关头文件
#include <linux/of_irq.h>

3.通过平台设备总线获取中断号
int platform_get_irq(struct platform_device *dev, unsigned int num)
函数参数
struct platform_device *dev: 来自于(*probe)函数的第一个形参
num: 索引号, 我们现在只有一个, 填 0
函数返回值
就是中断号

4.通过中断号注册中断
int __must_check
devm_request_irq(struct device *dev, unsigned int irq, irq_handler_t handler,
unsigned long irqflags, const char *devname, void *dev_id)
函数参数
struct device *dev: 存在于(*probe)的第一个形参
irq: 中断号
irq_handler_t handler: 中断服务函数
irqflags: 中断触发标志
devname: 无所谓尽可能有意义
dev_id: 传入中断服务函数的参数

中断服务函数:

5.释放中断
void devm_free_irq(struct device *dev, unsigned int irq, void *dev_id)
函数参数
struct device *dev: 存在于(*probe)的第一个形参
irq: 中断号
void *dev_id: 传递给中断服务函数的参数

指的注意的是我们获取中断号 用两种方式都可以获取
①通过gpio号可以获取中断号,他们对应的注册中断服务函数和注销函数使用也都不相同

②直接通过平台设备添加中断号

irq.c
我们并没有生成硬件设备,也没有main函数,通过按键的下降沿进行检测按键是否按下,仅仅挂载irq.ko就可以实现按键检测。
#include <linux/module.h>
#include <linux/kernel.h>
//杂项驱动编程相关头文件
#include <linux/miscdevice.h>
#include <linux/fs.h>
#include <linux/of.h>
#include <linux/of_gpio.h>
//中断相关头文件
#


559

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



