当前位置: 首页 > article >正文

RISC-V AIA学习3---APLIC第三部分

1. Reset

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

a. 每个中断域的domaincfg寄存器;
b. 可能是machine-level interrupt domain的MSI地址配置寄存器;
c. 每个中断域的genmsi寄存器的Busy位(如果存在)。
以上这几种情况,在APLIC复位后,需要根据这些寄存器的具体定义来确定。不管 APLIC 其他部分的状态怎么变,这几个特定的寄存器或寄存器中的某些位的状态是有明确规定的,不会因为复位操作而变得不确定。这样可以保证在系统复位后,这些关键的配置信息和状态标志能够保持稳定,以便系统能够正确地重新启动和运行中断相关的功能。

2. Precise effects on interrupt-pending bits

3. APLIC的直接传递模式

当 APLIC 的中断域配置为直接传递模式domaincfg.DM = 0)时,APLIC 会通过专用线路向每个处理器核心(hart)直接发送中断信号。这种模式下,APLIC 作为平台级控制器,负责管理中断到各 hart 的路由和优先级处理。

3.1 IDC(中断传递控制)结构

每个中断域的内存映射控制区域末尾包含一个IDC 结构体数组,每个 hart 对应一个IDC结构体(32 字节,32 字节对齐)。第一个IDC结构,是该中断域内索引为0的hart;第二个是该中断域索引为1的hart;依次类推。结构体包含以下寄存器:

注意:若 hart 索引无效(如系统中不存在该核心),这些寄存器可能全为只读 0。

3.1.1 中断传递使能(idelivery)

  • 功能:控制中断是否传递到目标 hart。
    • 0:禁用中断传递(hart 不会收到该域的中断)。
    • 1:启用传递(hart 会收到符合条件的中断)。
  • 无效 hart:若索引无效,设置idelivery=1也不会传递中断。

3.1.2 中断强制(iforce)

  • 功能:测试时强制触发中断。
    • 1:当domaincfg.IE=1idelivery=1时,强制向相应的hart发送中断。
    • topi=0时,为hart生成伪中断(无实际中断源)。
  • 自动清零:当读取寄存器claimi返回 0(伪中断)时,iforce自动清零。

3.1.3 中断优先级阈值(ithreshold)

  • 功能:设置触发中断的最低优先级(数值越大优先级越低)。
    • ithreshold = P(非零):仅优先级低于P 的中断会触发。
    • ithreshold = 0:所有启用的中断都会触发。
  • 位数:支持IPRIOLEN位,优先级范围02^IPRIOLEN-1

3.1.4 top interrupt

  • 功能:只读寄存器,显示当前最高优先级且符合条件的中断。
  • 返回值格式
    • 位 25-16:中断源编号(minor identity)。
    • 位 7-0:中断优先级。
    • 其他位:0。
  • 返回 0 的情况
    • 无有效中断。
    • ithreshold非零且无符合条件的中断。

3.1.5 claimi

  • 功能:读取时清除对应中断的挂起位,并处理伪中断。
  • 规则
    • 若返回非零值:清除对应中断的挂起位。
    • 若返回 0:自动清零iforce,表示伪中断。

3.2 中断投递和处理
当配置中断域,以使APLIC直接向HART传送中断时(domaincfg的字段DM为零),APLIC在对应中断域的特权级别,为该域的所有HART提供外部中断信号,只要以下一个条件满足:

(a) hart没有IMSIC
(b) 相关IMSIC中断文件的eidelivery寄存器设置为0x40000000(spec第3.8.1节)。
对于M level,来自APLIC的中断信号在每个hart的mip CSR中显示为位MEIP(achine External Interrupt-Pending)。
对于S level,中断信号在每个hart的mip和sip CSR中显示为 SEIP 位(supervisor External Interrupt-Pending)。每个中断信号可以任意延迟从APLIC传输到对应的hart。

在APLIC,发送至hart的每个中断信号,均源自寄存器domaincfg的IE字段以及该域的内存映射控制区域中 hart IDC结构的当前状态。

如果domaincfg.IE = 0或通过idelivery寄存器禁用到hart的中断传送(idelivery = 0),则中断信号将保持无效状态。
当domaincfg.IE = 1并且中断投递被使能(idelivery = 1)时,只要寄存器iforce或topi不为零,中断信号就会被置位。
由于APLIC和hart之间的通信可能存在延迟,因此可能会发生外部中断陷阱被捕获(hart侧的MEIP或SEIP置位),但当实际发生对claimi寄存器的读取时,没有该hart中断enable和pending的情况。在这种情况下,claimi返回的中断标识为0,从而导致来自APLIC的表现为虚假中断。
便携式软件,必须做好应对 APLIC 上可能出现的虚假中断的准备,这种情况可以安全地被忽略,而且应该很少见。
出于测试目的,可以通过将IDC结构的iforce寄存器,设置为1来触发Hart的虚假中断。

仅用于通过APLIC,进行外部中断的陷阱处理程序,可大致编写如下:

4 MSI传递模式
在MSI投递模式(domaincfg.DM = 1)下,中断域通过MSI将中断转发到目标hart。

仅当中断源对应的pending位和enable位都为1,并且寄存器domaincfg的IE字段也为1时,才会为特定中断源发送MSI。如果发送MSI,则源的中断pending位将被清除。


http://www.kler.cn/a/612528.html

相关文章:

  • 手机销售终端MPR+LTC项目项目总体方案P183(183页PPT)(文末有下载方式)
  • 自由学习记录(48)
  • 【设计模式】工厂模式详解-----简单工厂模式、工厂方法模式、抽象工厂模式
  • JS—Promise:3分钟掌握Promise
  • C++11QT复习(二)
  • kafka 如何保证消息不丢失,详细讲解
  • docker-Dify外接Fastgpt知识库
  • python dict转换成json格式
  • 【C++游戏引擎开发】《线性代数》(2):矩阵加减法与SIMD集成
  • PHP 应用SQL 注入符号拼接请求方法HTTP 头JSON编码类
  • 鸿蒙 ArkUI 进行网络状态监听封装
  • vector和list区别
  • leetcode240.搜索二维矩阵||
  • Flask接口开发--引入mysql
  • Qt:QWebEngineView显示网页失败
  • Android 底部EditView输入时悬浮到软键盘上方
  • 无人机产教融合新方向,装调检修技术详解
  • 前缀和、差分
  • C语言--文件操作教案
  • Mybatis缓存模块分析-源码