Linux学习_设备树实现中断

news2024/9/27 19:16:31

Linux学习_设备树实现中断

  • 中断层级结构
  • 设备树_中断控制器
  • 设备树_中断子节点
  • 驱动程序
    • 获取GPIO
    • 获取中断号
    • 申请中断
    • 中断处理函数

中断层级结构

硬件而言,中断控制器指的就是GIC,但是实际在软件上,图中的GPIO等我们也称之为中断控制器。
外部设备1~n共享着GPIO的B号中断,而GPIO的多个中断又汇总起来共享GIC的A号中断,这种像树一样的嵌套形式,自然也有树一样的关系,即父-子关系,我们在子节点中称之为parent
在这里插入图片描述
在实际处理时,底层会这样做:

  1. CPU发现是A号中断,调用GIC中断A的handle_A函数,
  2. handle_A函数去调用自己名下所有中断的handle_xxx函数
  3. handle_xxx们会判断是不是自己这里中断,不是就立刻结束,是就继续执行处理
  4. 最后B发现是自己,只有handle_B继续执行,去调用自己名下所有设备的中断函数,重复以上流程
  5. 最终对应设备的handle函数被执行

当然了,这是底层的执行逻辑我们需要了解,我们调用设备树有指定的规范

设备树_中断控制器

示例:

vic: intc@10140000 {
	compatible = "arm,versatile-vic";
	interrupt-controller;   表明自己控制器的身份
	#interrupt-cells = <3>;表明需要几个cell描述自己
	reg = <0x10140000 0x1000>;
};

其中interrupt-controller; 表明自己控制器的身份,#interrupt-cells = <3>;表明需要几个cell描述自己,这俩是必须的

设备树_中断子节点

如果要使用该controller,那么必须将其声明为parent并加以描述
例如:

