【ARMv8/v9 GIC 系列 2.2 -- GIC SPI 中断的 GICD_ISACTIVER 和 GICD_ICACTIVER 配置】

文章目录

    • GIC 中断 Active 状态的配置
      • 中断状态分类
      • GICD_ISACTIVER<n>
      • GICD_ICACTIVER<n>
      • 参数 n 编号解释
      • 中断设置举例
        • 设置中断ID 68为活动状态
        • 清除中断ID 68的活动状态
      • 小结

GIC 中断 Active 状态的配置

在ARMv8/ARMv9 体系结构中,GICD_ISACTIVER<n>GICD_ICACTIVER<n> 是通用中断控制器(GIC)的两组寄存器,它们用于管理特定中断的活动状态。这些寄存器允许软件查询和修改中断是否处于活动状态。

在这里插入图片描述

中断状态分类

在ARM体系中,对于每个中断,有四个状态:

  • inactive:中断处于无效状态;
  • pending:中断处于有效状态,但是CPU没有响应该中断;
  • active:中断处于有效状态,CPU在响应该中断;
  • active and pending:CPU在响应该中断,但是该中断源又发送中断过来。

GICD_ISACTIVER

  • 寄存器名称:Interrupt Set-Active Registers
  • 目的:用于将特定的中断标记为活动状态。
  • 描述GICD_ISACTIVER<n> 寄存器允许软件将中断设置为活动状态。当向这些寄存器的特定位写入 1 时,对应的中断会被标记为活动状态。写入 0 到这些位没有影响。

GICD_ICACTIVER

  • 寄存器名称:Interrupt Clear-Active Registers
  • 目的:用于清除特定中断的活动状态。
  • 描述GICD_ICACTIVER<n> 寄存器允许软件清除中断的活动状态。当向这些寄存器的特定位写入 1 时,对应的中断活动状态会被清除。写入 0 到这些位没有影响。

参数 n 编号解释

参数 <n> 表示寄存器索引,根据系统支持的中断数量而变化。例如,如果GIC支持最多1020个SPI(共享外设中断),则 GICD_ISACTIVERGICD_ICACTIVER 寄存器会有多个(例如从 GICD_ISACTIVER0GICD_ISACTIVER31),因为每个寄存器可以控制32个中断的活动状态。

中断设置举例

假设我们要将中断ID 68标记为活动状态,然后清除其活动状态:

设置中断ID 68为活动状态
  1. 确定正确的寄存器和位位置:
    • 中断ID 68 位于 GICD_ISACTIVER2 (因为 68 / 32 = 2),位于该寄存器的第 68 % 32 = 4 位。
  2. 设置为活动:
    GICD_ISACTIVER2 = (1 << 4);
    
清除中断ID 68的活动状态
  1. 同样,位于 GICD_ICACTIVER2 寄存器,位位置为第 4 位。
  2. 清除活动状态:
    GICD_ICACTIVER2 = (1 << 4);
    

小结

  • 实际使用时,通常不需要手动设置或清除中断的活动状态,因为GIC硬件会自动管理这些状态。手动修改这些状态可能会导致系统行为异常。
  • 操作这些寄存器通常需要特权级别的代码执行,因此操作通常在操作系统内核或相应的驱动程序中进行。
  • 标记中断为“ACTIVE状态后并不会启动中断处理程序的执行。它仅仅表示该中断正被处理或等待处理。中断的启动依赖于中断的使能状态和优先级配置。

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

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

相关文章

学习新语言方法总结(二)

上一篇介绍了学习语言的数据类型、流程控制&#xff0c;leetcode上刷几道题目应该对基本代码逻辑有所了解了。这一篇主要来说一下进阶模块&#xff1a;面向对象 OOP思想是编程中重要的一个模块&#xff0c;在各个语言都有大量的广泛运用&#xff0c;废话不多说&#xff0c;直接…

2021数学建模C题目– 生产企业原材料的订购与运输

C 题——生产企业原材料的订购与运输 思路&#xff1a;该题主要是通过对供应商的供货能力和运送商的运货能力进行估计&#xff0c;给出合适的材料订购方案 程序获取 第一题问题思路与结果&#xff1a; 对 402 家供应商的供货特征进行量化分析&#xff0c;建立反映保障企业生…

POSIX标准接口概述

基本介绍 主要参考&#xff1a; Linux 系统中的 POSIX 接口详细介绍_linux posix-CSDN博客 POSIX&#xff08;Portable Operating System Interface&#xff0c;可移植操作系统接口&#xff09;是由 IEEE&#xff08;Institute of Electrical and Electronics Engineers&#x…

Java爬虫(一)

一、Java爬虫简介 1.1 Selenium Selenium爬虫是一种基于浏览器自动化的爬虫技术&#xff0c;可以模拟用户的操作行为&#xff0c;实现对动态网页的爬取。 1.2 jsoup Jsoup拥有十分方便的api来处理html文档&#xff0c;比如参考了DOM对象的文档遍历方法&#xff0c;参考了CSS选…

jeecg-boot项目的部署-windows系统

一、基础环境的准备&#xff1a; 1、后台基础环境&#xff1a;JDK、redis、数据库&#xff1a;sqlserver 2、前端基础环境&#xff1a;nginx redis和nginx的安装都很方便&#xff0c;直接去对应的官网&#xff0c;下载zip压缩包&#xff0c;然后解压&#xff0c;执行.exe文件…

