首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

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

2.8K90

Linux 中断子系统(二):GIC 中断控制器

③、SGI(Software-generated Interrupt),软中断,由软件触发引起的中断,通过向寄存器 GICD_SGIR 写入数据来触发,系统会使用 SGI 中断来完成多核之间的通信。...GIC-v2中每一个 CPU 最多支持 1020 个中断 ID,中断 ID 号为 ID0~ID1019。这 1020 个 ID 包 含了 PPI、SPI 和 SGI。...这 1020 个 ID 分 配如下: ID0~ID15:这 16 个 ID 分配给 SGI。每个CPU核都有自己的16个。 ID16~ID31:这 16 个 ID 分配给 PPI。...SPI、SGI、PPI,但是最后都会到 CPU interface,CPU interface 再给 CPU core ,CPU core 只认为有四种中断类型,普通都是 IRQ。...GIC-v3 的架构变化如下:以前 SPI、PPI、SGI 都归 Distributor(分发器端) 管,现在只有 SPI 归 Distributor管,PPI、SGI、LPI 都归 Redistributor

5.5K20

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

1.8K30

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

15710

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 编号, 以用于中断控制器的仲裁。

2.1K30

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.2K51

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.2K20

内核中断子系统介绍

中断事件:指中断事件本身的抽象。 中断号:用于硬件和软件识别并区分中断事件,需要注意同一个中断事件在中断处理的不同阶段未必是同一个中断号。 中断源:有中断事件需要 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 全局共享的

1K20

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.1K20

大模型与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

10310
领券