网站黑链 工具,猪八戒网站开发,关键词seo,苏州小程序开发外包本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。
1 通过IMSIC接收外部中断的CSR
软件通过《AIA - 新增的CSR》描述的CSR来访问IMSIC。 machine level 的 CSR 与 IMSIC 的 machine level interrupt file 可相互互动;而 supervisor level 的 CSR…本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。
1 通过IMSIC接收外部中断的CSR
软件通过《AIA - 新增的CSR》描述的CSR来访问IMSIC。
machine level 的 CSR 与 IMSIC 的 machine level interrupt file 可相互互动;而 supervisor level 的 CSR 也能与 IMSIC 的 supervisor level interrupt file 可相互互动;同样地当 IMSIC 有 guest interrupt file,VS CSR 可与 guest interrupt file 相互互动。machine level 相关的CSR有以下:miselect、mireg、mtopei。 supervisor level 相关的 CSR 有以下:siselect、sireg、stopei。 当 hypervisor extension 实现时,与 VS CSR 相关的有以下:vsiselect、vsireg、vstopei。
miselect 和 mireg通过间接的方式,访问machine level的附带寄存器。 同样的,supervispr level的siselect 和 sireg,以及 VS level 的 vsiselect 和 vsireg,也可以间接访问各自 level 的附带寄存器。 需要注意的是: 这些附带寄存器既不是CSR,也不是memory-mapped的寄存器,它们在interrupt file中。 不同level的interrupt file的寄存器组相同,*iselect表示这些寄存器的地址,它的范围在 0x70~0xFF ,会选择相对应在 IMSIC 中 interrupt file的寄存器,interrupt file结构如下:
寄存器0x71 和 0x73~0x7F 目前被保留。 当 *iselect CSR 具有这些值之一(0x71和0x73~0x7f)时:
从匹配的 *ireg CSR读取,会返回0;并且会忽略向 *ireg CSR 的写入行为。eip0 到 eip63 对应所有实现 interrupt ID 的 pending bit,统称之为 eip array; 同样的 eie0 到 eie63 所对应 enabled bit 统称之为 eie array。 每个寄存器32bit,eip0/eie0的bit0无效,因此interrupt ID的有效范围为1-2047,对应这些寄存器组的bit位置。
1.1 interrupt file交互示意图
根据前面章节描述,我们可以得到machine level的CSR 与 IMSIC 的 machine level interrupt file交互,其结构如下所示:
seteipnum_le与seteipnum_be位于内存映射空间中,基址为4KB对齐,这2个寄存器在映射空间中的偏移为0x000和0x004。向seteipnum_le或seteipnum_be写入Interrupt ID,可将Interrupt ID对应的eip array中某bit置位。向miselect中写入0x70~0xff任一地址,然后读写mireg,可实现对Interrupt File内部实际寄存器的访问。