首页 > 其他分享 >GIC入门(二):寄存器组成,配置和中断处理

GIC入门(二):寄存器组成,配置和中断处理

时间:2023-08-17 18:49:08浏览次数:46  
标签:配置 优先级 入门 中断 寄存器 GIC PE GICD

1.寄存器组成 GIC寄存器分为以下三组: GIC_Distributor GIC_Redistributor CPU Interface 0 GIC_D & GIC_R两组寄存器用于配置中断,CPU Interface用于处理中断。 GICD_*: distributor寄存器是memory-mapped,即占用地址空间,寄存器功能主要有: 为SPI中断设置优先级级别,路由SPI将其分配至不同的distributor,使能/关闭SPI,设置电平触发或沿触发,生成消息信号,控制SPI信号的active和pending状态,配置安全模型 GICR_*: 每个Core有一组对应的redistributor寄存器,也是memory-mapped,占有地址空间,这组寄存器的主要功能有: 使能/关闭PPI和SGI中断,设置SGI,PPI中断优先级,设置PPI的触发方式,给SGI,PPI分组,控制SGI,PPI的中断状态,控制内存中支持相关中断属性和LPI的挂起状态的数据结构的基本地址,为所连接的PE提供电源管理支持 CPU Interface(ICC_*_ELn): 每个core都有一组对应的CPU interface寄存器,这组寄存器是系统寄存器,主要功能有: 提供启动中断处理的通用配置,确认中断,执行优先级下降和中断终止,设置当前core的中断优先级mask,定义当前core的抢占策略,确定当前core的pending中断中的最高优先级 注:使用CPU Interface组寄存器之前需要写ICC_SRE_ELn.SRE使能。   2.配置GIC 本节内容介绍运行在多core的bare-metal环境下如何配置SPI,PPI和SGI,不涉及LPI的配置 配置GICD_CTRL.ARE = 1,设置GIC版本为V3 配置GICD_CTRL.EnableGrp1S = 1,使能Secure group1的中断分发,GICD_CTRL.EnableGrp1NS = 1,使能Non-Secure group1的中断分发,GICD_CTRL.EnableGrp0 = 1,使能group0的中断分发 以下配置需对每一组GICR操作: 配置GICR_WAKER.ProcessorSleep = 0,清除PE的offline状态。轮询GICR_WAKER.ChildrenAsleep直至值为0 如果PE offline状态下有需要其处理的中断,此中断会引起一个对PE的唤醒请求,之后电源管理系统会响应请求打开PE。 以下配置需对每一组ICC_*_ELn操作: 配置ICC_SRE_ELn.SRE = 1使能对应的ICC组寄存器 配置ICC_PMR_EL1设置被当前PE处理所需要的最小优先级 配置ICC_BPRn_EL1设置优先级分组和抢占 配置ICC_CTRL_EL1, ICC_CTRL_EL3设置如何处理中断 配置ICC_IGRPEN1_EL1,ICC_IGRPEN0_EL1,ICC_IGRPEN1_EL3使能中断组的信号 以下配置需对每个PE操作: 配置SCR_EL3和HCR_EL2,设置中断路由到哪个异常等级 配置PSTATE设置中断mask 配置VBAR_ELn指向内存中的中断向量表   如上文所说,SPI配置寄存器在GICD_*,PPI和SGI配置寄存器在GICR_*,如下图所示: 0 对每个单独的中断源,需要配置以下: GICD_IPRIORITYn, GICR_IPRIORITYn配置中断优先级,优先级为8-bit值,0x0优先级最高,0xFF优先级最低; GICD_IGROUPn, GICD_IGRPMODn, GICR_IGROUPn, GICR_IGRPMODn配置中断由哪个组接收处理,S-G0,S-G1,NS-G1 GICD_ICFGRn, GICR_ICFGRn配置中断触发方式:电平触发或沿触发 GICD_ISENABLERn, GICD_ICENABLER, GICR_ISENABLERn, GICR_ICENABLERn使能/关闭中断 Non-maskable配置中断为不可屏蔽中断,GIC V3.3之后支持此feature GICD_IROUTERn.Interrupt_Routing_Mode配置SPI中断被传给特定PE还是所有PE   3.中断处理 3.1路由一个pending的中断到PE PE接收中断之前需要依次检测以下内容: 检查与中断相关联的组是否启用 检查中断是否被使能 检查路由控制找到需要接收这个中断的PE 检查中断优先级,并与PE所设置的最低优先级比较,需要高于PE接收的最低优先级 检查正在运行的中断优先级,决定PE能否处理当前中断   3.2中断到达PE后的路由 当中断到达PE后,PE需要通过查看IAR寄存器得知中断来源,IAR寄存器有两种: 0 读取IAR寄存器获取INTID。当当前的安全状态和中断的安全状态不同时,不能在当前IAR读取到有效的INTID,此时会根据下表返回以下值: 0 0 0 下图示例当运行在S-EL1时触发NS-EL1中断时的调度流程: 0 更多时候,S-EL1不会立即调度进EL3,而是会完成当前任务后通过SMC陷入EL3再进行中断处理,如下图所示: 0   3.3处理不同优先级 当PE不处理中断时,中断优先级记录为最低0xFF,处理中断时,中断优先级记录为当前正在处理的中断的优先级。高优先级的中断可以打断低优先级中断的处理并抢占CPU。 0   3.4关闭中断 PE处理中断关闭有两个步骤:当前PE中断优先级回落,设置当前中断状态为inactive   4 SGI中断 通过写入GIC中的以下寄存器可以触发SGI中断: 0 寄存器位域定义如下: 0 其中SGI ID设置INTID,INTID0-15是预留给SGI的中断号 IRM控制路由方式,IRM=0时中断被发送到PE ...,IRM=1时中断被发送到除当前PE外所有PE 需要注意的是,三个寄存器分别生成不同安全类型的中断,但是处于S状态的PE可以发送任何状态中断,处于NS的PE能否发送SG0的中断取决于寄存器GICR_NSACR的配置。

