Cortex-R52 GIC:Generic Interrupt Controller(一)

news2024/9/20 6:04:28

ARM Cortex-R52 GIC:Generic Interrupt Controller

1.关于GIC

1.1 GIC Overview

ARM的中断控制器被称为GIC(Generic Interrupt Controller),GIC是支持和管理系统中断的资源的模块。它支持中断优先级、中断路由到CPU或输出端口、中断抢占和中断虚拟化等功能。
在这里插入图片描述中断控制器是中断源(外设)和CPU之间的桥梁;

1.2 GIC 架构

在多核时代中,中断控制器被分成两个部分可以更好地支持和管理多处理器系统中的中断。其中一部分是连接外设中断源的I/O APIC,由所有CPU共享。I/O APIC可以通过向指定的CPU发送中断消息实现并发中断处理。另一部分是Local APIC,与每个CPU对应,用于控制本地处理器的中断。它可以在单个处理器上快速响应和处理中断请求,在多处理器环境中也可以把中断请求发送到其他处理器或者操作系统内核来协调处理,从而提高中断处理的效率。

总之,随着多处理器技术的不断发展,中断控制器变得越来越复杂,但也使得系统更加灵活和高效。

在这里插入图片描述

1.3 ARM R52 GIC-v3架构

Cortex-R52处理器采用了ARM公司推出的GIC V3架构,这是一种高度灵活和可扩展的中断控制器架构,特别适用于多核处理器系统。GIC V3架构包括一个内部的GIC分配器(Distributer),每个核还包含一个GIC重分配器(Redistributor)。

GIC Distributer类似于传统计算机系统中的I/O APIC,它负责将来自各种中断源的中断请求转发给相应的Redistributor,并根据CPU的配置和优先级设置进行派发。与传统的I/O APIC不同的是,GIC Distributer还支持像处理器间直接消息传递(Inter-Processor Interrupt,IPI)这样的特殊中断类型,可以通过GIC协议灵活地配置和管理各种中断源。

GIC Redistributor类似于传统计算机系统中的Local APIC,它负责为每个CPU接收并处理来自Distributer派发的中断请求,以及发送处理器间直接消息传递(IPI)的请求。GIC Redistributor可以访问Distributer的寄存器和内存映射区域,以获取有关中断状态和优先级的信息,并根据这些信息向处理器发送中断或IPI请求。此外,GIC Redistributor还支持处理器仲裁,以确保同一时间只有一个CPU处理具有相同优先级的中断。

在这里插入图片描述
distributor: SPI中断的管理,将中断发送给redistributor;
redistributor: PPI,SGI,LPI中断的管理,将中断发送给cpu interface;
cpu interface: 传输中断给 core;
cpu interface 是实现在 core 内部的,distributor,redistributor,ITS是实现在gic内部的.

2.GIC 功能描述

GIC分配器接收外设(SPI)和核心(PPI)的有线中断。 GIC分配器仲裁路由到每个核心的中断以确定最高优先级挂起中断(HPPI),然后将其传递给GIC CPU界面。 来自核的激活,去激活和软件生成的中断通过GIC CPU接口传递以更新GIC分配器的状态。 GIC分配器包含内存映射的配置和状态寄存器。 GIC分配器包含每个中断目标一个再分配器。 再分配器主要负责包含PPI和SGI的寄存器。

GIC CPU接口包括处理物理中断的部分和处理虚拟中断的部分。 GIC CPU接口包含可作为系统寄存器访问的配置和状态寄存器。 中断被配置为Group 0中断或Group 1中断。 Group 0中断使用FIQ发出信号,而Group 1中断使用IRQ发出信号。

GIC CPU接口处理物理中断的部分从GIC分配器接收HPPI。 它执行抢占计算并向核心发出FIQ或IRQ信号。 来自核心的激活,去激活和软件生成的中断通过CPU接口传回到分配器。 GIC CPU接口处理虚拟中断的部分最多可以包含四个虚拟中断,其中优先级最高的用于向核心生成虚拟FIQ或虚拟IRQ。

2.1 中断源分类

GIC中断源的编号从0开始,0到15是SGI(Software Generated Interrupt),所谓"software generated"。
编号16到31是PPI(Private Peripheral Interrupt),所谓"private",是指这个中断为CPU私有/专用。
与专有的PPI相对应的就是所有CPU全局共享的SPI(Shared Peripheral Interrupt),编号从32到1020。
在这里插入图片描述

2.1.1 Private Peripheral Interrupts (PPIs)

PPI(Private Peripheral Interrupts,私有外设中断)是由特定于单个核心的外设产生的有线中断。每个核心具有16个PPI,INTID16-INTID31。输出接口不支持PPI。没有被分配使用的PPI将作为Cortex-R52处理器顶层的额外中断输入提供。配置未分配的PPI可以选择上升沿触发或低电平触发。
那什么中断会有这种特性呢?
比如通用定时器中断啊,温度传感器中断之类的。

