龍芯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個中斷的觸發源,按照統一方式進行管理。
這64個中斷控制器通過可以配置的中斷路由可以分配到CPU0與CPU1中。
在這64個中斷中又需要按照需要路由到4個隊列上。
2.1 mips設計上的通用中斷處理
在MIPS的中斷設計上,MIPS CPU會設計8個獨立中斷位。
其中,6個外部中斷(IP2 ~ IP7),2個軟中斷(IP0~IP1)。片上的計數器/定時器會連接到一個硬件中斷位上去。
2.2 龍芯中斷的設計
對于對于每個核上的IP0~IP3,其對應的是 CP0_Status 的 IP2 到 IP5。IP7用于定時器中斷。
在中斷設計這一塊,這64個中斷又可以分為低32位與高32位,對于低32位可以將每個中斷路由到CPU0,Mailbox0,也就是對應IP2。對于高32位,可以將每個中斷路由到CPU0,Mailbox0,也就是對應IP3。
根據上述的寄存器配置每個中斷的路由即可。
3.龍芯2k1000中斷的產生與處理
在rt-thread上,將異常處理向量表通過鏈接腳本放到代碼段的頭部。
然后通過寫中斷向量表地址到向量基地址寄存器中。
如果有中斷發生,則可以跳轉到中斷向量表去執行相關的中斷處理程序。
MIPS上的中斷處理可以讀取c0 cause寄存器,得到mips發生中斷或者異常的原因。
因為此時MIPS還只有7個中斷信息,需要再次讀取龍芯中斷控制器的中斷,才能準確的得到中斷產生的原因。
最后可以通過rt-thread的中斷處理的回調函數處理具體的中斷信息。
4.龍芯2k1000中斷處理概述
龍芯2k1000利用mips上的8個中斷位,自己添加了一個中斷控制器,該中斷控制器可以配置中斷的路由方式,比如讓其路由到CPU0或者CPU1上,并且可以指定每個中斷路由到具體的mailbox上。
根據mailbox的設計,當中斷發生時首先通過mips上的c0 casue大致確定其中斷的原因,接著通過龍芯2k1000的中斷控制器,讀取狀態從而分析得到具體的外設中斷。
上述則是龍芯2k1000中斷處理邏輯。
責任編輯:xj
原文標題:龍芯2k1000的中斷設計
文章出處:【微信公眾號:嵌入式IoT】歡迎添加關注!文章轉載請注明出處。
-
芯片
+關注
關注
450文章
49636瀏覽量
417197 -
龍芯
+關注
關注
3文章
324瀏覽量
31073 -
中斷
+關注
關注
5文章
889瀏覽量
41220 -
2K1000
+關注
關注
0文章
20瀏覽量
543
原文標題:龍芯2k1000的中斷設計
文章出處:【微信號:Embeded_IoT,微信公眾號:嵌入式IoT】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論