一、docker简介及卸载、安装

目录 一、Docker 简介 二、dockers三要素 1、Docker镜像&#xff08;image&#xff09; 2、Docker仓库 3、Docker容器 三、docker架构图 四. Docker 运行的基本流程 五、docker 卸载 1、停止docker服务 2、查看yum安装的docker文件包 3、查看docker相关的rpm源文件 …

【Pandas驯化-11】一文搞懂Pandas中的分组函数groupby与qcut、fillna使用

【Pandas驯化-11】一文搞懂Pandas中的分组函数groupby与qcut、fillna使用 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 相关内容文档获…

常用的开源数据集网站

Kaggle&#xff08;https://www.kaggle.com/datasets&#xff09;&#xff1a;Kaggle 是一个著名的数据科学竞赛平台&#xff0c;也提供了大量的开放数据集供用户下载和使用。UCI Machine Learning Repository&#xff08;https://archive.ics.uci.edu/datasets&#xff09;&am…

k8s 离线安装calico

k8s安装calico的命令是 curl -L https://projectcalico.docs.tigera.io/manifests/calico.yaml -O kubectl apply -f calico.yaml 但是在pull calico的镜像时&#xff0c;由于一些网络原因&#xff0c;可能会导致image pull失败的错误。 可以尝试离线安装calico&#xff0c;…

基于STM32的智能工厂环境监测系统

目录 引言环境准备智能工厂环境监测系统基础代码实现&#xff1a;实现智能工厂环境监测系统 4.1 数据采集模块4.2 数据处理4.3 控制系统实现4.4 用户界面与数据可视化应用场景&#xff1a;智能工厂管理与优化问题解决方案与优化收尾与总结 1. 引言 智能工厂环境监测系统通过…

数据库系统概论——数据库恢复技术

文章目录 数据库恢复技术事务的基本概念什么是事务如何定义事务&#xff1a;事务的特性 数据库恢复概述故障的种类恢复的实现技术恢复策略事务故障的恢复系统故障的恢复介质故障的恢复 数据库恢复技术 事务的基本概念 什么是事务 事务使用户定义的一个数据库操作序列&#x…

Vue实现无限滚动加载更多内容(懒加载)或实现查看更多按钮

在Vue中实现无限滚动加载更多内容&#xff0c;通常可以使用vue-infinite-loading插件。以下是一个简单的例子&#xff1a; 1、首先&#xff0c;安装vue-infinite-loading&#xff1a; npm install vue-infinite-loading --save2、在Vue组件中使用它&#xff1a; <templat…

【设计模式之策略模式 -- C++】

策略模式 – 算法替换&#xff0c;灵活变化 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一系列算法&#xff0c;并将每一个算法封装起来&#xff0c;使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户。这种模式主…

Android系统 无法绑定1024以下端口问题

一&#xff0c;前言 在Android系统中&#xff0c;默认情况下&#xff0c;普通应用程序无法绑定到1024以下的端口&#xff08;即特权端口&#xff09;&#xff0c;这是出于安全考虑而设计的。这种限制是为了防止普通应用程序伪装成系统服务或者使用系统服务的特权端口&#xff…

kotlin类

一、定义 1、kotlin中使用关键字class 声明类,如果一个类没有类体&#xff0c;也可以省略花括号&#xff0c; 默认为public 类型的&#xff1a; // 这段代码定义了一个公开的、不可被继承的Test类 class Test{} // 没有类体&#xff0c;可以省略花括号 class Test 底层代码&…

2024最新IDEA插件开发+发布全流程 SelectCamelWords[选中驼峰单词](idea源代码)

2024最新IDEA插件开发&#xff08;发布&#xff09;-SelectCamelWords[选中驼峰单词]&#xff08;idea源代码&#xff09; 参考文档 Jetbrains Idea插件开发文档: https://plugins.jetbrains.com/docs/intellij/welcome.html代码地址&#xff1a;https://github.com/yangfeng…

Mybatis框架的缓存

Mybatis框架的缓存 一.为什么使用缓存 缓存(cache&#xff09;的作用是为了减去数据库的压力&#xff0c;提高查询性能。缓存实现的 原理是从数据库中查询出来的对象在使用完后不要销毁&#xff0c;而是存储在内存&#xff08;缓存&#xff09; 中&#xff0c;当再次需要获取…

windows-docker-本地部署-前端

前置条件 docker已有需要打包的文件也已经写好了 打包镜像 ip地址修改 需要根据自身修改的文件 .env.local文件存放你前端访问的端口 172.24.240.1:这部分是自己电脑的ip 如何查看本机ip&#xff0c;使用IPV4的地址。 #本地 #API_HOST_URLhttp://172.24.240.1:8091打包文…

Ubuntu下 Tailscale的安装配置与优化

今天&#xff0c;我在阿贝云的免费云服务器上进行了Tailscale的部署测试。说实话&#xff0c;这家免费云服务器真的不错,配置也算不错(1核CPU、1G内存、10G硬盘、5M带宽)。作为一个完全免费的云服务器,已经满足了我的大部分需求了,真的很感谢阿贝云提供这样一个优质的免费服务!…

Excel导出实例

在上一节的基础上&#xff0c;本文演示下如何导出excel数据。 Excel导出操作演示 继承ocean-easyexcel SDK <dependency><groupId>com.angel.ocean</groupId><artifactId>ocean-easyexcel</artifactId><version>1.0.0</version> …