2.1.2 Shared Peripheral Interrupts (SPIs)

SPI是一种由特定于单个核心的外设产生的有线中断,可以被通过软件配置路由到一个特定的核。每个Cortex-R52处理器都具有960个可配置的SPI,这些SPI作为处理器的顶层输入信号提供给其他组件使用。

那么如何确定哪些SPI被分配给哪个核心?
在每个核心中,通过低延迟硬件将32个唯一的SPI路由到该核心,而其他所有核心则使用常规延迟硬件将同样的SPI路由到它们。对于每个核心而言,INTID(32x+32)到INTID(32x+63)的SPI被视为低延迟(其中x = 0、1、2或3),即它们具有更快的响应时间和更高的优先级,可以更快地从硬件设备接收并处理SPI中断请求。

最后,每个SPI都可以配置为上升沿触发或高电平触发,并且通过编程相应的SPI路由信息来实现。SPI[0]对应于INTID32,而SPI[30]对应于INTID991。

2.1.3 Software Generated Interrupts (SGIs)

指由 CPU 直接写对应的寄存器触发中断,因而这种中断不是由硬件产生的,而是由软件主动产生的。这种特殊的中断主要用于核间通信。当处理器需要中断应用程序执行时,可以使用SGI生成中断信号。SGI的数量有限,每个CPU核只能生成16个SGI,每个SGI都有一个独特的编号(INTID0-INTID15)。SGI是边沿触发中断,在生成SGI时,SGI信号会从低电平跳变到高电平,然后维持高电平状态,直到中断服务程序将其清除为止。这些属性使SGI非常适合进行异步通信和同步协议的实现,并可用于更好地支持多处理器系统。

SGI (Software Generated Interrupt) 和 PPI (Private Peripheral Interrupt) 都是 ARM 处理器中的中断信号。每个 CPU 核都有自己的 SGI 或 PPI 中断,不同核的同种类型中断共享相同的编号。因此,它们都采用了 “banked” 形式的中断源,即每个 CPU 核都可以接收到来自同一种类型中断的信号,但是在处理中断时会根据中断编号进行区分和处理。其中,SGI 是由软件触发的中断,用于处理特定的事件或情况。PPI 则是专门为外围设备设计的中断,用于处理与外设相关的事件或情况。这些中断信号都有各自的优先级,并按照优先级高低被处理。这种中断机制可以使系统在出现多个异步事件时能够快速响应并作出正确的处理。

参考阅读:
https://blog.csdn.net/sinat_32960911/article/details/128083997
https://blog.csdn.net/weixin_42135087/article/details/107039588
https://zhuanlan.zhihu.com/p/85313527
https://zhuanlan.zhihu.com/p/90074320
https://zhuanlan.zhihu.com/p/85313527
https://blog.csdn.net/weixin_42135087/article/details/111713444
https://blog.csdn.net/yhb1047818384/article/details/86708769
https://blog.csdn.net/qijiuliushisan/article/details/112384636
https://zhuanlan.zhihu.com/p/443815543

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

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

相关文章

深入浅出Rust核心概念:生命周期

简介 Rust是一种快速、安全、并发的系统级编程语言,它的设计目标是提供一种高效、内存安全的编程方式。而生命周期(Lifetime)是Rust语言中的一个核心概念,它与内存管理、函数传参和引用操作等方面密切相关。LZ将详细介绍Rust中生…

GitHub 开启 2FA 双重身份验证的方法

为什么要开启 2FA 自2023年3月13日起,我们登录 GitHub 都会看到一个要求 Enable 2FA 的重要提示,具体如下: GitHub users are now required to enable two-factor authentication as an additional security measure. Your activity on Git…

Matplotlib 轴标签和标题

我们可以使用 xlabel() 和 ylabel() 方法来设置 x 轴和 y 轴的标签。 实例 import numpy as np import matplotlib.pyplot as pltx np.array([1, 2, 3, 4]) y np.array([1, 4, 9, 16]) plt.plot(x, y)plt.xlabel("x - label") plt.ylabel("y - label")…

Java BIO

1.Java BIO(Blocking IO:同步并阻塞式IO)编程 1.1.基本介绍 1>.Java BIO就是传统的java io编程,其相关的类和接口在"java.io"包下; 2>.BIO(Blocking I/O): 同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处…

深入分析,Redis为什么这么快?

我们都知道Redis很快,它QPS可达10万(每秒请求数) Redis为什么这么快? 基于内存实现高效的数据结构合理的数据编码合理的线程模型虚拟内存机制 基于内存实现 我们都知道内存读写是比磁盘读写快很多的。Redis是基于内存存储实现的…

电磁兼容原理、方法及设计的科普好文

什么是电磁兼容 电磁兼容性(EMC)是指设备或系统在其电磁环境中符合要求运行并不对其环境中的任何设备产生无法忍受的电磁干扰的能力。因此,EMC包括两个方面的要求:一方面是指设备在正常运行过程中对所在环境产生的电磁干扰不能超…

