S3C6410 中的 cascaded irqdomain 之 gpio

news2024/11/17 7:33:49

文章目录

  • VIC 中断 与 gpio 中断 的硬件拓扑图描述
  • linux cascaded irq domain
    • irq domain 初始化时
    • 获取 IRQ number(软件中断号) 时
    • 中断发生时
    • 如何调试
    • 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 中断 与 gpio 中断 的硬件拓扑图描述

以下是 s3c6410a 的 irq 拓扑 描述,着重凸显了 gpio irq
以下 每个颜色 的gpio 共享一个vic 的中断线,5 个 中断线
-----------
注意 : 在linux 里面,将每个 gpx 注册为了一个domain!!!

在这里插入图片描述

linux cascaded irq domain

  • irq domain & 级联(cascaded)irq domain

irq domain 初始化时

s3c64xx_eint_eint0_init
	// 0. 处理 parents interrupt console 相关的 中断处理函数
	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);
	}
	// 1. 创建 irq domain
	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);
		// irq_domain_add_simple 的 第三个参数 first_irq如果为0 ,效果等同于 irq_domain_add_linear
		// first_irq: first number of irq block assigned to the domain,
		// pass zero to assign irqs on-the-fly. If first_irq is non-zero, then
		// pre-map all of the irqs in the domain to virqs starting at first_irq.
		// 如果第三个参数 不等于0 ,则 在该函数中 做 irq_create_mapping

获取 IRQ number(软件中断号) 时


使用domain 映射号码
	irq_create_mapping/irq_create_mapping_affinity
		// 2. 获取 软件中断号  并 创建 descs
		virq = irq_find_mapping(domain, hwirq);
		virq = irq_domain_alloc_descs(-1, 1, hwirq, of_node_to_nid(of_node), affinity);
		// 3. 绑定 domain 中的软件中断号 和 硬件中断号
			// 用domain 的 map函数 设置 高层 handler
		irq_domain_associate(domain, virq, hwirq)
			irq_set_chip_and_handler(virq, &s3c64xx_eint0_irq_chip, handle_level_irq);

中断发生时

  • 非级联的中断发生流程
一旦发生硬件中断,经过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  // 关注 irq_set_chip_data irq_get_chip_data 
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完全不同// 关注 irq_set_chip_data irq_get_chip_data 
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

如何调试

CONFIG_DYNAMIC_DEBUG=y
CONFIG_DEBUG_FS=y
CONFIG_GENERIC_IRQ_DEBUGFS=y
----------------
kernel/irq/Makefile
@@ -1,5 +1,6 @@
 # SPDX-License-Identifier: GPL-2.0
 
+ccflags-y += -DDEBUG -DVERBOSE_DEBUG
# pwd
/sys/kernel/debug/irq
# ls
domains  irqs
# ls -l 
total 0
drwxr-xr-x    2 root     root             0 Jan  1 00:00 domains
drwxr-xr-x    2 root     root             0 Jan  1 00:00 irqs

以下的文件都可以读

./domains:
:soc:interrupt-controller@71200000  :soc:pinctrl@7f008000:gph
:soc:interrupt-controller@71300000  :soc:pinctrl@7f008000:gpl
:soc:pinctrl@7f008000:gpa           :soc:pinctrl@7f008000:gpm
:soc:pinctrl@7f008000:gpb           :soc:pinctrl@7f008000:gpn
:soc:pinctrl@7f008000:gpc           :soc:pinctrl@7f008000:gpo
:soc:pinctrl@7f008000:gpd           :soc:pinctrl@7f008000:gpp
:soc:pinctrl@7f008000:gpf           :soc:pinctrl@7f008000:gpq
:soc:pinctrl@7f008000:gpg           default

./irqs:
0   10  12  14  16  18  2   21  23  25  27  29  30  32  4   6   8
1   11  13  15  17  19  20  22  24  26  28  3   31  33  5   7   9

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

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/486293.html

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

相关文章

python+excel的接口自动化测试框架实战教程(视频讲解+源码)

