龙芯2k1000的中断处理逻辑

描述

龙芯2k1000的中断设计

1.前言

2.龙芯2k1000的中断描述

2.1 mips设计上的通用中断处理

2.2 龙芯中断的设计

3.龙芯2k1000中断的产生与处理

4.龙芯2k1000中断处理概述

1.前言

中断与异常在任何体系架构的芯片上都不会完全一样。在arm的m系列芯片上需要理解NVIC,这个相对较为容易,而对于高端一些的芯片,中断的处理就会复杂许多。比如arm上的gic(Generic Interrupt Controller)。要使用好GIC则需要专门去读这个外设的手册,然后写中断控制。对于MIPS中断控制的处理流程,就是本文描述的重点。

2.龙芯2k1000的中断描述

龙芯2k1000最多支持64个中断的触发源,按照统一方式进行管理。

2K1000

这64个中断控制器通过可以配置的中断路由可以分配到CPU0与CPU1中。

在这64个中断中又需要按照需要路由到4个队列上。

2.1 mips设计上的通用中断处理

在MIPS的中断设计上,MIPS CPU会设计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

根据上述的寄存器配置每个中断的路由即可。

3.龙芯2k1000中断的产生与处理

在rt-thread上,将异常处理向量表通过链接脚本放到代码段的头部。

2K1000

然后通过写中断向量表地址到向量基地址寄存器中。

2K1000

如果有中断发生,则可以跳转到中断向量表去执行相关的中断处理程序。

MIPS上的中断处理可以读取c0 cause寄存器,得到mips发生中断或者异常的原因。

因为此时MIPS还只有7个中断信息,需要再次读取龙芯中断控制器的中断,才能准确的得到中断产生的原因。

2K1000

最后可以通过rt-thread的中断处理的回调函数处理具体的中断信息。

4.龙芯2k1000中断处理概述

龙芯2k1000利用mips上的8个中断位,自己添加了一个中断控制器,该中断控制器可以配置中断的路由方式,比如让其路由到CPU0或者CPU1上,并且可以指定每个中断路由到具体的mailbox上。

根据mailbox的设计,当中断发生时首先通过mips上的c0 casue大致确定其中断的原因,接着通过龙芯2k1000的中断控制器,读取状态从而分析得到具体的外设中断。

上述则是龙芯2k1000中断处理逻辑。

责任编辑:xj

       原文标题:龙芯2k1000的中断设计

文章出处:【微信公众号:嵌入式IoT】欢迎添加关注!文章转载请注明出处。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分