主页 > 互联网  > 

MachineInterruptRegisters


bit [15:0]记录interrupt的原因;bit[max:16]时user自定义的,默认不使用;

一个中断,trap to M-mode的条件如下:

当前是M-mode, mstatus.MIE==1,或者当前的权限等级低于M-mode, 此时不管当前的xIE是否为1,M-mode的中断总是有效的;满足上面的条件后,还需要mip/mie对应bit的值都设置为1;如果有中断委托寄存器,对应bit不能被委托;

M-mode的中断优先级是最高的;

在实际实现的时候,mip中的bit可以设置为writable,或者read-only;

如果是可写的,那么往这个bit写0,可以清除对应pending的中断;如果是read-only的,那么必须提供其他的方式来清除这个bit;

在实际实现时,如果中断可pending的话,mie对应bit都要设置成writable的;

CSR中每个bit的描述如下:

mip.MEIP & mie.MEIE分别对应machine-level external interrupts的pending&enable bits; MEIP必须是RO的,需要通过interrupt controller来set和clear;mip.MTIP & mie.MTIE分别对应machine-level timmer interrupts的pending&enable bits; MTIP必须是RO的,通过往mtimecmp寄存器写入对应的值来清除;mtimecmp寄存器的写入方式请参考:(后续补充)mip.MSIP & mie.MSIE分别对应machine-level software interrupts的pending&enable bits; MSIP必须是RO的,通过访问memory-mapped control registers来写入数据,这个中断一般是harts间用来通信的,machine_level的处理器中断;每个hart也可以通过往control register中访问,写入自己的MSIP;如果系统中只有一个hart, 或者platform中通过external interrupts(MEI)来代替,那么MSIP/MSIE都是read-only zero的;

如果s-mode没有实现,那么SEIP/STIP/SSIP/SEIE/STIE/SSIE都是read-only zero的;

如果实现了,那么supervisor modei相关的bit描述如下:

mip.SEIP & mie.SEIE分别对应supervisor-level external interrupts的pending&enable bits; SEIP是writable的,可以被M-mode的软件写入,用来指示S-mode有一个ext int pending;除此以外,该bit也可能会被platform-level interrupt controllr产生;所以SEIP是上述两种来源的逻辑或操作生成的;当用CSR指令来读mip时,SEIP的值,是上面两种来源的逻辑或,但是如果针对CSRRS/CSRRC这类,先读出来,再写入的指令,来自中断控制器的值,并不参与运算;只有软件写入的SEIP,参与CSRRS/CSRRC指令的计算;mip.STIP & mie.STIE分别对应supervisor-level timmer interrupts的pending&enable bits; STIP可写,M-mode的软件,可以将timer的interrupts, 委托到S-mode;mip.SSIP & mie.SSIE分别对应supervisor-level software interrupts的pending&enable bits; SSIP writable, 可以通过软件写入,也可以通过platform-specific interrupt controller置位;

上述的这些中断优先级如下:MEI, MSI, MTI, SEI, SSI, STI

如果interrupt通过mideleg寄存器,委托到S-mode, SIP/SIE寄存器才是可见的,否则,对应bit都是read-only zero的;

标签:

MachineInterruptRegisters由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“MachineInterruptRegisters