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位将被清除。

相关推荐
SuperHeroWu73 分钟前
【HarmonyOS 5】初学者如何高效的学习鸿蒙?
学习·华为·harmonyos·鸿蒙·入门·初学者·学习思路
启诚科技6 分钟前
虚拟现实--->unity学习
学习·unity
小白的高手之路1 小时前
Pytorch中torch.nn的学习
人工智能·pytorch·python·深度学习·神经网络·学习·机器学习
土包子=-=1 小时前
蓝桥杯嵌入式学习笔记
笔记·学习·蓝桥杯
虾球xz1 小时前
游戏引擎学习第194天
c++·学习·游戏引擎
xinxiyinhe1 小时前
GitHub上免费学习工具的精选汇总
学习·github
傍晚冰川2 小时前
【STM32】WDG看门狗(学习笔记)
c语言·笔记·科技·stm32·单片机·嵌入式硬件·学习
Moonnnn.3 小时前
运算放大器(三)运算放大器的典型应用
笔记·学习·硬件工程
技术小齐3 小时前
网络运维学习笔记(DeepSeek优化版)026 OSPF vlink(Virtual Link,虚链路)配置详解
运维·网络·学习