S3C6410 中的 irqdomain 之 gpio

news2024/9/30 1:32:18

文章目录

  • VIC domain 与 gpio domain 的硬件拓扑图描述
  • linux cascaded irq domain
  • linux irq domain 实例
  • VIC domain 与 gpio domain 的硬件拓扑语言描述
    • VIC 与 INT_EINTx 的关系
    • INT_EINTx 与 GPIO的关系
      • INT_EINT0
      • INT_EINT1
      • INT_EINT2
      • INT_EINT3
      • INT_EINT4
        • INT_EINT4 与 External interrupt Group1-9 的关系
        • External interrupt Group1
        • External interrupt Group2
        • External interrupt Group3
        • External interrupt Group4
        • External interrupt Group5
        • External interrupt Group6
        • External interrupt Group7
        • External interrupt Group8
        • External interrupt Group9

VIC domain 与 gpio domain 的硬件拓扑图描述

以下是 s3c6410a 的 irq domain 描述,着重凸显了 gpio irq domain
以下 每个颜色 是一个irq domain ,8个irq domain

在这里插入图片描述

linux cascaded irq domain

  • irq domain & 级联(cascaded)irq domain
// 仅用作示例
// gpio domain 注册的用于 vic 调用的handler
if (parent_irq) {                                                            
	irq_set_chained_handler(parent_irq, gpio_handle_irq_cascaded, v);
}  
  • 非级联的中断发生流程
一旦发生硬件中断,经过CPU architecture相关的中断代码之后,会调用irq handler,该函数的一般过程如下:

(1)首先找到root interrupt controller对应的irq domain。

(2)根据HW 寄存器信息和irq domain信息获取HW interrupt ID

(3)调用irq_find_mapping找到HW interrupt ID对应的irq number

(4)调用handle_IRQ(对于ARM平台)来处理该irq number
  • 级联中断发生流程

按照当前 gpio 级联到 vic
假设 vic0 是 A, GPN0-3的domain 是 B
假设 GPN0 发生了中断

A.1首先找到root interrupt controller(在这里是vic)对应的irq domain
A.2根据VIC HW 寄存器信息和irq domain信息获取HW interrupt ID  // VIC0的 0
A.3调用irq_find_mapping找到HW interrupt ID(在这里是0)对应的irq number
A.4调用irq domain B 注册 的 handler( irq_set_chained_handler 设定的gpio_handle_irq_cascaded)

B.1gpio_handle_irq_cascaded找到gpio对应的irq domain // 和 A.1 中的irq domain完全不同
B.2根据GPIO HW 寄存器信息和irq domain信息获取HW interrupt ID // 和 A.2 中的HW interrupt ID完全不同
B.3调用irq_find_mapping找到HW interrupt ID对应的irq number // 和 A.3 中的 irq number 完全不同
B.4调用 驱动 注册 的 handler( request_irq 设定的) // 这个驱动对应的设备用到了 GPN0

linux irq domain 实例

irq: Added domain :soc:interrupt-controller@71200000
irq: Added domain :soc:interrupt-controller@71300000
irq: Added domain :soc:pinctrl@7f008000:gpa
irq: Added domain :soc:pinctrl@7f008000:gpb
irq: Added domain :soc:pinctrl@7f008000:gpc
irq: Added domain :soc:pinctrl@7f008000:gpd
irq: Added domain :soc:pinctrl@7f008000:gpf
irq: Added domain :soc:pinctrl@7f008000:gpg
irq: Added domain :soc:pinctrl@7f008000:gph
irq: Added domain :soc:pinctrl@7f008000:gpo
irq: Added domain :soc:pinctrl@7f008000:gpp
irq: Added domain :soc:pinctrl@7f008000:gpq
irq: Added domain :soc:pinctrl@7f008000:gpl
irq: Added domain :soc:pinctrl@7f008000:gpm
irq: Added domain :soc:pinctrl@7f008000:gpn
irq: Added domain :soc:pinctrl@7f008000:gpn
irq: -> using domain @c0889d80
SUD File: kernel/irq/irqdomain.c, Line: 00557: irq_domain_associate,domain:c0889d80,virq:33,hwirq:7
SUD File: kernel/irq/irqdomain.c, Line: 00559: irq_domain_associate,c024afa8 // s3c64xx_eint0_irq_map domain->ops->map
SUD File: kernel/irq/irqdomain.c, Line: 00499: irq_domain_set_mapping,7,16
irq: irq 7 on domain gpn mapped to virtual irq 33
s3c64xx_eint_eint0_init
	for (i = 0; i < NUM_EINT0_IRQ; ++i) { // 设置 parent 相关的irq
		irq = irq_of_parse_and_map(eint0_np, i);
		irq_set_chained_handler_and_data(irq, s3c64xx_eint0_handlers[i], data);
	}

	for (i = 0; i < d->nr_banks; ++i, ++bank) {
		bank->irq_domain = irq_domain_add_linear(bank->of_node, nr_eints, &s3c64xx_eint0_irqd_ops, ddata);
	}