目录 设计流程图 Excel和结果预览 框架结构 Excel相关 日志封装 正则操作 核心操作 测试操作 测试报告发送邮件类 运行 设计流程图 这张图是我的excel接口测试框架的一些设计思路。 首先读取excel文件&#xff0c;得到测试信息&#xff0c;然后通过封装的requests方…

PyTorch中的优化器探秘:加速模型训练的关键武器

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

shell的基础学习三

文章目录 一、Shell 流程控制二、Shell 函数三、Shell 输入/输出重定向四、Shell 文件包含总结 一、Shell 流程控制 for 循环 与其他编程语言类似&#xff0c;Shell支持for循环。 for循环一般格式为&#xff1a; while 语句 while 循环用于不断执行一系列命令&#xff0c;也…

数字取证在打击和预防网络犯罪中的作用

数字取证在调查网络犯罪、防止数据泄露、在法律案件中提供证据、保护知识产权和恢复丢失的数据方面发挥着关键作用。 详细了解数字取证的重要性、如何进行网络安全调查以及数字取证专家面临的挑战。 数字取证的 4 种类型 数字取证涉及使用专门的技术和工具来检查数字设备、网…

【Python零基础学习入门篇④】——第四节:Python的列表、元组、集合和字典

⬇️⬇️⬇️⬇️⬇️⬇️ ⭐⭐⭐Hello&#xff0c;大家好呀我是陈童学哦&#xff0c;一个普通大一在校生&#xff0c;请大家多多关照呀嘿嘿&#x1f601;&#x1f60a;&#x1f618; &#x1f31f;&#x1f31f;&#x1f31f;技术这条路固然很艰辛&#xff0c;但既已选择&…

SPSS如何进行均值比较和T检验之案例实训?

文章目录 0.引言1.均值过程2.单样本T检验3.独立样本T检验4.成对样本T检验 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对SPSS进行了学习&#xff0c;本文通过《SPSS统计分析从入门到精通》及其配套素材结合网上相关资料进行学习笔记总结&#xff0c;本文对均值比较…

Day5_创建mapper文件/编写查询语句sql

上一节主要介绍了springboot集成mybatis进行&#xff0c;以及后端开发思想。这一节主要编写sql映射文件&#xff0c;即真正的sql语句。实现增删改查用户数据&#xff0c;以及配置application.yml或者configuration文件实现控制台打印SQL语句。 接着上一节编写续写~~~~~~ 目录…

目标检测模型量化---用POT工具实现YOLOv5模型INT8量化

POT工具是什么 POT工具&#xff0c;全称&#xff1a;Post-training Optimization Tool&#xff0c;即训练后优化工具&#xff0c;主要功能是将YOLOv5 OpenVINO™ FP32 模型进行 INT8 量化&#xff0c;实现模型文件压缩&#xff0c;从而进一步提高模型推理性能。 不同于 Quantiz…

vim操作笔记

1. Vim普通模式指令 指令描述yy复制当前行y{n}y复制当前行起的后面 n 行p在当前行粘贴{n}p在当前行重复粘贴 n 次dd删除当前行d{n}d删除当前行起的后面 n 行x剪切当前光标的字符X剪切当前光标的前一个字符r{char}替换一个字符R不定长替换yw复制一个词dw删除一个词&#xff08;…

【GAMES101】03 Transformation

2D线性变换 ——写成矩阵形式 1、Scale&#xff08;缩放&#xff09; 2、Reflection Matrix&#xff08;反射矩阵&#xff09; 3、Shear Matrix&#xff08;剪切矩阵&#xff09; 4、Rotation Matrix&#xff08;旋转矩阵&#xff09; 推导过程&#xff1a; 5、Translation Ma…

第十四届蓝桥杯大赛软件赛省赛(Java 大学B组)

