注意,在 CLINT 内存映射中没有用于特定中断的启用位,因为这些中断的启用位于每个中断的 mie CSR 和 mstatus.mie CSR 位中,它全局启用所有机器中断. 相关寄存器 MSIP Registers 机器模式软件中断是通过写入内存映射控制寄存器 msip 来生成的。 msip 寄存器是一个 32 位宽的 WARL 寄存器,其中高 31 位绑定为 0。
首先,CLINT中包含每个核心的msip(Machine Software Interrupt Pending)寄存器;接着,发送核(即发起中断...
地址从 CLINT_BASE 开始,每个寄存器占用4字节。 例如,MSIP[0] 的地址是 CLINT_BASE + 04,MSIP[1] 的地址是 CLINT_BASE + 14,以此类推。 MTIMECMP 寄存器(Machine Timer Compare Registers): 每个硬件线程都有一个MTIMECMP寄存器,用于设置定时器中断的触发时间。 地址从 CLINT_BASE + 0x4000 开始,每个寄存器...
在 RISC-V 中,机 器模式软件中断的主要目的是提供一种手段,用来在多 HART 系统中中断其他的 HART。为此,处理器的设计者需要在 CLINT 部分提供一个内存映射寄存器(或 寄存器位),称为 msip(machine software interrupt pending,机器模式软件中断等 待寄存器)。对 msip 的写操作会触发软件中断。 (2)确定异常情况...
MSIP表示m模式核间中断,此位只读,其状态反应的是CLINT中对应的核间中断设置寄存器最低位的状态,设置CLINT核间中断设置寄存器最低位为1则产生核间中断,置0则清除核间中断。 MTIP表示m模式定时中断,此位只读,其状态通过设置CLINT中对应的mtimecmp寄存器来清零。
作为CLINT来说,软件中断只需要向CLINT的MSIP0或者SSIP0寄存器的最高位写1即可,处理完中断后,将其置为0,这样就能够清除掉软件中断的标志位。 定时器中断 作为riscv内核特有的中断,其用法就是往MTIMECMP或者STIMECMP中写特定的值,当mtime达到该值时产生中断,此时继续填写特定的tick就可以继续产生下个中断,反复如此,...
CLINT下只有3种寄存器 在SiFive U54-MC Core Complex中寄存器布局如下,每个hart一个msip,每个hart一个mtimecmp,各核共用一个mtime。 MSIP 通过写入内存映射控制寄存器msip而产生机器模式软件中断。msip寄存器是一个32位宽的WARL寄存器,其中LSB反映在mip寄存器的msip位中。msip寄存器中的其他位被硬连线为零。复位时...
This section describes the functionality of the memory-mapped registers in the CLINT. 本节描述了CLINT(Core Local Interruptor)中内存映射寄存器的功能。 9.6.1 MSIP Register Machine mode software interrupts are generated by writing to the memory-mapped control register msip. Each msip register is a...
writel(d->hwirq, handler->hart_base + CONTEXT_CLAIM); } } 四.总结 以上介绍了clint和plic。对于plic尤其要理解其context的概念,因为他和plic寄存器的布局对应。 另外要从整体上了解下中断系统的架构,和设备树对应起来理解,尤其是设备树中中断相关的配置。为后面linux中断系统驱动分析做准备。
当内存映射寄存器mtime大于或等于全局时间基准寄存器mtimecmp时,触发定时器中断(中断ID#7),这两个寄存器都是CLINT内存映射的一部分。其他harts可以写入mtimecmp来设置定时器中断。通常情况下,mtime和mtimecmp寄存器仅在机器模式下可用,除非PMP授予用户或特权模式对它们所在的内存映射区域的访问权限。