rcore-os / rCore-Tutorial-Book-v3

A book about how to write OS kernels in Rust easily.
https://rcore-os.github.io/rCore-Tutorial-Book-v3/
GNU General Public License v3.0
1.13k stars 206 forks source link

rCore-Tutorial-Book-v3/chapter9/2device-driver-0 #196

Open utterances-bot opened 8 months ago

utterances-bot commented 8 months ago

外设平台 - rCore-Tutorial-Book-v3 3.6.0-alpha.1 文档

https://rcore-os.cn/rCore-Tutorial-Book-v3/chapter9/2device-driver-0.html

chestNutLsj commented 8 months ago

下面是一些与 PLIC 相关的寄存器

有个错别字

lispking commented 8 months ago
Claim         0x0c20_0004    按优先级顺序返回下一个中断
Complete      0x0c20_0004    写操作表示完成对特定中断的处理

这两个地址是有一个写错了么?

chestNutLsj commented 7 months ago

在RISC-V中,与外设连接的I/O控制器的一个重要组成是平台级中断控制器(Platform-Level Interrupt Controller,PLIC),它的一端汇聚了各种外设的中断信号,另一端连接到CPU的外部中断引脚上。当一个外部设备发出中断请求时,PLIC 会将其转发给 RISC-V CPU, CPU 会执行对应的中断处理程序来响应中断。通过RISC-V的 mie 寄存器中的 meie 位,可以控制这个引脚是否接收外部中断信号。当然,通过RISC-V中M Mode的中断委托机制,也可以在RISC-V的S Mode下,通过 sie 寄存器中的 seie 位,对中断信号是否接收进行控制。

这一段的最后有两个比较粗心的错误:应该是mstatus寄存器中的meie位,而不是mie寄存器,mie本身是mstatus的另一个位,控制全局中断是否开启;同理,最后sie寄存器也应改为sstatus寄存器。

DGYYYYYYYYYYY commented 5 months ago

@chestNutLsj 这段话并没有问题。MIE寄存器提供MEIE、MTIE和MSIE三个标志位分别用于控制M-mode级别外部中断、时钟中断和软中断是否有效。这段话所说的外部中断就是由MIE寄存器的MEIE位控制的。mstatus寄存器中也没有MEIE位,其中的MIE位是用来控制所有中断(包括外部中断、时钟中断和软中断)是否有效的。具体可查看RISC-V特权级规范(20211203)3.1.6节和3.1.9节。