龙芯中断系统

龙芯中断系统与x86中断系统完全不一样的。

CPU级中断(异常)支持

几个相关的寄存器有
SR (BEV, SR, NMI, IM7-0, ERL, EXL, IE)
Cause (IP7-0)

龙芯有6个硬件中断信号线,分别对应Cause寄存器的15~10(IP7~IP2)位,龙芯片上时钟(定时器)占用了最高位那一根信号线,即Cause中的IP7。

龙芯还有两个软件中断寄存器位,对应Cause的9~8(IP1~0)位,它们是可读可写的。

当外部一个中断信号来到的时候,首先影响的就是Cause寄存器中IP位,信号从哪根线进入就会把对应的IP7~IP2中的那个位置1。Cause的任何一个IP位被置1,就能够引发一个CPU异常,但是要实在地引发CPU异常,还需要通过SR状态寄存器中的某几个关卡。要使一个传入的中断信号一定能引发一个中断,需要对SR中的以下几个位做如下操作:

  • SR(IE 0位) 位必须置1, 否则会束缚CPU不响应任何中断,所以这位的名字叫全局中断全能位;
  • SR(EXL 1位) 和 SR(ERL 2位) 两位必须清零。如果它俩中的任何一位为1, 则会禁止任何中断。而且每一次中断(CPU异常)成功触发后,它们中的某一个会自动置1,所以要注意在一个异常结束前,要将这两位都清零一下;
  • 在SR状态寄存器中,还要8位掩码位 IM7~0(15位~8位),它们分别对应Cause中的那8位IP位(IP7~0),要想使某个IP位成功引发一个CPU异常,则那个IP位对应的IM位必须置1(表示掩码开)。相当于在这里又设置了一道关卡。由于8个通道有8个掩码,可以实现精确独立的信号响应控制,而这种控制是由软件在程序中实施的,所以给了程序员很大的方便。
原文地址:https://www.cnblogs.com/kuainiao/p/2859833.html