使用domain 映射号码
	irq_create_mapping


VIC domain 与 gpio domain 的硬件拓扑语言描述

VIC 与 INT_EINTx 的关系

Int. No.SourcesDescriptionGroup
53INT_EINT4External interrupt Group 1 ~ Group 9VIC1
33INT_EINT3External interrupt Group 0 20 ~ 27VIC1
32INT_EINT2External interrupt Group 0 12 ~ 19VIC1
1INT_EINT1External interrupt Group 0 4 ~ 11VIC0
0INT_EINT0External interrupt Group 0 0 ~ 3VIC0

INT_EINTx 与 GPIO的关系

INT_EINT0

External interrupt Group 0  0 - 15  <===> GPN0-GPN15
	GPN0-3			: 0
	GPN4-11			: 1
	GPN12-15 & GPL8-GPL11 : 32
External interrupt Group 0  16 - 22 <===> GPL8-GPL14
	GPL12-GPL14 & GPM0-GPM4 : 33
External interrupt Group 0  23 - 27 <===> GPM0-GPM4

INT_EINT1

External interrupt Group 0  0 - 15  <===> GPN0-GPN15
External interrupt Group 0  16 - 22 <===> GPL8-GPL14
External interrupt Group 0  23 - 27 <===> GPM0-GPM4

INT_EINT2

External interrupt Group 0  0 - 15  <===> GPN0-GPN15
External interrupt Group 0  16 - 22 <===> GPL8-GPL14
External interrupt Group 0  23 - 27 <===> GPM0-GPM4

INT_EINT3

External interrupt Group 0  0 - 15  <===> GPN0-GPN15
External interrupt Group 0  16 - 22 <===> GPL8-GPL14
External interrupt Group 0  23 - 27 <===> GPM0-GPM4

INT_EINT4

INT_EINT4 与 External interrupt Group1-9 的关系

在这里插入图片描述

External interrupt Group1

EINT1 0 - 7   <===> GPA 0 - 7
EINT1 8 - 14  <===> GPB 0 - 6

External interrupt Group2

EINT2 0 - 7   <===> GPC 0 - 7

External interrupt Group3

EINT3 0 - 4   <===> GPD 0 - 4

External interrupt Group4

EINT4 0 - 13   <===> GPF 0 - 13

External interrupt Group5

EINT5 0 - 6   <===> GPG 0 - 6

External interrupt Group6

EINT6 0 - 9   <===> GPH 0 - 9

External interrupt Group7

EINT7 0 - 15   <===> GPO 0 - 7

External interrupt Group8

EINT8 0 - 14   <===> GPP 0 - 7

External interrupt Group9

EINT9 0 - 8   <===> GPQ 0 - 8

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

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

相关文章

【Elasticsearch】DSL操作相关

文章目录 DSL操作索引操作新建索引查询索引查看所有索引删除索引 映射操作创建映射查看映射索引映射关联(同创建映射类似) 文档操作创建文档查询指定ID文档查询所有文档全局修改文档局部修改文档删除文档条件删除 数据搜索数据准备条件查询(match)多字段条件查询(multi_match)关…

