【GIC】配置GIC

article/2025/4/24 19:25:31

本章介绍如何在裸机环境中启用和配置兼容GICv3的中断控制器。


目录

一、全局设置

二、单独PE设置

2.1 Redistributor配置

2.2 CPU接口配置

2.3 PE配置

三、SPI, PPI, SGI配置

3.1设置SPI的目标PE

附:寄存器介绍

附1:GICD_CTLR

附2:GICR_WAKER

附3:ICC_SRE_ELn

附4:ICC_PMR_EL1

附5:ICC_BPRn_EL1

 附6:ICC_CTLR_EL1

附7:GICR_CTLR


一、全局设置

必须将 Distributor控制寄存器(GICD_CTLR)配置为启用中断组并设置路由模式。

  • 使能亲和性路由 (ARE bits)

GICD_CTLR中的ARE位控制是否启用亲和路由。如果未启用亲和路由,则可用传统操作配置GICv3。对于安全状态和非安全状态,可以分别控制是否启用关联路由。

  • 中断使能·

对于Group 0, Secure Group 1 and Non-secure Group 1,GICD_CTLR有单独的使能位bit:

GICD_CTLR.EnableGrp1S   允许分发Secure Group 1中断。

GICD_CTLR.EnableGrp1NS 允许分发Non-secure Group 1中断。

GICD_CTLR.EnableGrp0   允许分发Group 0中断。

二、单独PE设置

2.1 Redistributor配置

        复位时,Redistributor将其连接的PE视为睡眠状态。唤醒过程可以通过GICR_WAKER进行控制。要将已连接的PE标记为awake状态,软件必须:

  1. 清除GICR_WAKER .ProcessorSleep为0。·
  2. 轮询GICR_WAKER .ChildrenAsleep,直到读取到0。

        写入CPU接口寄存器,除了ICC_SRE_ELn,当任何一个GICR_WAKER.ProcessorSleep==1 或者 GICR_WAKR.ChildrenAsleep==1都会导致不可预测的行为。

2.2 CPU接口配置

CPU接口负责将中断传递到它所连接到的PE。要启用CPU接口,软件必须配置以下内容:

  • 启用系统寄存器访问权限。

软件必须通过在ICC_SRE_ELn寄存器中设置SRE位来启用对CPU接口寄存器的访问。·

  • 设置优先级掩码和二进制点寄存器。

CPU接口包含优先级掩码寄存器(ICC_PMR_EL1)和二进制点寄存器(ICC_BPRn_EL1)。优先级掩码设置中断必须被转发到PE的最小优先级。二进制点寄存器用于优先级分组和抢占。·

  • 设置EOI模式。

CPU接口中的ICC_CTLR_EL1和ICC_CTLR_EL3中的EOImode位控制着如何处理中断的完成。

  • 启用每个中断组的信号。

      必须在中断由CPU接口转发到PE之前使能每个中断组的信号。要启用信号软件必须写入ICC_IGRPEN1_EL1用于Group 1中断,写入ICC_IGRPEN0_EL1用于Group0中断。

ICC_IGRPEN1_EL1由安全状态备份。这意味着ICC_GRPEN1_EL1控制当前安全状态的Group 1。在EL3,软件可以使用ICC_IGRPEN1_EL3访问安全Group1中断和非安全Group 1中断。

2.3 PE配置

        还需要对PE进行一些配置来允许它接收和处理中断。在这里,只描述在AArch64状态下执行ARMv8-A兼容PE所需的基本步骤就足够了。

  • 路由控制

        中断的路由控制位于PE的SCR_EL3和HCR_EL2中。路由控制位决定了进行中断的异常级别。这些寄存器中的路由位在复位时是一个未知值,因此它们必须由软件进行初始化。·

  • 中断掩码

        PE在PSTATE中也有异常掩码位。当设置了这些位时,中断将做掩码处理。这些位在复位时被设置。·

  • 向量表

        PE的向量表的位置由VBAR_ELn寄存器设置。与SCR_EL3和HCR_EL2一样,VBAR_ELn寄存器在复位时是一个未知值。软件必须将VBAR_ELn寄存器设置为指向内存中适当的向量表。

更多信息,请查阅 ARM® Architecture Reference Manual, ARMv8, for ARMv8-A architecture profile。

