AIA - APLIC之三(附APLIC处理流程图)

news2025/1/8 18:33:41

本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。

1 APLIC复位

APLIC复位后,其所有状态都变得有效且一致,但以下情况除外:

  • 每个中断域的domaincfg寄存器(spec第 4.5.1 节);
  • 可能是machine-level interrupt domain的MSI地址配置寄存器(spec第4.5.3 和4.5.4 节);
  • 每个中断域的genmsi寄存器的Busy位(如果存在)(spec第 4.5.15 节)。

以上这几种情况,在APLIC复位后,需要根据这些寄存器的具体定义来确定。

2 对中断pending位的精确影响

尝试通过写入中断域控制区域中的寄存器,来设置或清除中断源的pending位可能会成功,也可能不会成功,具体取决于相应的中断源模式、中断域的中断投递模式,以及中断源校正输入的状态值(spec第4.5.2节中定义)。
下面列举了,针对给定的中断源源模式,设置或清除pending位时的所有情况。

如果源模式为Detached

  • 仅通过对setip或setipnum寄存器,执行相关写入操作,将pending位设置为1。
  • 当在APLIC处请求中断或由MSI转发中断,或者通过对in_clrip寄存器或clripnum进行相关写入时,将清除pending位。

如果源模式为Edge1Edge0

  • 通过校正输入值,从低到高的跳变,或者通过对setip或setipnum寄存器进行相应写入,将pending位设置为1。
  • 当在APLIC处请求中断或由MSI转发中断,或者通过对in_clrip寄存器或clripnum进行相关写入时,将清除pending位。

如果源模式为Level1Level0,并且中断域配置为直接投递模式(domaincfg.DM = 0):

  • 只要校正后的输入值为高电平,pending位就会设置为1。无法通过写入setip或setipnum寄存器来设置pending位。
  • 只要校正后的输入值为低电平,pending位就会被清除。pending位不能通过 APLIC 处的中断声明来清除,也不能通过写入in_clrip寄存器或clripnum来清除。

如果源模式为Level1Level0,并且中断域配置为MSI投递模式(domaincfg.DM = 1):

  • 通过校正输入值中从低到高的跳变,将pending位设置为1。当经校正的输入值为1时,也可以通过setip或setipnum寄存器的相应写入来设置pending位。
  • 只要校正后的输入值为低电平,或者通过对in_clrip寄存器或clripnum进行相关写入,就会清除pending位。

当中断域处于直接投递模式时,电平触发的中断源的pending位,始终只是整流输入值的副本。即使在MSI传送模式下,当校正输入值为0时,电平触发的中断源的pending位,也不会被设置 (= 1)。

除上述规则外,如spec第4.5.2节中所述,对sourcecfg寄存器的写入,还可导致源的中断挂起位设置为1。

3 直接传递模式

当中断域处于直接投递模式 (domaincfg.DM = 0) 时,中断通过每个hart的唯一信号(通常是专用中断线)从APLIC传递到hart。
在这种情况下,中断域的内存映射控制区域,在末尾包含一组中断传送控制 (IDC) 结构,每个hart都会对应一个IDC结构。
第一个IDC结构,是该中断域内索引为0的hart;第二个是该中断域索引为1的hart;依次类推。

3.1 IDC结构

每个IDC结构都是32字节(对齐到 32 字节地址边界),并具有以下定义的寄存器:
在这里插入图片描述
如果IDC结构,针对的特定hart,对于中断域中的任何实际hart都无效,则这些寄存器,可以选择全部为只读零。否则,寄存器将在下面单独描述。

特定的APLIC,可能被构建为支持最大数量的hartÿ

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

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

相关文章

openwrt 清缓存命令行

一、查看缓存 : free -m 二、清缓存:echo 3 > /proc/sys/vm/drop_caches  三、详解。 释放物理页缓存 echo 1 > /proc/sys/vm/drop_caches 释放可回收的slab对象,包含inode and dentry echo 2 > /proc/sys/vm/drop_caches 同时…

Linux -- 端口号、套接字、网络字节序、sockaddr 结构体

目录 什么是端口号? 什么是套接字? 网络字节序 struct sockaddr 结构体 什么是端口号? 我们日常上网的时候,主机其实是在进行两种操作: 1、把远端的数据拉取到本地,比如刷抖音的时候,手机向…

《数据结构》期末考试测试题【中】

《数据结构》期末考试测试题【中】 21.循环队列队空的判断条件为?22. 单链表的存储密度比1?23.单链表的那些操作的效率受链表长度的影响?24.顺序表中某元素的地址为?25.m叉树第K层的结点数为?26. 在双向循环链表某节点…

实际开发中,常见pdf|word|excel等文件的预览和下载

实际开发中,常见pdf|word|excel等文件的预览和下载 背景相关类型数据之间的转换1、File转Blob2、File转ArrayBuffer3、Blob转ArrayBuffer4、Blob转File5、ArrayBuffer转Blob6、ArrayBuffer转File 根据Blob/File类型生成可预览的Base64地址基于Blob类型的各种文件的下载各种类型…

《Opencv》基础操作详解(4)

接上篇:《Opencv》基础操作详解(3)-CSDN博客 目录 22、图像形态学操作 (1)、顶帽(原图-开运算) 公式: 应用场景: 代码示例: (2)…

