MIPS中断体系结构
MIPS中断体系结构解析
作者:weirdo-xo
邮箱:weirdo-xo@outlook.com
时间:2021-7-5
1. 具有中断向量偏移的例外
在《用芯探核-基于龙芯的Linux内核探索解析》中,把MIPS中具有专用向量地址的例外分为了六个:
- 硬复位,NMI,软复位
- TLB重填异常
- XTLB重填异常
- Cache错误异常
- 其他通用异常
- Ejtag类异常
TLB、XTLB重填异常是因为处理器频繁的遇到,所以具有专用的中断处理向量入口地址。
下面给出向量偏移地址的图:
这里我们应该注意对这几种中断进行分类,因为中断发生并且使能之后处理器后会直接跳转到指定的偏移地址处开始处理中断事物,这也是各种中断处理的入口。
2. 通用(常见)中断处理
再协处理器中有一个Cause寄存器,Cause寄存器的excode中显示了例外的类型,通过查询这个标志位我们就可以知道处理器内部或者外部出现了什么异常,并且可以派发到指定的中断处理函数。下图便是一个excode编码的实例:
由于PDF分页,这里只截取了部分的编码信息。这里以中断处理为例,但发生中断后,CPU的PC会被发射到其他异常处理的向量地址上,这里存放在异常处理的函数,在这里通过查询excode发现是发生了中断,于是跳转到中断的处理函数中,在中断处理的函数中进一步的通过IP&Mask等一系列操作确认触发中断的设备。
3. MIPS核心具有的中断
从外设的角度来看,MIPS具有多个的外设中断,大多的外设可以拥有自己的中断号。从处理器核心来看,MIPS只有8个相关的中断,其中有3-4个还被内部占用了(核间中断、计数器等),只有4个被用于外部中断。也就是说多个外部中断会通过一个中断控制器路由到这四个到处理器核心的中断,这里以龙芯处理器为例,介绍一下MIPS是如何接收外部中断的。
从上图我们可以看到64个外部中断会被路由到两个处理器核心中,并且路由的路径是可以配置的,并且路由的策略也是可以手动配置的,可以指定某个中断路由到具体的处理器进行处理。当处理器检测到是中断后,通过处理器协处理器的寄存器以及中断控制寄存器就可以判断出是那个模块发出的中断信号,进而跳转到目标模块注册的中断处理函数(也可能是另一个中断控制器)进行分析以及处理,最后得到发起中断的源设备。得到源设备后,Linux内核就会调用我们使用request_**_irq注册的中断处理函数进行最终的事物处理。
4. 总结
我们应该清楚的认识MIPS的中断处理流程或者说中断的结构,了解了中断的结构,后面我们在内核中分析中断处理的流程就会更加的方便和清晰。