三、SPI, PPI, SGI配置

        SPI通过Distributor使用GICD_*寄存器进行配置。PPIs和SGIs是通过各个Redistributor,使用GICR_*寄存器进行配置的。对于每个INTID,软件必须配置以下内容:

  • 优先级Priority (GICD_IPRIORITYn, GICR_IPRIORITYn)

        每个INTID都有一个关联的优先级,用一个8位的无符号值表示。0x00优先级最高,0xFF优先级最低。第五章描述了GICD_IPRIORITYn和GICR_IPRIORITYn中的优先级值如何屏蔽低优先级中断,以及它如何控制抢占。中断控制器不需要实现所有的8bit优先级。如果GIC支持两个安全状态,则必须至少实现5位。如果GIC只支持一个安全状态,则必须至少实现4位。

  • 中断分组Group (GICD_IGROUPn,GICD_IGRPMODn, GICR_IGROUP0, GICR_IGRPMOD0)

        一个中断可以被配置为属于三个不同的中断组中的一个。

        这些中断组分别是 Group 0,Secure Group 1,Non-secure Group 1。

  • 触发方式Edge-triggered/level-sensitive (GICD_ICFGRn, GICR_ICFGRn)

        如果中断作为物理信号发送,则必须将其配置为边缘触发或电平敏感。SGIs总是被视为边缘触发的,因此GICR_ICFGR0对于这些中断表现为RAO/WI。

  • 中断使能Enable (GICD_ISENABLERn, GICD_ICENABLER, GICR_ISENABLER0, GICR_ICENABLER0)

        每个INTID都有一个使能位。设置启用寄存器和清除启用寄存器删除了执行 read-modify-write例程的要求。

        ARM建议,在启用INTID之前,先配置上述的设置。

        对于裸机环境,在初始配置后通常无需更改设置。但是,如果必须重新配置一个中断,例如要更改组设置,则建议首先禁用该特定的INTID。大多数配置寄存器的复位值都由具体实现者定义。这意味着中断控制器的设计者决定值是什么,并且值可能在系统之间有所不同。

3.1设置SPI的目标PE

        对于SPI,必须额外配置中断的目标。这是由GICD_IROUTERn控制的。每个SPI都有一个GICD_IROUTERn寄存器,中断路由模式位控制路由策略。选项包括:

  • GICD_IROUTERn.Interrupt_Routing_Mode == 0

SPI将被交付给PE  A.B.C.D,即在寄存器中指定的亲和坐标。

  • GICD_IROUTERn.Interrupt_Routing_Mode == 1

SPI可以传递给参与中断组分配的任何已连接的PE。Distributor选择目标PE,

而不是软件;这可以在每次中断信号时发生变化。这种类型的路由称为1-of-N。

PE可以选择不接收1-of-N中断。这是由GICR_CTLR中的DPG1S、DPG1NS和DPG0位控制的。

附:寄存器介绍

附1:GICD_CTLR

启用中断和亲和关系路由。

附2:GICR_WAKER

        允许软件控制与 Redistributor对应的WakeRequest电源管理信号的行为。

        如果PE进入了/正在进入低功耗状态时,所有中断进到Redistributor后,都会①产生一个WakeRequest信号②在Redistributor处于待定状态,未与CPU接口通信。

附3:ICC_SRE_ELn

        控制ELn是否使用系统寄存器接口或到GIC CPU接口的内存映射接口。

附4:ICC_PMR_EL1

        提供一个中断优先级过滤器。只有优先级高于此寄存器中的值的中断才会向PE发出信号。写入此寄存器必须是高性能的,并且必须确保在写入之后不会发生优先级低于写入值的中断,而不需要ISB或异常边界。

附5:ICC_BPRn_EL1

ICC_BPRn_EL1其实就是将优先级分为了两级,前面作为group,用于抢占。

 附6:ICC_CTLR_EL1

EOImode:针对当前安全状态的EOI模式。控制是否对结束中断寄存器的写入,也会停用该中断;

附7:GICR_CTLR


http://chatgpt.dhexx.cn/article/GqtTwLdo.shtml

相关文章

大寰AG-95夹爪指尖更换、结构示意图及通讯协议转换器说明

注意: 在对手爪进行任何操作之前,请先关闭机器人和夹持电源。 大寰AG-95夹爪指尖更换更换步骤: 1. 使用 M3 内六角螺丝刀卸下指尖螺丝,拆卸磨损的指尖。 2. 清洁手指件并彻底擦干。 3. 取出指尖上φ3x6 mm 定位销。 4. 将…

使用Landsat系列数据来检测喜马拉雅地区的冰湖溃决(Georg Veha等人,RSE,2018)

一、背景 这是一篇做冰湖溃决的文章,作者主要使用了random forest来检测喜马拉雅地区的冰湖溃决现象,这项成果发表在了Remote Sensing of Environment上。 文献连接:https://doi.org/10.1016/j.rse.2017.12.025 文献引用:Georg Ve…

App设计灵感之十二组精美的智能家居App设计案例

通过手机远程启动家里的各种家用电器,让我们回到家后可以享受到舒适的环境,这便是智能家居给我们带来的便利。 ① Smart Hub Application design by Ariuka ② Smart Home by Srgi Mi ③ Smart Home Mobile App by Ghulam Rasool ④ Smart Home Mobile …

基恩士KV8000通过HT3S-EIS-MDN网关与大寰机器人交换数据

一、概述 本文主要介绍使用HI-TOP网关 HT3S-EIS-MDN在基恩士KV8000 PLC和大寰RGI系列旋转抓手之间进行数据交换。 解决的问题:基恩士PLC KV8000监控和大寰RGI系列旋转抓手。 解决方法:使用HI-TOP网关 HT3S-EIS-MDN。基恩士KV8000支持EthterNet/IP协议…

CARD耐药数据库Linux使用

