龙芯2k1000的中断处理逻辑

龙芯2k1000的中断设计
1.前言
2.龙芯2k1000的中断描述
2.1mips设计上的通用中断处理
2.2龙芯中断的设计
3.龙芯2k1000中断的产生与处理
4.龙芯2k1000中断处理概述
1.前言
中断与异常在任何体系架构的芯片上都不会完全一样 。在arm的m系列芯片上需要理解NVIC , 这个相对较为容易 , 而对于高端一些的芯片 , 中断的处理就会复杂许多 。比如arm上的gic(GenericInterruptController) 。要使用好GIC则需要专门去读这个外设的手册 , 然后写中断控制 。对于MIPS中断控制的处理流程 , 就是本文描述的重点 。
2.龙芯2k1000的中断描述
龙芯2k1000最多支持64个中断的触发源 , 按照统一方式进行管理 。
龙芯2k1000的中断处理逻辑
文章插图
这64个中断控制器通过可以配置的中断路由可以分配到CPU0与CPU1中 。
在这64个中断中又需要按照需要路由到4个队列上 。
2.1mips设计上的通用中断处理
在MIPS的中断设计上 , MIPSCPU会设计8个独立中断位 。
龙芯2k1000的中断处理逻辑
文章插图
其中 , 6个外部中断(IP2~IP7) , 2个软中断(IP0~IP1) 。片上的计数器/定时器会连接到一个硬件中断位上去 。
2.2龙芯中断的设计
对于对于每个核上的IP0~IP3 , 其对应的是CP0_Status的IP2到IP5 。IP7用于定时器中断 。
龙芯2k1000的中断处理逻辑
文章插图
在中断设计这一块 , 这64个中断又可以分为低32位与高32位 , 对于低32位可以将每个中断路由到CPU0 , Mailbox0 , 也就是对应IP2 。对于高32位 , 可以将每个中断路由到CPU0 , Mailbox0 , 也就是对应IP3 。
【龙芯2k1000的中断处理逻辑】
龙芯2k1000的中断处理逻辑
文章插图
根据上述的寄存器配置每个中断的路由即可 。
3.龙芯2k1000中断的产生与处理
在rt-thread上 , 将异常处理向量表通过链接脚本放到代码段的头部 。
龙芯2k1000的中断处理逻辑
文章插图
然后通过写中断向量表地址到向量基地址寄存器中 。
龙芯2k1000的中断处理逻辑
文章插图
如果有中断发生 , 则可以跳转到中断向量表去执行相关的中断处理程序 。
MIPS上的中断处理可以读取c0cause寄存器 , 得到mips发生中断或者异常的原因 。
因为此时MIPS还只有7个中断信息 , 需要再次读取龙芯中断控制器的中断 , 才能准确的得到中断产生的原因 。
龙芯2k1000的中断处理逻辑
文章插图
最后可以通过rt-thread的中断处理的回调函数处理具体的中断信息 。
龙芯2k1000的中断处理逻辑
文章插图
4.龙芯2k1000中断处理概述
龙芯2k1000利用mips上的8个中断位 , 自己添加了一个中断控制器 , 该中断控制器可以配置中断的路由方式 , 比如让其路由到CPU0或者CPU1上 , 并且可以指定每个中断路由到具体的mailbox上 。
根据mailbox的设计 , 当中断发生时首先通过mips上的c0casue大致确定其中断的原因 , 接着通过龙芯2k1000的中断控制器 , 读取状态从而分析得到具体的外设中断 。
上述则是龙芯2k1000中断处理逻辑 。
责任编辑:xj
原文标题:龙芯2k1000的中断设计
文章出处:【微信公众号:嵌入式IoT】欢迎添加关注!文章转载请注明出处 。
.dfma {position: relative;width: 1000px;margin: 0 auto;}.dfma a::after {position: absolute;left: 0;bottom: 0;width: 30px;line-height: 1.4;text-align: center;background-color: rgba(0, 0, 0, .5);color: #fff;font-size: 12px;content: "广告";}.dfma img {display: block;}
龙芯2k1000的中断处理逻辑
文章插图

    推荐阅读