mips架构中断流程

1、硬件中断产生

2、------->CPU自动设置控制寄存器CAUSE中的ExcCode(CAUSE6:2)位(图2显示的CPU控制寄存器Cause)

mips架构中断流程_第1张图片

图2

3、------> CPU就自动跳转异常入口(图3所示)。

mips架构中断流程_第2张图片

图3

其中控制寄存器CAUSE(图2)中的ExcCode位段用来描述通用异常类型,共5 位,故而可以描述 2^5 = 32 个异常类型。

4、-------->CPU会取出CAUSE 寄存器的 ExcCode域(5 位,可以描述32个异常),用之索引一个通用异常处理表并跳转到异常处理表项所指向的处理程序。

 handle_int

中断 ExcCode值为 0

handle_tlbm

TLB 修改异常 ExcCode值为1

handle_tlbl

TLB 读异常 ExcCode 值为 2

.

.

.

.

 handle_sys

系统调用 ExcCode 值为8

5、------>来自硬件的中断,CPU会自动将CAUSE 寄存器的 ExcCode 域(6:2)设为 0,其最终会执行总的中断处理程序 handle_int,ExcCode位为 0 时,只是笼统地描述为中断,具体的是何种中断,还要借助 CAUSE寄存器的 IP位(15:8, IP7-IP0)来描述。硬件中断出现时,CPU 会根据中断信号的来源,设置 CAUSE 之IP位。IP位共 8位,每位对应一个中断。龙芯2E下,8个中断的用途分配如下:

mips架构中断流程_第3张图片

假设:

        1. 用户击键后,键盘控制器8042产生中断,通过 I8259A在CPU 的中断引脚上,引起异

2. CPU 自动设置CAUSE的ExcCode 位为0,IP5为 1,并跳转到通用异常入口
0xFFFFFFFF 80000180
3. 位于通用异常入口处的简单异常处理程序,根据ExcCode 的值索引异常处理表
(exception_handlers),获取到 0 号异常的处理程序是 handle_int,并跳转过去
4. handle_int 根据 CAUSE之IP位的值跳转到中断控制器8259A相关的中断处理函数
do_nb2005_8259

5. do_nb2005_8259 读取8259A之In-Service Register(ISR, 注意与 x86 的差
异,x86是由8259A 主动将中断号送上数据总线的),通过简单的计算得到中断号,进而调
用 do_IRQ进入相应的中断处理程序。

 

你可能感兴趣的:(龙芯ls1c300b,mips)