mips架构中断流程

1、硬件中断产生

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

图2

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

图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个中断的用途分配如下:

假设:

        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进入相应的中断处理程序。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值