【ARMv8/v9 GIC 系列 2 -- GIC SPI 中断的 enable和 disable 配置】

文章目录

    • GIC 中断 Enable 和 Disable
      • GICD_ISENABLER<n>
      • GICD_ICENABLER<n>
      • 参数 n
      • 使用举例
      • 代码实现
      • 注意事项

GIC 中断 Enable 和 Disable

在ARMv8架构中,通用中断控制器(GIC)负责管理处理器的中断。为了控制和管理这些中断,GIC提供了一系列寄存器。其中,GICD_ISENABLER<n>GICD_ICENABLER<n> 是两组关键的寄存器,用于启用和禁用中断。

OffsetNameDescription
0x0100-0x017CGICD_ISENABLER<n>Interrupt Set-Enable Registers
0x0180-0x01FCGICD_ICENABLER<n>Interrupt Clear-Enable Registers

GICD_ISENABLER

在这里插入图片描述

  • 寄存器名称:Interrupt Set-Enable Registers
  • 目的:用于启用中断。
  • 描述:这些寄存器允许软件启用特定的中断。每个寄存器对应32个中断,每个位代表一个中断。写入1到某位会启用对应的中断,写入0对该位没有影响(即,不能通过写入0来禁用中断)。

GICD_ICENABLER

在这里插入图片描述

  • 寄存器名称:Interrupt Clear-Enable Registers
  • 目的:用于禁用中断。
  • 描述:这些寄存器允许软件禁用特定的中断。与GICD_ISENABLER<n>类似,每个寄存器对应32个中断,但写入1到某位会禁用对应的中断,写入0对该位没有影响。

参数 n

参数<n>代表寄存器的索引,根据系统支持的中断数量而变化。例如,如果GIC支持最多1020个中断,那么GICD_ISENABLERGICD_ICENABLER寄存器会有32个(从GICD_ISENABLER0GICD_ISENABLER31和从GICD_ICENABLER0GICD_ICENABLER31),因为每个寄存器可以控制32个中断。

可以通过下面函数判断一个中断是否为SPI中断:

static uint32_t is_spi_irq(int irq)
{return irq >= 32 && irq < 1020;
}

使用举例

假设我们要启用中断ID 68和禁用中断ID 95。

  • 启用中断ID 68
    • 中断ID 68在GICD_ISENABLER2寄存器中,因为68/32 = 2(整除)。
    • GICD_ISENABLER2中,68对应的位是68 % 32 = 4
    • 因此,通过向GICD_ISENABLER2写入1 << 4(即,0x10),可以启用中断ID 68。
GICD_ISENABLER2 |= (1 << 4);
  • 禁用中断ID 95
    • 中断ID 95在GICD_ICENABLER2寄存器中,因为95/32 = 2(整除)。
    • GICD_ICENABLER2中,95对应的位是95 % 32 = 31
    • 因此,通过向GICD_ICENABLER2写入1 << 31(即,0x80000000),可以禁用中断ID 95。
GICD_ICENABLER2 |= (1 << 31);

代码实现

下面代码展示了如何使用C代码实现 irq_enableirq_disable

void irq_enable(int irq)
{uint32_t addr;if (!is_spi_irq(irq)) {log_err("irq%d is not a spi irq\n", irq);return;}/* Calculate enable register offset and bit position */uint32_t reg_offset = irq / 32;uint32_t reg_shift  = irq % 32;addr = GIC_ISENABLER_ADDRESS(GIC_DISTRIBUTOR_BASE, reg_offset);write32(addr, (1 << reg_shift));
}void irq_disable(int irq)
{uint32_t addr;if (!is_spi_irq(irq)) {log_err("irq%d is not a spi irq\n", irq);return;}uint32_t reg_offset = irq / 32;uint32_t reg_shift  = irq % 32;addr = GIC_ICENABLER_ADDRESS(GIC_DISTRIBUTOR_BASE, reg_offset);write32(addr, (1 << reg_shift));
}

