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

news/2025/1/8 21:09:36/

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

APLIC_1">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.ppmy.cn/news/1561321.html

相关文章

网络安全主动防御技术与应用

15.1 入侵阻断技术与应用 入侵阻断是网络安全主动防御的技术方法,其基本原理是通过对目标对象的网络攻击行为进行阻断,从而达到保护目标对象的目的。 1)原理 防火墙、IDS是保障网络安全不可缺少的基础技术,但是防火墙和IDS 本身…

中关村科金电销外呼机器人的智能调度算法与业务高峰应对策略

在电销行业,业务高峰期间客户咨询量激增,对资源调度提出了巨大挑战。如何高效合理地分配有限的客服资源,确保每一位客户都能得到及时、优质的响应,是电销企业需要解决的问题。中关村科金电销外呼机器人凭借其先进的智能调度算法&a…

【2025最新计算机毕业设计】基于SSM的物流管理系统(高质量源码,提供文档,免费部署到本地)【提供源码+答辩PPT+文档+项目部署】

作者简介:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容:🌟Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

利用 NineData 实现 PostgreSQL 到 Kafka 的高效数据同步

记录一次 PostgreSQL 到 Kafka 的数据迁移实践。前段时间,NineData 的某个客户在一个项目中需要将 PostgreSQL 的数据实时同步到 Kafka。需求明确且普遍: PostgreSQL 中的交易数据,需要实时推送到 Kafka,供下游多个系统消费&#…

微服务三大配件深度解析、实现

一、背景知识 随着信息技术的飞速发展,企业应用系统的规模和复杂度日益增加。传统的单体架构已经难以满足现代应用对高可用性、可扩展性和灵活性的需求。微服务架构作为一种新兴的架构模式,通过将复杂的系统拆分为多个小型、自治的服务单元,…

Lua开发环境如何安装?保姆级教程

大家好,我是袁庭新。Lua开发环境如何安装搭建?这套篇文章帮你搞定~ CentOS 7系统默认已经安装了Lua语言环境,因此可直接运行Lua代码。可以使用以下命令查看当前系统中默认自带的Lua版本。 # 查看系统默认自带的Lua版本 [rootloc…

Lua语言的数据库交互

Lua语言的数据库交互 引言 Lua是一种轻量级、高效、可扩展的脚本语言,广泛应用于游戏开发、嵌入式系统以及快速原型开发等领域。在现代软件开发中,数据的持久化和管理变得尤为重要,因此数据库交互成为开发者必不可少的技能之一。本文将深入…

如何排查 Apache Doris 中 “Failed to commit txn“ 导入失败问题?

今天来聊聊 Doris 数据导入那些事儿。你是不是在数据导入的时候遇到各种状况&#xff0c;让人头疼不已&#xff1f;别担心&#xff0c;这篇文章给你答案&#xff01; 在 Doris 的版本里&#xff0c;< 2.0.3 的时候&#xff0c;数据迁移存在一些已知的问题&#xff0c;比如可…