标签:配置,优先级,入门,中断,寄存器,GIC,PE,GICD
From: https://www.cnblogs.com/ski-zai/p/17638555.html

相关文章

  • ctfshow-web入门-信息搜集
    title:ctfshowweb入门信息搜集date:2023-08-1117:21:10categories:web刷题记录description:web1~web17web1f12查看源代码即可发现注释web2js前台拦截,右键查看源代码和f12均失效,两种方法均可1.设置中打开开发者工具2.url头部添加view-source:web3使用浏览器的......
  • ctfshow-web入门-sql注入-SELECT模块
    title:ctfshow-web入门-sql注入-SELECT模块date:2023-08-1322:06:17categories:web刷题记录description:web171~web172基础知识缺乏的推荐看我的sqli-labs系列web171单引号包裹,思路很简单。先看多少列1'ORDERBY3--+确定三列查看回显1'UNIONSELECT1,2,3--+......
  • MongoDB入门到精通学习路线?深入讲解
    MongoDB入门到精通学习路线?深入讲解学习MongoDB可以按照以下路线进行:1.学习基本概念:掌握MongoDB的基本概念,包括文档,集合,数据库,索引等。了解MongoDB与传统关系数据库的区别。2.安装和配置MongoDB:学习如何安装和配置MongoDB,包括选择适当的版本和安装方法,并配置正确的环境变量。......
  • RabbitMQ入门
    1简介​ RabbitMQ是采用erlang语言实现AMQP(AdvancedMessageQueuingProtocol,高级消息队列协议)的消息中间件,它最初起源于金融系统,用于在分布式系统中存储转发消息。​ RabbitMQ是目前非常热门的一款消息中间件,不管是互联网行业还是传统行业都在大量地使用RabbitMQ......
  • 构建跨平台的移动应用程序:Xamarin入门
    介绍:在移动应用开发领域,跨平台的解决方案变得越来越受欢迎。Xamarin是一种流行的跨平台移动应用开发框架,它允许开发者使用C#语言来构建同时运行在iOS和Android平台上的应用程序。本篇博客将带您入门Xamarin开发,展示如何构建跨平台的移动应用程序。步骤1:安装和设置环境在开始之前,......
  • 入门级echarts地图高亮
    入门级echarts地图高亮♥需求我们需要在各个省的地图中对指定城市进行高亮,直辖市在中国地图中高亮。实现1.首先导入echartsnpminstallechartsECharts(EnterpriseCharts)是一个由百度开发的开源图表库,它提供了丰富的交互性、可定制性和扩展性,用于创建各种类型的数据可视化......
  • VSCode使用入门
    学习导航:VSCode入门MarkDown在VSCode环境下使用......
  • 鸿蒙入门开发教程:一文带你详解工具箱元服务的开发流程
    鸿蒙入门开发教程:一文带你详解工具箱元服务的开发流程一,基本概念元服务(原名原子化服务)是一种基于HarmonyOSAPI的全新服务提供方式,以HarmonyOS万能卡片等多种呈现形态,向用户提供更轻量化的服务。具有即用即走、信息外显、服务直达的特性。万能卡片(简称卡片)是一种界面展示形式,可......
  • Sqlite3的入门操作
    Sqlite3的下载Sqlite3整活有点东西,直接看图吧。操作系统:windows10如果你是第一次用sqlite3,直接会给你干自闭。一般情况下你只会下载序号2的zip文件,然后写代码的时候,会发现头文件呢?没错,你又要回来下载序号1的zip文件。找了一份example代码,编译的时候有报错,链接失败。你......
  • jvs-logic(逻辑引擎)的产生背景和使用场景作用
    逻辑引擎的由来要了解逻辑引擎的产生背景,我们需要了解程序执行的基本原理,那么编译是少不了的,编译是将高级语言翻译成为机器可以执行的机器语言。我们在做日常开发过程中,把通用的业务逻辑通过高级语言写出来后,需要把代码编译为可执行的程序,并发布出来,然后普通用户才能使用。当业务......