【Linux驱动】Linux中断(一)—— 设备树中断节点

裸机使用中断需要通过寄存器手动配置,但有了 Linux 系统后,Linux内核提供了完善的中断框架,我们只需要申请中断,然后注册中断服务函数即可。

一、设备树中断属性

既然驱动中要注册中断服务函数,我们首先需要知道三个点:

  • 中断类型: GIC 目前存在的中断请求有128种,每一种对应一个中断控制器
  • 中断引脚: 指定具体是哪一个引脚会触发
  • 触发方式: 上升沿触发、下降沿触发、高电平触发、低电平触发

设备树中涉及到中断的属性主要有四个

1、指定中断类型

在设备树中每一种中断请求表现为一个节点,且包含属性 interrupt-controller。涉及到的属性还有 #interrupt-cells,指定引用节点中 interrupts 属性中包含的信息个数(注意不是当前节点的interrupts属性)

当某个外设节点要引入中断时,需要通过 interrupt-parent 属性描述自己属于哪一种类型的中断,比如下面的 sii902x 节点的中断类型属于 gpio1。gpio1节点的 interrupts 属性已经包含了中断号等内容,后续与 gpio1 相关的子节点直接引用即可。 

2、指定中断引脚、触发方式

中断的触发需要借助引脚的高低电平实现,所以当某个外设节点引入中断后,需要指定是哪个引脚会触发中断,使用的设备树属性为 interrupts,该属性包含两个信息(中断引脚、触发方式)

格式如下:

interrupts = <引脚编号 触发方式>,···<引脚编号 触发方式>;

引脚编号:引脚编号可以直接使用数字,如果是 gpio1_IO10,这里可以填 10

触发方式:Linux内核提供了宏定义来表示触发方式(irq.h)

#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    /* 低电平触发 */

二、设备树中断节点

还是以LED为例,我们在之前的 LED 节点中引入中断,LED 使用的引脚为 GPIO1_IO03,所属中断类型为gpio1,引脚编号为 3,触发类型为上升沿触发。在应用层每隔1s切换一次 LED 的状态,以此来测试是否进入中断。

创建的设备树节点如下:

gpio-led {pinctrl-names = "default";pinctrl-0 = <&pinctrl_gpio_leds>;led-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;interrupt-parent = <&gpio1>;            // 中断类型为gpio1interrupts = <3 IRQ_TYPE_EDGE_RISING>;  // 中断引脚为GPIO1_IO03,触发方式为上升沿status = "okay";
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/305507.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第四节 参数传递对堆栈的影响 2

深入浅出图解C#堆与栈 C# Heaping VS Stacking 第四节 参数传递对堆栈的影响 2 [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈](https://mp.csdn.net/mdeditor/101021023)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工作原理](htt…

【JavaScript】DOM事件的传播机制

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…

基于动态窗口的航线规划

MATLAB2016b可以运行 % ------------------------------------------------------------------------- % File : DWA 算法 % Discription : Mobile Robot Motion Planning with Dynamic Window Approach % Author :Yuncheng Jiang % License : Modified BSD Software License A…

GBASE南大通用常用错误代码

错误代码为 GBASE南大通用Server 返回给应用的错误编号&#xff0c;用于唯一的标识一个错误。错误码在 GBaseErrorCode 枚举中定义。 下表仅提供通过 GBASE南大通用数据库返回给应用的常用错误码及错误描述的参考&#xff0c; 具体错误码请参考 GBase 数据库相关手册。

Grafana 配置告警

配置告警 配置告警 1. Grafana 配置文件配置 #################################### SMTP / Emailing ########################## [smtp] enabled true host smtp.qq.com:587 user 9**qq.com # If the password contains # or ; you have to wrap it with triple quotes…

桥接模式-举例

概叙&#xff1a;桥接模式用一种巧妙的方式处理多层继承存在的问题&#xff0c; 用抽象关联取代了传统的多层继承&#xff0c; 将类之间的静态继承关系转换为动态的对象组合关系&#xff0c; 使得系统更加灵活&#xff0c;并易于扩展&#xff0c; 同时有效控制了系统中类的个数…

腾讯云服务器怎么选?腾讯云服务器最新优惠价格表来了!

腾讯云服务器租用价格表&#xff1a;轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月&#xff0c;云服务器CVM S5实例2核2G配置280.8元一年…

PyTorch 进阶指南,10个必须知道的原则

PyTorch 是一种流行的深度学习框架&#xff0c;它提供了强大的工具和灵活的接口&#xff0c;使得开发者能够搭建和训练各种神经网络模型。这份指南旨在为开发者提供一些有用的原则&#xff0c;以帮助他们在PyTorch中编写高效、可维护和可扩展的代码。 如果你对 Pytorch 还处于…

【unity3D-粒子系统】粒子系统主模块-Particle System篇

&#x1f497; 未来的游戏开发程序媛&#xff0c;现在的努力学习菜鸡 &#x1f4a6;本专栏是我关于游戏开发的学习笔记 &#x1f236;本篇是unity的粒子系统主模块-Particle System 基础知识 Particle System 介绍&#xff1a;粒子系统的主模块&#xff0c;是必需的模块&#x…

Python sanic框架钉钉和第三方打卡机实现

同样还是需要开通钉钉应用这里就不错多说了 第一步:梳理逻辑流程 前提&#xff1a;打卡的机器是使用postgres数据库&#xff0c;由于因为某些原因&#xff0c;钉钉userId 我已经提前获取到了存放到数据库里。 1.用户打卡成功后&#xff0c;我们应该监听数据库进行查询&#xf…

小米路由器2(R2D) 安装 MIXBOX

1. 先刷开发版 ROM http://www1.miwifi.com/miwifi_download.html 进入上述网页&#xff0c;找到 R2D 点击下载 开发版 ROM 教程 看 下载按钮上边的 “刷机教程” 刷机教程 2. 开启SSH工具 登录自己的小米账号后&#xff0c;里面会显示出 自己的 root密码&#xff1b; 默认…

用ChatGPT挑选钻石!著名珠宝商推出-珠宝GPT

根据Salesforce最新发布的第五版《互联网购物报告》显示&#xff0c;ChatGPT等生成式AI的出现、快速发展&#xff0c;对零售行业和购物者产生了较大影响。可有效简化业务流程实现降本增效&#xff0c;并改善购物体验。 著名珠宝商James Allen为了积极拥抱生成式AI全面提升销售…