VMware 虚拟机中 Linux 系统Centos7磁盘空间扩容(亲测)

1.修改虚拟机磁盘容量 例如之前虚拟机磁盘空间为30G&#xff0c;现要将磁盘容量设置为50G 打开虚拟机&#xff08;必须处于关机状态&#xff09;&#xff0c;点击【编辑虚拟机设置】&#xff0c;然后点击【磁盘】&#xff0c;接着点击【扩展】&#xff0c;输入修改后的最大磁盘…

LangChain入门(二)-通过 Google 搜索并返回答案

GitHub - liaokongVFX/LangChain-Chinese-Getting-Started-Guide: LangChain 的中文入门教程LangChain 的中文入门教程. Contribute to liaokongVFX/LangChain-Chinese-Getting-Started-Guide development by creating an account on GitHub.https://github.com/liaokongVFX/La…

js实现继承属性和方法

js实现继承属性和方法 1 使用extends实现继承2 原型链继承3 组合继承4 寄生组合继承5 实例继承6 拷贝继承7 扩展7.1 函数中方法定义在函数内部、函数外、prototype上的区别7.2 class创建实例与构造函数创建实例 首先定义一个父类 function Animal (name, age) {this.name nam…

Java Web案例:实现用户登录功能

文章目录 零、本节学习目标一、纯JSP方式实现用户登录功能&#xff08;一&#xff09;实现思路&#xff08;二&#xff09;实现步骤1、创建Web项目2、创建登录页面3、创建登录处理页面4、创建登录成功页面5、创建登录失败页面6、编辑项目首页 &#xff08;三&#xff09;测试结…

【JavaEE】CSS基础知识

文章目录 1.CSS概念1.1CSS是干啥的&#xff1f;1.2基础语法规范1.2基础语法规范1.3引入格式✨内部样式表✨行内样式表✨外部样式&#xff08;最常用的样式&#xff09; 1.4代码风格✨样式格式✨样式大小写 2.选择器2.1选择器的功能2.2基础选择器有哪些&#xff1f;&#x1f6e0…

GPT 告诉你请求到达 Tomcat 是怎么处理的

tomcat如何监听请求到达 没有SpringMVC,tomcat 如何处理请求 Tomcat 线程池的作用是什么 如何配置tomcat 线程池 tomcat 线程池的主要任务是处理连接请求 tomcat线程池是怎么实现的 到这里可以看出来&#xff0c;tomcat线程池的实现方式也是通过ThreadPoolExecutor 实现 如何根…

Git 使用教程整理

一、配置Git 编码为utf-8 设置登陆账号 使用Git GUI操作 二、获取远程仓库代码 推荐使用使用 git bash 命令&#xff1a;git clone xxx git clone https://github.com/jeromeetienne/jquery-qrcode.git 其他参考&#xff1a;使用Git获取最新版本到本地_gitgui 获取新版本_天…

【Java开发】Spring Cloud 11 :Gateway 配置 ssl 证书(https、http 访问)

最近研究给微服务项目配置 ssl 证书&#xff0c;如此才可以对接微信小程序&#xff08;需要使用 https 请求&#xff09;。传统单体项目来说&#xff0c;首先往项目中添加证书文件&#xff0c;然后在配置文件中配置 ssl 证书路径、密码等相关信息&#xff1b;那么微服务这么多项…

高性能定时器--时间轮/多级时间轮

运行原理 指针指向轮子上的一个槽&#xff0c;轮子以恒定的速度顺时针转动&#xff0c;每转动一步就指向下一个槽&#xff08;虚线指针指向的槽&#xff09;&#xff0c;每次转动称为一个tick&#xff0c;一个tick的时间称为时间轮的槽间隔slot interval&#xff0c;即心搏时间…

3。数据结构(2)

嵌入式软件开发第三部分&#xff0c;各类常用的数据结构及扩展&#xff0c;良好的数据结构选择是保证程序稳定运行的关键&#xff0c;&#xff08;1&#xff09;部分包括数组&#xff0c;链表&#xff0c;栈&#xff0c;队列。&#xff08;2&#xff09;部分包括树&#xff0c;…

JavaWeb_Web前端_Element组件库

JavaWeb_Web前端_Element组件库 快速入门安装ElementUI组件库引入ElementUI组件库添加组件并导入到根组件添加组件导入到根组件 Table 表格Pagination 分页Dialog对话框表单 案例Vue路由Vue类DeptView.vue动态视图组件请求链接组件 打包和部署打包打包按钮打包文件 部署部署静态…

OpenAI文本生成器-OpenAI文本生成器

openai自动批量写文章 如果您正在寻找一个能够自动生成高质量文章的工具&#xff0c;OpenAI 写文章就是您需要的推广神器。 OpenAI 写文章基于 OpenAI 最先进的语言模型技术&#xff0c;可以使用自然语言生成技术自动创作文章。只需在平台上提供少量的关键词或概念&#xff0…

Python每日一练:最长递增区间狄杰斯特拉(80分)K树(0分)

文章目录 前言一、最长递增区间二、狄杰斯特拉&#xff08;80&#xff09;三、K树&#xff08;0&#xff09;总结 前言 很显然&#xff0c;Python的受众远远大于C&#xff0c;其实笔者本人对Python的理解也是远强于C的&#xff0c;C纯粹是为了假装笔者是个职业选手才随便玩玩的…

java基础入门-04

Java基础入门-04 11、集合&学生管理系统11.1.ArrayList集合和数组的优势对比&#xff1a;11.1.1 ArrayList类概述11.1.2 ArrayList类常用方法11.1.2.1 构造方法11.1.2.2 成员方法11.1.2.3 示例代码 11.1.3 ArrayList存储字符串并遍历11.1.3.1 案例需求11.1.3.2 代码实现 11…

基于野火F407骄阳开发板的苹果采摘机器人机械臂的采摘轨迹与夹持器的采摘动作的设计(1)

基于野火F407骄阳开发板的苹果采摘机器人机械臂的采摘轨迹与夹持器的采摘动作的设计&#xff08;1&#xff09; 苹果采摘机器人1、采摘流程与硬件设计2、机械臂驱动以及采摘轨迹设计2.1、台达A2电机驱动实现2.2、机械臂寻找苹果巡逻轨迹 苹果采摘机器人 1、采摘流程与硬件设计…

fio 使用碰到的坑,一些不常用,但可能用到的参数(校验 跳跃 多线程)

1&#xff0c; 祼盘读写 一个分区 -filename/dev/sdb1 同时测试多个分区 -filename/dev/sdb1;/dev/sdb2 比例&#xff1a; fio -filename/dev/sdb1 -direct1 -iodepth 1 -thread -rwrandread -ioenginepsync -bs4k -size50G -numjobs10 -runtime1000 -group_reporting -nam…

es6的语法糖,展开运算符,类的实现

1.0 ES6语法糖 [重点] 1.1数组的解构赋值 // 声明多个变量 let [a,b,c] [1,2,3] ​ let a1&#xff0c;b2&#xff1b; // 交换数值 [a,b] [b,a] ​2 1.12 函数的参数结构 1.2对象的解构 对象存在键值对&#xff0c;如果需要解构对象&#xff0c;你需要使用对象的键名为变量…

Flask 知识点整理

文章目录 1.URL与视图的映射带参数的url&#xff1a;将参数固定到了path中查询字符串的方式传参 2.模板渲染给html文件传参 3.模板访问对象属性User 是个类User是个字典 4.过滤器的使用通过一个 | 管道符进行过滤自定义过滤器 5.控制语句iffor 1.URL与视图的映射 带参数的url&…

IIC总线简介

IIC总线 IIC总线是Philips公司在八十年代初推出的一种串行、半双工总线 主要用于近距离、低速的芯片之间的通信&#xff1b;IIC总线有两根双向的信号线一根数据线SDA用于收发数据&#xff0c;一根时钟线SCL用于通信双方时钟的同步&#xff1b;IIC总线硬件结构简单&#xff0c;成…