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

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

本文属于《 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.lryc.cn/news/516446.html

相关文章:

  • React Router 向路由组件传state参数浏览器回退历史页面显示效果问题
  • 线程池与并发工具:Java的分身管理器
  • 字玩FontPlayer开发笔记8 Tauri2文件系统
  • 头歌python实验:网络安全应用实践3-验证码识别
  • 客户案例:基于慧集通(DataLinkX)集成平台的金蝶云星空与HIS系统集成案例--凭证模板的配置(一)
  • 基于 Python 的大学教室资源管理系统的设计与实现
  • nginx-灰度发布策略(split_clients)
  • nginx正向代理从安装到使用一网打尽系列(二)使用
  • Bash Shell的操作环境
  • Python爬虫基础——认识网页结构(各种标签的使用)
  • 如何实现一个充满科技感的官网(二)
  • GNU链接器简介
  • 欧几里得算法(简单理解版,非严格证明)
  • Mac软件介绍之录屏软件Filmage Screen
  • Ubuntu cuda-cudnn中断安装如何卸载
  • CSS——7.CSS注释
  • 鸿蒙APP之从开发到发布的一点心得
  • 某小程序sign签名参数逆向分析
  • 智能风控/数据分析 聚合 分组 连接
  • Unity3D PBR光照计算公式推导详解
  • 行为树详解(6)——黑板模式
  • Vue.js与其他框架有哪些兼容性?
  • Java 8 Stream 介绍
  • Java NIO、AIO分析
  • pip下载包出现SSLError
  • 零成本的互联网创业创意有哪些?
  • linux ubantu重启桌面
  • DeepSeek重新定义“Open“AI
  • iOS - 自旋锁
  • web应用网站如何启用http2请求