一、背景 关于耐药性有很多数据库可以使用,但是CARD的优势在于数据库较为准确,只有经过文章进行验证后的基因才会被记录 二、软件链接 软件github: GitHub - arpcard/rgi: Resistance Gene Identifier (RGI). Software to predict resistomes from p…

(原创)用红黄蓝RYB色相环(伊登色相环)代替RGB(RGI/RGV)色相环

作者:❄️固态二氧化碳❄️ (主页) 链接:(原创)用红黄蓝RYB色相环(伊登色相环)代替RGB(RGI/RGV)色相环 - 固态二氧化碳的博客 - CSDN博客 来源:CSDN博客 发表时间:2019年05月28日 12:33:57 著作权归作者所有。商业转载请联系作者获…

APT、ET、RGI、ICQ

越来越大的屏幕尺寸和越来越多的需要显示屏常亮应用,要求手机厂商必须从各个方向考虑来提升电池续航时间。一般而言,手机上常用的有两种 PA 的省电技术,一种是平均功率跟踪技术(APT),另外一种是包络跟踪&am…

十、ABP

一、官网 安装 安装成功Core 2.2版本的 转载于:https://www.cnblogs.com/fger/p/10641811.html

abp Step1

refs: 1)下载模板后用vs2017打开 2)Web项目设置为起始项目 3)在包管理终端下选择EntityFramework为默认项目,运行"Update-Database",创建数据库 4)运行项目,默认用户admin密码123qwe

ABP框架入门

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

Abp v2.8.0发布 路线图

ABP框架和ABP商业版v2.8已经发布.这篇文章将涵盖这些发布中的新增内容和项目的中期路线图. ABP框架2.8有哪些新增内容? 你可在GitHub的发行说明中看到所有的变更.这篇博客只包括重要的一些功能/变更. SignalR集成包 我们已经发布了一个新的包用来集成SignalR到基于ABP框架应用…

Abp 业务异常源码解读

Abp 业务异常源码解读 最近一直在读代码整洁之道,我在读到第三章函数的3.9 使用异常替代返回错误码,其实在我的开发经历中都是使用返回错误码给到前端,之前在阅读ABP官网文档中就有看到过使用异常替代异常的做法,当时自己还是比较…

abp快速入门#3

abp快速入门#3 使用AbpHelper.CLI快速实现crud 使用AbpHelper.CLI快速实现crud https://github.com/EasyAbp/AbpHelper.CLI 按照使用说明安装abphelper dotnet tool install -g EasyAbp.AbpHelper参照例子创建Todo实体对象。 执行abphelper自动生成代码,-d 参数为…

abp官网下载的项目如何跑起来

目录 前言 一、pandas是什么? 二、使用步骤 1.下载项目 2.解压压缩包运行文件 3.在项目路径里面找到这两个文件,把数据库位置写上去,例如本地就local host 4.在工具里面找到程序包管理控制台 5.运行成功 6.设置启动项 7.运行成功就会有相…

【转】ABP源码分析三十三:ABP.Web

ABP.Web模块并不复杂,主要完成ABP系统的初始化和一些基础功能的实现。 AbpWebApplication : 继承自ASP.Net的HttpApplication类,主要完成下面三件事 一,在Application_Start完成AbpBootstrapper的初始化。整个ABP系统的初始化就是通过AbpBoo…

ABP学习 之 准备

学习ABP准备 ABP准备数据库准备后端启动前端启动 ABP准备 到ABP官网下载Free Template 将下载到的压缩包解压到目录 由于当时选择使用vue为前端,所以vue子目录是前端代码,aspnet-core为后端代码 数据库准备 准备一个数据库,设置好用户的o…

LoRa及LoRaWAN简介

目录 1、什么是LoRa和LoRaWAN 1.1 LoRa和LoRaWAN的区别 1.2 LoRa扩频技术介绍 1.2.1 什么是扩频技术 1.2.2 扩频技术的作用 1.2.3 扩频技术常用术语介绍 1.3 LoRaWAN帧结构 1.4 硬件方案介绍 1.4.1 终端设备方案 1.4.2 网关方案 2、LoRaWAN网络架构 3、LoRaWAN终端设备分类 …

vue之table表格的合并

目录 vue之table表格的动态合并vue之table表格的动态合并 后台给数据 处理断层vue之table表格的动态合并 后台给数据 前端处理断层根据后台数据合并前三列数据 vue之table表格的动态合并 vue之table表格的动态合并 后台给数据 处理断层 转载于:https://blog.csdn.…

HTML-table表格详解

文章目录 表格表格的说明(创建一个表格)1. 说明2. 设置 表头和表格边框样式设置1. 设置 长表格结构和补充1. 说明2. 结构3. 补充 表格布局(被淘汰)1. 表格布局(已经被 CSS 淘汰) 表格 表格的说明(创建一个表格) <!DOCTYPE html> <html><head><meta char…

HTML中的table表格

表格标签 分为行&#xff08;tr&#xff09;和列&#xff08;td&#xff09;&#xff0c;行及列都可以进行合并操作 table:定义表格 tr:定义行 td:定义列 //先有行&#xff0c;后有列 th:多用于表头&#xff0c;定义表格中…