i2c@7000c000 {
	gpioext: gpio-adnp@41 {
	compatible = "ad,gpio-adnp";
	
	interrupt-parent = <&gpio>;  声明自己的parent是哪个
	interrupts = <160 1>;		 代表160号,上升沿触发
	
	gpio-controller;
	#gpio-cells = <1>;
	
	interrupt-controller;
	#interrupt-cells = <2>;
};

1 = low-to-high edge triggered,上升沿触发
2 = high-to-low edge triggered,下降沿触发
4 = active high level-sensitive,高电平触发
8 = active low level-sensitive,低电平触发
这个玩意可以组合使用,例如3代表上升下降双边沿都触发

实际上,IMX6ULL在各模块和GIC之间还有个GPC INTC模块General Power Controller, Interrupt Controller,作用是提供中断屏蔽、中断状态查询、唤醒功能。

驱动程序

如果用GPIO实现中断的话,总的来说分四步:

  1. 获取GPIO
  2. 获取中断号
  3. 申请中断
  4. 中断处理函数

获取GPIO

利用以下函数可以从设备树中获取中断号

count = of_gpio_count(node);
for (i = 0; i < count; i++)
gpio_keys_100ask[i].gpio = of_get_gpio_flags(node, i, &flag);

获取中断号

之前学习设备树的时候提到过,设备树中只有两种会被转化为platform_device,这两种就是:

  1. 根节点下含有compatile属性的子节点
  2. 某节点compatile属性为:“simplebus”,“simple-mfd”,“isa”,"arm,amba-bus"四者之一的,其子节点全部可以

特别的,总线I2C、SPI节点会由总线驱动程序转化为i2c_client结构体和spi_device结构体,就不变成platform_device了;而GPIO太常用了,所以有一堆好用的函数

platform_device:使用platform_get_resource函数

struct resource *platform_get_resource(struct platform_device *dev,unsigned int type,unsigned int num);
参数一,设备号
参数二,资源类型,IORESOURCE_MEM、 IORESOURCE_REG,以及我们这里要用的IORESOURCE_IRQ中断资源
参数三,这类资源中的哪一个

I2C、SPI:储存在i2c_client、spi_device结构体的irq成员中
GPIO:GPIO由于很常用,所以有特别的优待----->一堆函数,gpio_to_irq
啥也不是的:of_irq_get()

申请中断

err = request_irq(gpio_keys_100ask[i].irq, gpio_key_isr, \
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "100ask_gpio_key", &gpio_keys_100ask
[i]);

中断处理函数

static irqreturn_t gpio_key_isr(int irq, void *dev_id){
	struct gpio_key *gpio_key = dev_id;
	int val;
	val = gpiod_get_value(gpio_key->gpiod);
	printk("key %d %d\n", gpio_key->gpio, val);
	return IRQ_HANDLED;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[PyTorch]预训练权重的转换

众所周知&#xff0c;使用大量数据预训练后的骨干网络可以提升整个模型的泛化能力&#xff0c;而我们如果将网络的骨干网络替换后则不能直接使用原来的权重。这个项目的作用是在你替换骨干网络后可以将网络预训练权重一并“偷”过来。 下给结论&#xff1a;将DeeplabV3的骨干网…

详解 TCP(三次握手 + 四次挥手 + 滑动窗口 + 拥塞控制 + 和 UDP 做对比)

文章目录 1. TCP / IP五层模型和OSI七层模型1&#xff09;OSI七层模型2&#xff09;TCP/IP 五层模型 2. TCP和UDP1&#xff09; TCP首部结构2&#xff09;UDP首部结构3&#xff09;TCP和UDP的区别2.2 UDP和TCP对应的应用场景 3. TCP 建立连接时的三次握手1&#xff09;为什么需…

虚拟专用网VPN与网络地址转换NAT技术

1、专用网络或本地互联网 一方面现在随着个人电脑的增大&#xff0c;IP地址十分紧缺&#xff0c;所以如果为每一台电脑都分配个一个全球IP地址&#xff08;唯一的&#xff09;不太现实&#xff1b;另外一方面&#xff0c;很多机构&#xff08;比如大公司&#xff09;往往只需要…

阿里正式加入ChatGPT战局,“通义千问”上线后表现如何?

ChatGPT发布后&#xff0c;数月间全世界都对AI的能力有了新的认知。 ChatGPT掀起的战局&#xff0c;现在又多了一位选手了&#xff01; 阿里版类ChatGPT突然官宣正式对外开放企业邀测&#xff0c;由达摩院开发&#xff0c;名为“通义千问” 顾名思义&#xff0c;阿里正式加入Ch…

java实现钉钉自定义机器人发送消息

钉钉作为现在很多企业的移动办公平台&#xff0c;具有很多很强大的功能&#xff0c;可以帮助我们更加及时的发现问题&#xff0c;解决问题&#xff0c;今天我们做一个java实现钉钉自定义机器发送消息的功能。 首先&#xff0c;先放出官方文档地址&#xff1a;https://open.ding…

GIS在城市规划中的作用与应用

山海鲸可视化-GIS影像 简介 GIS&#xff08;地理信息系统&#xff09;是一种用于捕获、存储、管理、分析和显示地理空间数据的技术和工具。GIS可以用于各种领域&#xff0c;包括城市规划、土地管理、自然资源管理、公共安全、环境保护、气象预报、交通运输、农业、地质勘探、…

支持多模型数据分析探索的存算分离湖仓一体架构解析(上)

当企业需要建设独立的数据仓库系统来支撑BI和业务分析业务时&#xff0c;有了“数据湖数据仓库”的混合架构。但混合架构带来了更高的建设成本、管理成本和业务开发成本。随着大数据技术的发展&#xff0c;通过在数据湖层增加分布式事务、元数据管理、极致的SQL性能、SQL和数据…

Python实现哈里斯鹰优化算法(HHO)优化Catboost分类模型(CatBoostClassifier算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 2019年Heidari等人提出哈里斯鹰优化算法(Harris Hawk Optimization, HHO)&#xff0c;该算法有较强的全…

BI数据可视化报表模板分享,附免费下载方法

奥威BI软件上既有大量单张下载套用的BI数据可视化报表模板&#xff0c;又有以通用标准方案、行业通用方案为基础打造的标准化BI数据可视化报表模板套装&#xff0c;下载套用即可完成整个企业的BI数据可视化分析。这些BI数据可视化报表模板的效果如何&#xff0c;怎么下载&#…

Spring set注入专题

简单数据类型&#xff0c;来自BeanUtils&#xff0c;包含8种基本数据类型&#xff0c;8种包装类等 Temporal是java8之后的新特性&#xff0c;表示时区&#xff0c;时间等 Local为语言类 注入简单数据类型(包括String): 注意&#xff0c;property中不能使用ref&#xff0c;要使…

连接云服务器

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

精彩回顾|SOFA 五周年,Live Long and Prosper!

2023 年 4 月 15 日&#xff0c;SOFAStack 社区在北京市朝阳区 C work 举办了自己的第五个生日。在“Live Long and Prosper”的活动主题贯彻下&#xff0c;活动现场的开源技术探索氛围变得尤其浓厚。 SOFA 开源集市 在 SOFA 五周年的开源集市中&#xff0c;汇聚了 SOFAStack 的…

Transformer应用之构建聊天机器人(一)

一、概述 聊天机器人的基本功能是系统根据用户当前的输入语句&#xff0c;生成相应的语句并输出给用户&#xff0c;用户和聊天机器人之间的一问一答构成了一个utterance&#xff0c;多个utterance就构成了一段对话。目前流行的聊天机器人都是基于Transformer的架构来做的&…

FT2000+ openEuler 20.03 LTS SP3 yum install qemu手动创建虚拟机 图形界面安装openEuler 20.03系统

安装qemu yum install qemu -y 安装系统 创建虚拟硬盘 /usr/bin/qemu-img create -f qcow2 openEuler.qcow2 20g 挂载iso启动 /usr/bin/qemu-kvm -machine virt,accelkvm,usbon -cpu host -m 32G -smp 8,sockets1,cores8,threads1 -boot d -hda /home/yeqiang/qemu-virt…

python字符串模糊匹配,并计算匹配分数

一、thefuzz thefuzz包以前叫fuzzywuzzy&#xff0c;0.19版本开始改名为thefuzz&#xff0c;github地址&#xff1a; GitHub - seatgeek/thefuzz: Fuzzy String Matching in Python 可以通过命令pip install thefuzz安装此包。用法还是比较简单的: from thefuzz import fuz…

redis_exporter 结合prometheus 监控redis cluster集群

redis_exporter 结合prometheus 监控redis cluster集群 前提1&#xff1a;已经搭建好redis cluster集群前提2&#xff1a;已搭建好prometheus 1、下载redis_exporter wget https://github.com/oliver006/redis_exporter/releases/download/v1.50.0/redis_exporter-v1.50.0.l…

WebServer项目(三)->linux网络编程基础知识

WebServer项目[三]-&#xff1e;linux网络编程基础知识 1. I/O多路复用&#xff08;I/O多路转接&#xff09;2. select1)select简介2)select详解select具体怎么用?那FD_CLR函数是干嘛的?关于 fd_set,它具体是什么? 3. poll(改进select)4. epoll5.epoll的两种工作模式6.UDP通…

qemu-img resize gpt分区 parted修复分区信息 虚拟机 lvm 扩容根分区

扩容qcow2虚拟盘 关闭虚拟机 virsh destroy redflag1 qemu-img resize从20G扩容至40G qemu-img resize redflag.qcow2 40G 启动 virsh start redflag1 查看状态&#xff0c;当前无任何变化 fdisk 查看vda&#xff0c;已经变大 查看lvm信息 xfs_info 扩容虚拟机根分区 修…

KD2684S电机匝间耐电压测试仪

一、产品简介 试验仪适用于电机、变压器、电器线圈等这些由漆包线绕制的产品。因漆包线的绝缘涂敷层本身存在着质量问题&#xff0c;以及在绕线、嵌线、刮线、接头端部整形、绝缘浸漆、装配等工序工艺中不慎而引起绝缘层的损伤等&#xff0c;都会造成线圈层间或匝间绝缘层的绝缘…

BGP的路径属性及选路规则

路径属性 路径属性对于BGP而言&#xff0c;BGP路径属性描述了该条路由的各项特征&#xff0c;同时&#xff0c;路由携带的路径属性也在某些场景下影响BGP路由优选的决策。 公认属性-----所有的BGP路由器均可以识别的属性 强制属性-----指当BGP路由器使用update报文通报路由更新…