首页
学习
活动
专区
圈层
工具
发布

OpenHarmony 内核源码分析(中断管理篇) | 江湖从此不再怕中断

SGI:软件触发中断(Software Generated Interrupt)通常用于多核间通讯,最多支持16个SGI中断,硬件中断号从ID0~ID15。...SGI通常在内核中被用作 IPI 中断(inter-processor interrupts),并会送达到系统指定的CPU上,函数的最后就注册了三个核间中断的函数....;注册硬中断/****************************************************************************** 创建一个硬中断 中断创建,注册中断号...寄存器提供的,这是一个专门保存当前中断号的寄存器.第二步:从注册表g_hwiForm中查询注册函数,同时取出参数.第三步:执行函数,也就是回调注册函数,分有参和无参两种情况 func(...)...,在中断共享的情况,注册函数会指向 next 注册函数pstNext,依次执行回调函数,这是中断共享的实现细节.

28310
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    6.分析request_irq和free_irq函数如何注册注销中断(详解)

    上一节讲了如何实现运行中断,这些都是系统给做好的,当我们想自己写个中断处理程序,去执行自己的代码,就需要写irq_desc->action->handler,然后通过request_irq()来向内核申请注册中断...本节目标:      分析request_irq()如何申请注册中断,free_irq()如何注销中断 1.request_irq()位于kernel/irq/ manage .c,函数原型如下: int...,比如外部中断0就是16,定义在mach/irqs.h irq_handler_t  handler:为要注册的中断服务函数,就是(irq_desc+ irq )->action->handler unsigned...const char  *devname:中断程序的名字,使用cat /proc/interrupt 可以查看中断程序名字 void  *dev_id:传入中断处理程序的参数,注册共享中断时不能为NULL...2.request_irq()是注册中断,同样的卸载中断的函数是free_irq() free_irq()也位于kernel/irq/ manage .c,函数原型如下: free_irq(unsigned

    3.6K90

    Zynq中PS的MIO中断

    Zynq中断大致可分为三个部分 第一部分为SGI,软件生成的中断,共16个端口; 第二部分为PPI,CPU私有外设中断,有5个; 第三部分为SPI,共享外设中断,来自于44个PS端的IO外设以及16个PL...以下为中断控制器框图,主要的控制器部分为ICC和ICD,ICD连接SGI和PPI,ICD连接SPI,可配置两者的寄存器来控制中断。 ? SGI中断(软件产生中断),共16个IRQ ID号 ?...PPI中断,CPU私有中断,共5个IRQ ID号 ? SPI中断部分,共60个IRQ ID号 ? ?...接下来设置带有中断的GPIO INT_MASK:中断掩码 INT_DIS: 中断关闭 INT_EN: 中断使能 INT_TYPE: 中断类型,设置电平敏感还是边沿敏感 INT_POLARITY...GPIO初始化à设置按键和LED方向à设置产生中断方式à设置中断à打开中断控制器à打开中断异常à打开GPIO中断à判断KEY_FLAG值,是1,写LED GPIO_CONFIG =XGpioPs_LookupConfig

    2.2K30

    OpenHarmony内核源码分析(中断概念篇) | 海公公的日常工作

    .中断管理篇 从中断初始化HalIrqInit开始,到注册中断的LOS_HwiCreate函数,到消费中断函数的 HalIrqHandler,剖析鸿蒙内核实现中断的过程,很像设计模式中的观察者模式....类似于皇上自己的一些私事,不方便说的,比如大明湖畔的夏雨荷来了.SGI:软件触发中断(Software Generated Interrupt)通常用于多核间通讯,最多支持16个SGI中断,硬件中断号从...SGI通常在内核中被用作核间中断(inter-processor interrupts),信号会送达到系统指定的CPU上.主要用于多个皇上(CPU)并存的情况,皇上们直接约一起玩.SPI:公用外设中断(...简单一句话就是:共用一个折子,分别办多件事.核间中断属于SGI中断类型,对于多核系统,中断控制器允许一个CPU的硬件线程去中断其他CPU的硬件线程,这种方式被称为核间中断。...皇上之间可以相互使唤,停止工作.比如:A皇上通过海公公让B皇上休息.功能API功能分类接口名描述创建和删除中断LOS_HwiCreate中断创建,注册中断号、中断触发模式、中断优先级、中断处理程序。

    24220

    浅谈OpenHarmony LiteOS-A内核之基础硬件——中断控制器GIC400

    ③SGI(Software-generated Interrupt),软件中断,由软件触发引起的中断,通过向寄存器GICD_SGIR写入数据来触发,系统使用SGI中断来完成多核之间的通信。...在图中,SGI是软件(软件运行在CPU上)触发,所以SGI中断源头是各个CPU上的应用,另外SGI和PPI一样,每个CPU都有属于自己的SGI,所以必须指定CPU。...1020 个ID包含了PPI、SPI和SGI,那么这三类中断是如何分配这 1020 个中断 ID 的呢?...比如 I.MX6U 的总共使用了128个中断ID,加上前面属于PPI和SGI的32个ID,I.MX6U的中断源共有128+32=160个。...4、触发路径下面总结下SGI、PPI、SPI三种类型中断的触发路径:SGI(ID0-ID15):是由CPU内部软件触发,所以从CPU CORE-->CPU interface-->Distributor

    48620

    Linux BSP实战课(中断篇):中断控制器的硬件实现

    中断在系统中的作用 中断机制在处理器中扮演着一个至关重要的角色,它是处理器异步响应外围设备请求的核心方式。...GIC v3中断类别 GICv3定义了以下中断类型: SGI (Software Generated Interrupt):软件触发的中断。...软件可以通过写 GICD_SGIR 寄存器来触发一个中断事件,一般用于核间通信,内核中的 IPI:inter-processor interrupts 就是基于 SGI。...SPI (Shared Peripheral Interrupt):公用的外部设备中断,也定义为共享中断。中断产生后,可以分发到某一个CPU上。比如按键触发一个中断,手机触摸屏触发的中断。...中断类型 硬件中断号 SGI 0-15 PPI 16-31 SPI 32-1019 reserved ...... LPI 8192-MAX

    97110

    FPGA Xilinx Zynq 系列(二十二)Zynq 片上系统概述之存储器

    软件产生的中断 (SGI) 每个 CPU 都能用 SGI 来中断自己、另一个 CPU 或同时中断两个 CPU。表 10.13 总结了 16 个 SGI[5]。...向软件产生的中断寄存器(Software Generated Interrupts Register,ICDSGIR)写入 SGI 中断编号并指定目标 CPU (或两个 CPU),就产生了一个 SGI。...每个 CPU 各自有一组 SGI寄存器,可以产生 16 个软件产生中断中的一个或多个。...所有的 SGI 都是边缘触发的,它们的敏感性类型是固定的,而且不能被修改。 表 10.13: 软件产生的中断 (SGI) [5] ?...中断优先级定序 所有的中断请求,无论是 PPI、SGI 还是 SPI,都被赋予了一个唯一的 ID 编号, 以用于中断控制器的仲裁。

    3.4K32

    ARMv8-A Generic Interrupt Controller(GIC)

    此图中涉及了好几个概念,Distributor, CPU Interface, Redistributor, SGI, PPI, SPI, LPL 可以先看下面的中断状态和Distributor和CPU-interface...的概念 SPI会先从Distributor路由到Target Redsitributor,然后再路由到CPU-interface模块 PPI直接会路由到local的Redsitributor SGI中断类型是由软件触发的...,则会从core路由到CPU-interface和Redsitributor模块,然后会到Dsitributor模块,决定路由到一个或者多个cpu上 中断类型 GIC-v3中定义了四种中断类型 SGI(...使能或者关闭此中断(使能状态) 对中断进行设置优先级(优先级) 设置此中断的触发方式,是边沿触发还是电平触发(触发方式) 控制中断的状态(中断状态) 使能或者关闭Securiy(中断安全状态) 设置中断的...模块,当触发中断后,会由Distributor模块来设置中断的状态,以及路由到那个cpu 控制中断的状态,是否已经处理完毕(状态控制) 标识一个中断,获取中断的中断号(获取中断号) 设置中断的优先级,如果多个中断同时到

    2.8K51

    Linux系统GIC介绍与编程

    中断在软件中由一个称为中断ID的数字标识。中断ID唯一对应于一个中断源。软件可以使用中断ID来识别中断源并调用相应的处理程序来处理中断。...中断可以有多种不同的类型: ① 软件触发中断(SGI,Software Generated Interrupt) 这是由软件通过写入专用仲裁单元的寄存器即软件触发中断寄存器(ICDSGIR)显式生成的...SGI既可以发给所有的核,也可以发送给系统中选定的一组核心。中断号0-15保留用于SGI的中断号。用于通信的确切中断号由软件决定。...位域 名 读写 描述 [31:13] - 保留 [12:10] CPUID R 对于SGI类中断,它表示谁发出了中断。...位域 名 读写 描述 [31:13] - 保留 [12:10] CPUID W 对于SGI类中断,它的值跟GICD_IAR. CPUID的相同。

    2.8K20

    内核中断子系统介绍

    中断事件:指中断事件本身的抽象。 中断号:用于硬件和软件识别并区分中断事件,需要注意同一个中断事件在中断处理的不同阶段未必是同一个中断号。 中断源:有中断事件需要 cpu 处理的硬件。...中断控制器:非必须,用于解决系统拥有多中断源场景的硬件;从中断源接收中断事件并传递到 cpu;可以级联。 cpu:收到中断,cpu 跳转到特定的地址——中断向量。由中断向量开始软件对中断的处理。...中断源驱动获取到 irq,还需要将 irq 与中断处理函数建立映射: request_irq/request_threaded_irq:驱动将中断处理函数注册到 irq。...不同的中断在 gic 上对应着不同的 INTID;gic 把中断类型分为 LPI、PPI、SPI、SGI,约束 INTID 取值对应的中断类型。...SGI 指由 CPU 直接写对应的寄存器触发中断;PPI 指中断为特定一个 CPU 私有/专用,同一中断号的 PPI 在不同 CPU 可以指不同的中断源;SPI 对应 PPI,是所有 CPU 全局共享的

    1.7K21

    11_GPIO中断

    接下来看一下GIC内部过程,如下图: ​ 中断源分为SPI(Shared Peripheral Interrupt)、PPI(Private Peripheral Interrupt)、SGI request...1.4.3 GIC的初始化 ​ 通过CP15获取GIC的基地址,读取GICD_TYPER寄存器获得中断的数目,往GICD_ ICENABLERn寄存器写入0xFFFFFFFF禁用所有的SGI,PPI和SPI...C函数部分 ​ 获取到gic的基地址后,读取GICC_IAR获得中断号,根据中断号调用对应中断号的irq_handler函数,该函数是用户通过request_irq注册的中断处理函数,然后往GICC_EOIR...然后调用request_irq注册对应中断的中断处理函数,对于GPIO5_01是key_gpio5_handle_irq,中断处理函数里根据按键按下和松开分别在串口打印,并且按下时绿灯点亮,松开时绿灯熄灭...,key_irq_init初始化按键中断的GPIO配置和注册中断处理函数,通过gic_init初始化GIC控制器,最后通过gic_enable_irq使能按键对应GIC中断号使用的中断。 ​

    1.8K20

    大模型与AI底层技术揭秘(21)幽灵的暗流

    较为复杂的机制是ARM的中断管理。 ARM的终端管理由GIC(Generic Interrupt Controller)来控制。...GIC的作用为: 1、接受硬件中断电信号; 2、进行初步处理,确定这个电信号应当触发哪个中断; 3、将中断分发到处理者。..._64的APIC,可基于CPU的配置,将到来的中断源派发到Redistributer; Redistributer:用于管理PPI(Private Peripheral Interrupt,私有外设终端...)/SGI(Software Generated Interrupt,软件生成中断)/LPO(Locality-specific Peripheral Interrupt,本地特殊外设终端),将这些中断发送到...CPU Interface; CPU Interface:将中断传输给Core; ITS:用来解析LPI中断; 其中,Distributer,Redistributer和ITS在GIC内部实现,而CPU

    33810
    领券