迅为iTOP-iMX6开发板-设备树内核-中断例程

本文介绍ARM架构下Linux内核的中断处理机制,包括中断的注册与注销过程,使用request_irq和free_irq函数的方法,以及在设备树中配置中断的具体步骤。通过实际案例,展示如何在开发板上实现按键中断功能。
摘要由CSDN通过智能技术生成

1.1 中断概述

ARM 架构 linux 内核中,有 5 种常见的异常,其中中断异常是其一,Linux 内核将所

有中断统一编号,使用一个 irq_desc 结构体来描述这些中断,里面记录了中断名称、中断状

态、中断标记、并提供了中断的底层硬件访问函数(如:清除、屏蔽、使能中断),提供了这

个中断的处理函数入口,通过它还可以调用用户注册的的中断处理函数。linux 内核的中断体

系已经很完善了,驱动工程师需要做的就是调用 request_irq 函数向内核注册中断处理函

数,下面我们来看看 request_irq 函数的定义:

static inline int __must_check

request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,

const char *name, void *dev)

第一个参数 irq:中断号,与平台架构相关;

第二个参数 handler:用户中断处理函数;

第三个参数 flags:中断标记

第四个参数 devname:中断名字,可以通过 cat /proc/interrupts 查看;

第五个参数 dev_id:在 free_irq 中有用,也用做区分中断处理函数;

有注册就得对应着有注销,驱动的注销函数是 free_irq,其定义如下:

void free_irq(unsigned int irq, void *dev_id)

第一个参数 irq:中断号,与 request_irq 中的 irq 一致,用于定位 action 链表;

第二个参数 dev_id:用于在 action 链表中找到要卸载的表项;同一个中断的不同中断

处理函数必须使用不通的 dev_id 来区分,这就要求在注册中断共享时参数 dev_id 必须唯

一。

1.2 设备树文件修改

这里我们选用 back 按键用于测试,它的网络标号是“DISP0_WR”,对应的 IO 管脚编

号是“NANDF_WP”,对应的宏定义为“MX6QDL_PAD_NANDF_WP_B__GPIO6_IO09 ”

这个管脚在 gpio-keys 驱动中已经使用,我们需要在设备树中将其屏蔽,然后在设备树

文件中增加测试例程的设备树代码。

打开“arch/arm/boot/dts/imx6qdl-sabresd.dtsi”设备树文件。

将 gpios = <&gpio6 9 GPIO_ACTIVE_LOW>; 屏蔽掉,如下图所示。

01.jpg

在“itop_max485_ctl”之后添加以下代码:

key_int{

compatible = "itop,key_int_name";

pinctrl-names = "default";

gpio_key_int = <&gpio6 9 GPIO_ACTIVE_LOW>;

status = "okay";

};

添加完成之后如下图所示,

03.jpg

重新烧写设备树文件,在开发板“/sys/bus/platform/device”目录下会有 key_int 文件

夹生成,表明设备注册完成。

1.3 测试驱动

驱动源码在压缩包“独立中断例程_V1.0”中。

使用“insmod key_int.ko”命令加载驱动模块。如下图。

04.jpg

按下按键“Back”,会有打印信息,如下图所示。

05.jpg

卸载驱动如下图。

06.jpg

测试完成。

9911245-4af7a16ceefa7f25.webp.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值