首页 > 其他分享 >12、链式终端控制器知识点

12、链式终端控制器知识点

时间:2024-11-24 16:36:19浏览次数:4  
标签:知识点 控制器 12 中断 irq virq GIC 链式 GPIO

1. 链式中断控制器的重要函数和结构体

1.1 回顾处理流程

为方便描述,假设下级的链式中断控制器就是GPIO控制器。

 

沿着中断的处理流程,GIC之下的中断控制器涉及这4个重要部分:handleB、GPIO Domain、handleC、irq_chip

  • handleB:处理GIC 33号中断,handleB由GPIO驱动提供

    • 屏蔽GIC 33号中断:调用irq_dataA的irq_chip的函数,irq_dataA由GIC驱动提供

    • 细分并处理某个GPIO中断:

      • 读取GPIO寄存器得到hwirq,通过GPIO Domain转换为virq,假设是102

      • 调用irq_desc[102].handle_irq,即handleC

    • 清除GIC 33号中断:调用irq_dataA的irq_chip的函数,由GIC驱动提供

  • handleC:处理GPIO 2号中断,handleC由GPIO驱动提供

    • 屏蔽GPIO 2号中断:调用irq_dataB的irq_chip的函数,由GPIO驱动提供

    • 处理:调用actions链表中用户注册的函数

    • 清除GPIO 2号中断:调用irq_dataB的irq_chip的函数,由GPIO驱动提供

 

1.2 irq_domain的核心作用

怎么把handleB、GPIO Domain、handleC、irq_chip这4个结构体组织起来,irq_domain是核心。

我们从使用中断的流程来讲解。

  • 在设备树里指定使用哪个中断

        gpio_keys_100ask {
          compatible = "100ask,gpio_key";
    interrupt-parent = <&gpio5>;
    interrupts = <3 IRQ_TYPE_EDGE_BOTH>,
      };
  • 内核解析、处理设备树的中断信息

    • 根据interrupt-parent找到驱动程序注册的irq_domain

    • 使用irq_domain.ops中的translate或xlate函数解析设备树,得到hwirq和type

    • 分配/找到irq_desc,得到virq

      • 把(hwirq, virq)的关系存入irq_domain

      • 把virq存入platform_device的resource中

    • 使用irq_domain.ops中的alloc或map函数进行设置

      • 可能是替换irq_desc[virq].handle_irq函数

      • 可能是替换irq_desc[virq].irq_data,里面有irq_chip

  • 用户的驱动程序注册中断

    • 从platform_device的resource中得到中断号virq

    • request_irq(virq, ..., func)

  • 发生中断、处理中断:处理流程见上面。

    2. 硬件模型

    下图中列出了链式中断控制器、层级中断控制器,本节课程只涉及左边的链式中断控制器。

    内核中有各类中断控制器的驱动程序,它们涉及的硬件过于复杂,从这些杂乱的代码中去讲清楚中断体系,比较难。

    我们实现一些虚拟的中断控制器,如下图所示。

    实际板子中,我们可以通过按键触发中断。

    对于这些虚拟的中断控制器,我们没有真实按键,通过devmem指令写GIC的PENDING寄存器触发中断。

     

标签:知识点,控制器,12,中断,irq,virq,GIC,链式,GPIO
From: https://www.cnblogs.com/liusiluandzhangkun/p/18565923

相关文章

  • 计算机科学导论 简洁版知识点总结(一)
    概要第一章课后习题知识点总结第二章计算基础 1️⃣第一章 课后习题知识点总结1.第一代计算机采用的逻辑元件是电子管。2.计算机主机是指CPU和内存储器。3.天气预报的主要数据处理任务都是由计算机完成的,这属于计算机的科学计算与数据处理应用领域。4.数控机床是计......
  • java web 知识点 & 项目结构及代码
    概念第一部分请求转发在服务器内部完成,地址栏URL不变,适合数据共享;而请求重定向则在客户端完成,导致URL变化,适合需要通知用户访问新页面的场景。GET一般用于获取数据,适合用于不改变服务器状态的请求,适合传输少量数据。POST用于提交数据并可能改变服务器状态,适合传输大量数据和......
  • 扫雷游戏升级版 含递归链式展开(一次展开一片区域) 代码详细解读 C语言
    1、前言:我看了CSDN有很多小伙伴也写了扫雷小游戏但是大部分写的代码都是一次输入坐标只能展开一个位置并没有还原我们小时候最初始的游戏玩法可玩性很低 我在这用函数递归链式展开一片还原最初始游戏提高可玩性 先放效果图↓2、建议:一个程序代码的实现并不是只靠......
  • 125款七夕情人节程序员专属表白网站【全网最全】HTML+CSS+JS
    ......
  • LeetCode:1207.独一无二的出现次数——Java哈希表
    目录1.题目如下: 2.题目解析:3.暴力解法:4.复杂度分析:1.题目如下: 给你一个整数数组 arr,如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。示例1:输入:arr=[1,2,2,1,1,3]输出:true解释:在该数组中,1出现了3次,2出现了2次,3只出现了1次。没......
  • 学习日记_20241123_聚类方法(MeanShift)
    前言提醒:文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展及意见建议,欢迎评论区讨论交流。文章目录前言聚类算法经典应用场景MeanShift优......
  • 1123-最小栈
    最小栈leetcode155.题目大意:设计一个栈,要求在常数时间内检测到最小元素解题思路:设置一个存最小元素的栈,这样就可以同步更新最小值题解及注释:classMinStack{privateStack<Integer>stack;privateStack<Integer>minStack;//最小栈//初始化public......
  • 1123模拟赛
    \(T1\),注意点与边不同阶时分着开,别开小了。\(T2\)当dp数组由于太大开不下时,可以用记忆化搜索代替。最长不公共子序列:首先可推出\(f[i][j]=min(f[i-1][j],f[i][j-1])(a[i]==b[j]),f[i-1][j-1]+1(a[i]!=b[j])\),由于一段连续的\(a[i]!=b[j]\)可以一下全消掉,所以可以看一个\(a[i]......
  • 20241123-四元数高阶奇异值分解-(1)
    四元数高阶奇异值分解及其在彩色图像处理中的应用-(1)......
  • 20241123-四元数高阶奇异值分解-(4-5)
    四元数高阶奇异值分解及其在彩色图像处理中的应用-(4-5)......