注意事项

  • 在实际编程中,对GIC寄存器的访问需要按照你的处理器和系统的特定要求来进行,这可能包拍使用特权指令或通过特定的内存映射地址访问这些寄存器。
  • 操作这些寄存器时,需要确保不会意外地更改或启用/禁用其他中断,尤其是在对寄存器进行位操作时。

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

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

相关文章

TSF的服务发现与Consul有何区别?

TSF(腾讯服务框架)和Consul都是用于服务发现的工具,但它们在设计理念、功能特性、集成方式等方面存在一些区别。 ### 设计理念和目标 **Consul** 是一个开源的工具,用于服务发现、配置和分段。它提供了一种简单的方式来注册和发现服务,以及健康检查和键值存储功能。Consul…

PyTorch实现NMS算法

PyTorch实现NMS算法 介绍示例代码 介绍 参考链接1&#xff1a;NMS 算法源码实现 参考链接2&#xff1a; Python实现NMS&#xff08;非极大值抑制&#xff09;对边界框进行过滤。 目标检测算法&#xff08;主流的有 RCNN 系、YOLO 系、SSD 等&#xff09;在进行目标检测任务时&…

网络安全管理组织架构复习

文章目录 安全管理机构岗位设置安全要求要求解读 安全管理机构 安全管理的重要实施条件就是有一个统一指挥、协调有序、组织有力的安全管理机构,这是网络安全管理得以实施、推广的基础。 通过构建从单位最高管理层到执行层及具体业务运营层的组织体系&#xff0c;可以明确各个…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(十四)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 22 节&#xff09; P22《21.ArkUI-实现摇杆功能》 本节我们将小鱼动画案例中的按钮控制改为摇杆控制&#xff0c;用来熟悉和巩固…

【多模态论文】CLIP(Contrastive Language-Image Pre-training)

论文&#xff1a;Learning Transferable Visual Models From Natural Language Supervision 链接&#xff1a;https://arxiv.org/abs/2103.00020 摘要 问题&#xff1a; 对预定的类别进行预测&#xff0c;这种有监督的训练形式受限于额外标记数据 。如何利用图像的原始文本来获…

图像数字化基础

一、像素 1、获取图像指定位置的像素 import cv2 image cv2.imread("E:\\images\\2.png") px image[291,218] print("坐标(291,218)上的像素的BGR值是&#xff1a;",px) &#xff08;1&#xff09;RGB色彩空间 R通道&#xff1a;红色通道 G通道&…

使用Python进行音频处理

通常会使用wave模块。但是&#xff0c;如果您想要处理其他类型的音频文件&#xff0c;或者需要更高级的音频处理功能&#xff0c;您可能需要安装第三方库&#xff0c;如pydub、soundfile、numpy等。 import wave # 读取WAV文件 with wave.open(input.wav, rb) as wav_file: …

RH850---注意问题积累--1