操作系统之调度

目录 什么是调度 进程调度的时机、切换、过程与方式 调度器/调度程序 调度算法 先来先服务算法 短作业优先算法 高响应比优先算法 时间片轮转算法 优先级调度算法 多级反馈队列调度算法 什么是调度 调度的三个层次 高级调度 中级调度 低级调度 总结如下: …

利用docker部署深度学习环境摆脱操作系统版本限制与cuda版本限制

利用docker部署深度学习环境摆脱操作系统版本限制与cuda版本限制 文章背景描述: 近期公司想给客户部署OCR文本识别项目,项目用到了tensorflow1.13,可支持该框架版本的cuda得低于10.2,但是客户要求的操作系统版本是Ubuntu22.04&…

学成在线笔记+踩坑(9)——课程发布,xxl-job+消息SDK实现分布式事务、页面静态化、Hystrix熔断降级

导航: 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线牛客面试题_java黑马笔记 目录 1 业务流程,入库缓存ESMinIO存静态化页面 2 分布式事务技术方案 2.1 回顾本地事务和分布式事务 2.2 什么是CA…

Nginx下载和使用

nginx: downloadhttp://nginx.org/en/download.html下载成功后打开 \nginx-x.xx.x\conf\nginx.conf 文件 #user nobody; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid…

国内top5正规好用纸黄金交易软件最新排名(2023评测版)

随着互联网技术的不断发展,网上投资理财变得越来越流行。而随着互联网理财产品的日益增多,越来越多的投资者开始选择纸黄金交易软件进行交易。然而,对于初入此行的投资者而言,如何选择合适的纸黄金交易软件显得尤为重要。 首先&…

PostgreSQL的数据类型有哪些?

数据类型分类 分类名称 说明 与其他数据库的对比 布尔类型PG支持SQL标准的boolean数据类型与MySQL中的bool、boolean类型相同,占用1字节存储空间数值类型整数类型有2字节的smallint、4字节的int、8字节的bigint;精确类型的小数有numeric;非精…

C语言CRC-8 ITU格式校验函数

C语言CRC-8 ITU格式校验函数 CRC校验基于前处理和后处理的不同,由不同的协会标准推出了一些不同格式的版本。这里介绍CRC-8 ITU格式的校验函数。 CRC-8 ITU格式特征 标准CRC-8的校验函数参考: C语言标准CRC-8校验函数 CRC-8 ITU格式和标准CRC-8校验算…

Mybatis是什么?Mybatis入门程序

一、框架是什么? 1.java常见框架: SSM三大框架:SpringMybatisSpringMvc 2.什么是框架? 框架本身就是对于通用代码的封装,提前写好的类和方法,我们在做项目的时候直接引入这些框架(本质就是引入类…

Matlab 最远点采样(FPS,二维版本)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 简而言之,该方法是通过迭代、增量的方式来选择距离前一个点集最远的点从而实现数据的采样过程。其算法步骤如下所述: (1)从点集 S S S中随机选择一个点

【Linux基本指令和权限(1)】

本文思维导图: 文章目录 一、Linux操作的特点二、使用指令从Xhell登录云服务器三、基本指令1.ls指令2. pwd指令:3.cd指令4. touch指令5. rm指令 写在最后 Linux是一个操作系统,操作系统是一款做软硬件管理的软件。 一、Linux操作的特点 Li…

报错解决:关于swagger的Caused by: java.lang.NullPointerException: null

目录 一、遇到问题 二、解决办法 方法一 方法二 方法二中导入依赖报错的解决方案 一、遇到问题 在往springboot项目里面添加swagger时候,启动的时候就报了如下null了的错误 遇到问题的报错提示: Error starting ApplicationContext. To display the…

200人 500人 园区网设计

实验要求: ① 设置合理的STP优先级、边缘端口、Eth-trunk ② 企业内网划分多个vlan ,减少广播域大小,提高网络稳定性 ③ 所有设备,在任何位置都可以telnet远程管理 ④ 出口配置NAT ⑤ 所有用户均为自动获取ip地址 ⑥ 在企业…

bitset(位图)的使用与模拟实现

bitset(位图) 位图引入bitset的使用bitset(位图)的模拟实现bitset类各函数接口总览bitset类的实现构造函数set、reset、flip、testsize、countany、none、all打印函数 位图引入 问:给40亿个不重复的无符号整数&#xf…

Cell Reports:任栓成/高东/胡志安/唐玲团队合作揭示压力性失眠发生的神经机制

良好的觉醒与睡眠是幸福生活和高效工作的前提。然而,随着现代社会生活节奏的加快,觉醒睡眠障碍,特别是失眠,已成为不容忽视的健康问题。据中国睡眠研究会发布的《2022中国国民健康睡眠白皮书》显示,约3/4人群曾存在觉醒…