目录 试题 A. 阶乘求和1.题目描述2.解题思路3.模板代码 试题 B.幸运数字1.题目描述2.解题思路3.模板代码 试题 C.数组分割1.题目描述2.解题思路3.模板代码 试题 D.矩形总面积1.问题描述2.解题思路3.模板代码 试题 E.蜗牛1.问题描述2.解题思路3.模板代码 试题 F.合并区域1.题目描…

Vue2加载倾斜摄影

vue3项目加载倾斜摄影 vue3项目加载倾斜摄影的教程可见此人的教程&#xff0c;亲测可用 https://blog.csdn.net/qq_37750030/article/details/124680036 vue2项目加载倾斜摄影 可是为什么到了vue2的老项目里面用不了呢&#xff1f; 原因在于这几个库&#xff0c;全是ts的&…

只出现一次(N次)的数字 / 出现次数最多的数字 / 数组中数字出现的次数

一.题目类型简介 数组中数字出现的次数是一类经典的问题&#xff0c;通常让我们求数组中数字出现的次数及其衍生的问题&#xff0c;比如&#xff0c;只出现一次的数字&#xff0c;只出现两次的数字&#xff0c;在一个数组中只有一个数字出现一次&#xff0c;其他出现两次或者三…

基于FPGA+JESD204B 时钟双通道 6.4GSPS 高速数据采集模块设计(二)研究 JESD204B 链路建立与同步的过程

基于 JESD204B 的采集与数据接收电路设计 本章将围绕基于 JESD204B 高速数据传输接口的双通道高速数据采集实现展 开。首先&#xff0c;简介 JESD204B 协议、接口结构。然后&#xff0c;研究 JESD204B 链路建立与同 步的过程。其次&#xff0c;研究基于 JESD204B …

linux驱动开发 - 10_阻塞和非阻塞 IO

文章目录 1 阻塞和非阻塞 IO1.1 阻塞和非阻塞简介1.2 等待队列1、等待队列头2、等待队列项3、将队列项添加/移除等待队列头4、等待唤醒5、等待事件 1.3 Linux驱动下的poll操作函数 2 阻塞 IO 实验1、驱动程序编写2、编写测试 APP3、编译驱动程序和测试 APP4、运行测试 3 阻塞 I…

elform 动态 rules

一.使用v-for渲染时 前端由于某些需求场景需要&#xff0c;部分表单的渲染是通过 v-for循环渲染显示&#xff0c;此时如何实现表单验证呢&#xff1f;如下&#xff0c;点击第一行的号可以动态的增加更多行表单&#xff0c;不同于单一固定的表单行[参见下文一般情况下]&#xf…

book-riscv-rev1.pdf 翻译(自用)第一章 操作系统接口

Job of operating system: 操作系统使得多个程序分享一台计算机&#xff0c;提供一系列仅靠硬件无法支持的服务。 管理与抽象低级别硬件&#xff08;如&#xff1a;文件处理程序不需要关注使用哪种硬盘&#xff09;使得多个程序分享硬件&#xff08;programs that can run at…

【代码练习】旋转矩阵题解思路记录分析

题目 给你一幅由 N N 矩阵表示的图像&#xff0c;其中每个像素的大小为 4 字节。请你设计一种算法&#xff0c;将图像旋转 90 度。 不占用额外内存空间能否做到&#xff1f; 示例 1: 给定 matrix [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵&#xff0c;使其变为: [ [7…

【C语言】学习

文章目录 前言1. warm up1.1 输出helloworld1.2 示例1.3 C语言程序结构 前言 以后要学习操作系统深度学习了&#xff0c;所以C语言就不可缺少了。 1. warm up 1.1 输出helloworld #include<stdio.h> void main() {printf("Hello World!!"); }std 标准 io输…

JS案例分析-某国际音x-tt-params参数分析

今天我们要分析的网站是&#xff1a;https://www.tiktok.com/selenagomez?langen&#xff0c;参数名字叫x-tt-params。 先来抓个包 这个接口是用户视频列表url&#xff0c;参数叫x-tt-params&#xff0c;该接口中还有其他参数像msToken&#xff0c;X-Bogus&#xff0c; _sig…