大数据高级ACP学习笔记(2)

钻取:变换维度的层次,改变粒度的大小 星型模型 雪花模型 MaxCompute DataHub

尚硅谷· vue3+ts 知识点学习整理 |14h的课程(持续更ing)

vue3 主要内容 核心:ref、reactive、computed、watch、生命周期 常用:hooks、自定义ref、路由、pinia、miit 面试:组件通信、响应式相关api ----> 笔记:ts快速梳理;vue3快速上手.pdf 笔记及大纲 如下&#xff…

阻抗(Impedance)、容抗(Capacitive Reactance)、感抗(Inductive Reactance)

阻抗(Impedance)、容抗(Capacitive Reactance)、感抗(Inductive Reactance) 都是交流电路中描述电流和电压之间关系的参数,但它们的含义、单位和作用不同。下面是它们的定义和区别: …

在 SQL 中,区分 聚合列 和 非聚合列(nonaggregated column)

文章目录 1. 什么是聚合列?2. 什么是非聚合列?3. 在 GROUP BY 查询中的非聚合列问题示例解决方案 4. 为什么 only_full_group_by 要求非聚合列出现在 GROUP BY 中?5. 如何判断一个列是聚合列还是非聚合列?6. 总结 在 SQL 中&#…

B树与B+树:数据库索引的秘密武器

想象一下,你正在构建一个超级大的图书馆,里面摆满了各种各样的书籍。B树和B树就像是两种不同的图书分类和摆放方式,它们都能帮助你快速找到想要的书籍,但各有特点。 B树就像是一个传统的图书馆摆放方式: 1. 书籍摆放&…

回归预测 | MATLAB实现CNN-SVM多输入单输出回归预测

回归预测 | MATLAB实现CNN-SVM多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-SVM多输入单输出回归预测预测效果基本介绍模型架构程序设计参考资料 预测效果 基本介绍 CNN-SVM多输入单输出回归预测是一种结合卷积神经网络(CNN)和支持向量机&#…

Linux-Ubuntu之裸机驱动最后一弹PWM控制显示亮度

Linux-Ubuntu之裸机驱动最后一弹PWM控制显示亮度 一, PWM实现原理二,软件实现三,正点原子裸机开发总结 一, PWM实现原理 PWM和学习51时候基本上一致,控制频率(周期)和占空比,51实验…

自定义校验注解

已有的注解不能满足所有的校验需求,特殊的情况需要自定义校验(自定义校验注解) 1.自定义注解,并在注解上指定校验逻辑 Constraint(validatedBy StateValidation.class) // 指定校验逻辑 package com.example.demo.validation;import jakarta.validation.Constraint; import j…

分数阶傅里叶变换代码 MATLAB实现

function Faf myfrft(f, a) %分数阶傅里叶变换函数 %输入参数: %f:原始信号 %a:阶数 %输出结果: %原始信号的a阶傅里叶变换N length(f);%总采样点数 shft rem((0:N-1)fix(N/2),N)1;%此项等同于fftshift(1:N),起到翻…

Ubuntu 20.04安装gcc

一、安装GCC 1.更新包列表 user596785154:~$ sudo apt update2.安装gcc user596785154:~$ sudo apt install gcc3.验证安装 user596785154:~$ gcc --version二 编译C文件 1.新建workspace文件夹 user596785154:~$ mkdir workspace2.进入workspace文件夹 user596785154:~…

小兔鲜儿:头部区域的logo,导航,搜索,购物车

头部:logo ,导航,搜索,购物车 头部总体布局: 设置好上下外边距以及总体高度, flex布局让总体一行排列 logo: logo考虑搜索引擎优化,所以要使用 h1中包裹 a 标签,a 里边写内容(到时候…

Linux C编程——文件IO基础

文件IO基础 一、简单的文件 IO 示例二、文件描述符三、open 打开文件1. 函数原型2. 文件权限3. 宏定义文件权限4. 函数使用实例 四、write 写文件五、read 读文件六、close 关闭文件七、Iseek 绍 Linux 应用编程中最基础的知识,即文件 I/O(Input、Outout…

论文解读 | NeurIPS'24 IRCAN:通过识别和重新加权上下文感知神经元来减轻大语言模型生成中的知识冲突...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 点击 阅读原文 观看作者讲解回放! 作者简介 史丹,天津大学博士生 内容简介 大语言模型(LLM)经过海量数据训练后编码了丰富的世界知识。最近的研究表明&#xff0c…

【51单片机零基础-chapter5:模块化编程】

模块化编程 将以往main中泛型的代码,放在与main平级的c文件中,在h中引用. 简化main函数 将原来main中的delay抽出 然后将delay放入单独c文件,并单独开一个delay头文件,里面放置函数的声明,相当于收纳delay的c文件里面写的函数的接口. 注意,单个c文件所有用到的变量需要在该文…

扩散模型论文概述(三):Stability AI系列工作【学习笔记】

视频链接:扩散模型论文概述(三):Stability AI系列工作_哔哩哔哩_bilibili 本期视频讲的是Stability AI在图像生成的工作。 同样,第一张图片是神作,总结的太好了! 介绍Stable Diffusion之前&…