硬件规格(引脚分配&#xff0c;内存映射&#xff0c;外设功能规格、电气特性、时序图)和操作说明 注意:有关使用的详细信息&#xff0c;请参阅应用说明 ---------外围函数。。。 1:存储指令完成与后续同步指令的一代 当控制寄存器被存储指令更新时&#xff0c;从存储的执行开始…

白杨SEO:中国搜索引擎市场份额排名如何,百度还是PC和移动端均第一吗?

前言&#xff1a;这是白杨SEO公众号原创第536篇。为什么分享这个&#xff1f;因为我们不管是做搜索流量还是推荐流量&#xff0c;都应该随时了解当下流量主要在哪&#xff0c;欢迎评论&#xff0c;转发&#xff0c;收藏。图片在公众号白杨SEO优化教程上去看。 文章大纲&#x…

南京邮电大学计算机网络实验二(网络路由器配置RIP协议)

文章目录 一、 实验目的和要求二、 实验环境(实验设备)三、 实验步骤四、实验小结&#xff08;包括问题和解决方法、心得体会、意见与建议等&#xff09;五、报告资源 一、 实验目的和要求 掌握思科路由器的运行过程&#xff0c;掌握思科路由器的硬件连线与接口&#xff0c;掌…

VBA学习(13):获取多层文件夹内文件名并建立超链接

代码使用了FileSystemObject对象和递归的方法实现文件夹和文件的遍历功能。分别将文件夹名称和文件名提取在表格的A/B列&#xff0c;并对文件名创建了超链接。 示例代码如下&#xff1a; Sub AutoAddLink()Dim strFldPath As StringWith Application.FileDialog(msoFileDialog…

如何下载DVS Gesture数据集?解决tonic.datasets.DVSGesture错误HTTP Error 403: Forbidden

1 问题 DVSGesture数据集是一个专注于动态视觉传感&#xff08;Dynamic Vision Sensor, DVS&#xff09;技术的数据集&#xff0c;它包含了基于事件的图像记录&#xff0c;用于手势识别任务。DVSGesture数据集由一系列动态图像组成&#xff0c;这些图像是通过动态视觉传感器捕…

抖音矩阵系统搭建,AI剪辑短视频,一键管理矩阵账号

目录 前言&#xff1a; 一、抖音矩阵系统有哪些功能&#xff1f; 1.AI智能文案 2.多平台账号授权 3.多种剪辑模式 4. 矩阵一键发布&#xff0c;智能发布 5.抖音爆店码功能 6.私信实时互动 7.去水印及外链 二、抖音矩阵系统可以解决哪些问题&#xff1f; 总结&#xff…

理解HTTP请求格式

HTTP概念 HTTP全称HyperTextTransfer Protocol(超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议&#xff1b;HTTP是一个客户端&#xff08;用户&#xff09;和服务端&#xff08;网站&#xff09;之间请求和响应的标准。 HTTP 协议是以 ASCII 码传输&…

Gobject tutorial 八

The GObject base class Object memory management Gobject的内存管理相关的API很复杂&#xff0c;但其目标是提供一个基于引用计数的灵活的内存管理模式。 下面我们来介绍一下&#xff0c;与管理引用计数相关的函数。 Reference Count 函数g_object_ref和g_object_unref的…

怎么将几段音频合并在一起,试试这几个音频拼接小妙招

怎么将多个音频合并在一起呢&#xff1f;音频是我们日常工作生活中常见的文件&#xff0c;音频与我们息息相关&#xff0c;无论你是音乐爱好者&#xff0c;还是喜欢记录生活中的声音&#xff0c;都离不开音频。因此我们会遇到关于很多音频剪辑的难题&#xff0c;就像今天小编给…

usb摄像头应用编程

作者简介&#xff1a; 一个平凡而乐于分享的小比特&#xff0c;中南民族大学通信工程专业研究生在读&#xff0c;研究方向无线联邦学习 擅长领域&#xff1a;驱动开发&#xff0c;嵌入式软件开发&#xff0c;BSP开发 作者主页&#xff1a;一个平凡而乐于分享的小比特的个人主页…

auto/范围for/nullptr(C++)

文章目录 前言auto范围fornullptr总结 前言 auto auto主要用于类型推导&#xff0c;代替长类型 auto在c语言使用时修饰变量&#xff0c;表示这个变量是具有自动存储器的局部变量&#xff0c;但是在实际中几乎不会使用。 C11赋予了他新的含义&#xff0c;auto作为一个新的类型…

conda install xformers -c xformers/label/dev 的安装问题

在StableSR项目框架中&#xff0c;需要执行 conda install xformers -c xformers/label/dev 但是报错&#xff0c;错误显示&#xff0c;版本不匹配&#xff0c;如下所示&#xff1a; 我改用pip来安装&#xff0c;好像就不报错了&#xff1a; pip install xformers

javaWeb项目-ssm+vue企业台账管理平台功能介绍

本项目源码&#xff1a;javaweb项目ssm-vue企业台账管理平台源码-说明文档资源-CSDN文库 项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboo…