【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>;            // 中断类型为gpio1
	interrupts = <3 IRQ_TYPE_EDGE_RISING>;  // 中断引脚为GPIO1_IO03,触发方式为上升沿
	status = "okay";
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实战 | 使用OpenCV快速去除文档中的表格线条(步骤 + 源码)

导 读 本文主要介绍如何使用OpenCV快速去除文档中的表格线条,并给详细步骤和代码。 背景介绍 测试图如下,目标是去除下面三张图中的表格线条,方便后续图像处理。 实现步骤 下面演示详细步骤,以图1为例: 【1】获取二值图像:加载图像、转为灰度图、OTSU二值化 i…

记录 | ubuntu源码编译python3.7.3(指定版本)

一、安装依赖包 sudo apt-get install -y make build-essential libssl-dev zlib1g-dev sudo apt-get install -y libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm sudo apt-get install -y libncurses5-dev libncursesw5-dev xz-utils tk-dev 二、从Python网…

mapboxgl 中给地图添加遮罩蒙版,并不遮罩其中一块区域

文章目录 概要效果预览技术思路技术细节小结 概要 本篇文章主要是给一整块地图添加遮罩层蒙版&#xff0c;但是不遮罩其中一个区域&#xff0c;以反向高亮地区内容。 效果预览 技术思路 这里要实现某个区域反显高亮&#xff0c;需要这个区域的边界json文件&#xff0c;与ech…

Flink1.17实战教程(第三篇:时间和窗口)

系列文章目录 Flink1.17实战教程&#xff08;第一篇&#xff1a;概念、部署、架构&#xff09; Flink1.17实战教程&#xff08;第二篇&#xff1a;DataStream API&#xff09; Flink1.17实战教程&#xff08;第三篇&#xff1a;时间和窗口&#xff09; Flink1.17实战教程&…

华锐三维云展平台创建VR文化宣传展厅,让文化传承变得更便捷和高效

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经逐渐走进人们的生活。通过华锐云展平台&#xff0c;可以通过拖、拉、拽&#xff0c;快速自由地创建一个VR文化宣传展厅&#xff0c;VR文化宣传展厅为人们提供了一个全新的、沉浸式的文化体验空间。在…

uniapp的分包使用记录

UniApp的分包是一种将应用代码划分为多个包的技术。分包的核心思想是将不同部分的代码划分为不同的包&#xff0c;按需加载&#xff0c;从而提高应用性能。使用UniApp的条件编译功能&#xff0c;开发人员可以根据需要将代码划分为多个包。每个包都包含一组页面和组件&#xff0…

在国内如何在Tiktok上买东西(在tiktok上付款)??

TikTok是一款由中国公司字节跳动&#xff08;ByteDance&#xff09;开发的社交媒体应用&#xff0c;于2016年9月正式上线。它在全球范围内迅速走红&#xff0c;特别受到年轻用户的喜爱。以下是关于TikTok的介绍以及其一些优势 支持的卡头有5561、531993 //点我办卡&#xff0c…

stm32H743编译器关于浮点类型强制转换传参的bug

局部函数&#xff0c;正常传参 当测试函数作为局部函数和main函数写在同一个文件中时&#xff0c;参数可以正常传递。函数参数和形参都为3.14 float value 0.0; void float_test(float _v) {value _v; }int main(void) {float_test(3.14f);while(1); } keil仿真截图&#…

关于MySQL、分布式系统、SpringCloud面试题

前言 之前为了准备面试&#xff0c;收集整理了一些面试题。 本篇文章更新时间2023年12月27日。 最新的内容可以看我的原文&#xff1a;https://www.yuque.com/wfzx/ninzck/cbf0cxkrr6s1kniv MySQL 索引 说一下有哪些锁&#xff1f; 行锁有哪些&#xff1f; 性能优化 分库分表…

Java生态系统的进化:从JDK 1.0到今天

目录 前言 JDK 1.0&#xff1a;开启Java时代 JDK 1.1&#xff1a;Swing和内部类 JDK 1.2&#xff1a;Collections框架和JIT编译器 JDK 1.5&#xff1a;引入泛型和枚举 JDK 1.8&#xff1a;Lambda表达式和流 JDK 11以后&#xff1a;模块化和新特性 未来展望 总结 作者简…

3D换肤在服装行业的应用

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 通过采用高质量的 3D 模型&#xff0c;企业可以提供更加身临其境的体…

cpp_07_类型转换构造_析构函数_深拷贝_静态成员

1 类型转换构造函数 1.1 why? 基本类型之间的转换&#xff0c;编译器内置转换规则&#xff1a;int -> double 类类型之间的转换&#xff0c;编译器不知道转换规则&#xff0c;需要用户提供&#xff1a;Cat -> Dog // consconv_why.cpp 为什么需要自定义转换 #includ…

ARM CCA机密计算软件架构之RMI领域管理接口与RSI领域服务接口

领域管理接口 领域管理接口&#xff08;RMI&#xff09;是RMM与正常世界主机之间的接口。 RMI允许正常世界虚拟机监视器向RMM发出指令&#xff0c;以管理领域。 RMI使用来自主机虚拟机监视器的SMC调用&#xff0c;请求RMM的管理控制。 RMI使得对领域管理的控制成为可能&…

STM32 基础知识(探索者开发板)--93讲 PWM

预分频器相当于一个计数器&#xff0c;2分频就是接收2个脉冲传递一个脉冲&#xff0c;3分频就是接收3个脉冲传递一个脉冲&#xff0c;最高65535分频&#xff0c;那么总计时间能达到65535*65535*1/72MHZ 约59秒&#xff0c;没有分频器只能计数最高0.09秒 PWM配置步骤 1.配置定时…

Vue : Object.defineProperty()

给对象添加属性: <script>let person {name : 张三,sex : 男}Object.defineProperty(person,age,{value : 18})console.log(person)</script> 控制台查看: 但是添加的属性是不能被遍历的: 但是如果你想又使用defineProperty添加属性, 又想遍历, 那么就在这个def…

阿里云oss拷贝(包含移动的代码)文件并返回下载地址

oss拷贝文件官方地址&#xff1a; https://help.aliyun.com/zh/oss/developer-reference/java-copy-objects?spma2c4g.11186623.0.0.16f76083xr3lKM 步骤1&#xff1a;oss的Maven依赖 <!-- OSS --><dependency><groupId>com.aliyun.oss</groupId>&l…

GIT如何重新生成ssh密钥过程

GIT如何重新生成ssh密钥过程 一、生成密钥前需要把之前的密钥删除吆 第一步&#xff1a;重新配置用户名和邮箱&#xff08; Git Bash 或命令窗口&#xff09; 1、配置用户命令&#xff1a;git config --global user.name “xxxxx” 2、配置邮箱命令&#xff1a;git config …

laravel5.8中实现验证码组件的安装和验证

本篇文章主要讲解使用laravel5.8自带的验证码库实现验证码验证的效果教程。通过本教程你可以快速接入到自己的项目中开发相应的验证功能。 作者&#xff1a;任聪聪 (rccblogs.com) 日期&#xff1a;2023年12月17日 实际效果 安装步骤 步骤一、输入命令 composer require mews…

来看看这个技术,这才是UPS监控的最好方式!

在现代社会中&#xff0c;信息技术的持续发展使得机房UPS监控变得至关重要。机房是企业信息系统的核心&#xff0c;UPS监控系统能够确保在电力故障或其他问题发生时&#xff0c;机房设备能够持续稳定运行&#xff0c;从而保障数据的安全性和可用性。 客户案例 金融机构 河北某…

物流标签,2028 年将以5.2%左右的复合年增长率增长

近年来&#xff0c;在供应链中对产品和货物的跟踪和识别需求不断增长的推动下&#xff0c;物流标签市场出现了显着增长。预计该市场将继续以稳定的速度增长&#xff0c;无论是在全球还是在中国市场。 全球市场分析&#xff1a;全球物流标签市场预计从 2021 年到 2028 年将以 5.…