GIC硬件原理
- ARM公司提供了一個(gè)通用的中斷控制器
GIC(Generic Interrupt Controller)
,GIC
的版本包括V1 ~ V4
,由于本人使用的SoC中的中斷控制器是V2
版本,本文將圍繞GIC-V2
來(lái)展開介紹;
來(lái)一張功能版的框圖:
GIC-V2
從功能上說(shuō),除了常用的中斷使能、中斷屏蔽、優(yōu)先級(jí)管理等功能外,還支持安全擴(kuò)展、虛擬化等;GIC-V2
從組成上說(shuō),主要分為Distributor
和CPU Interface
兩個(gè)模塊,Distributor
主要負(fù)責(zé)中斷源的管理,包括優(yōu)先級(jí)的處理,屏蔽、搶占等,并將最高優(yōu)先級(jí)的中斷分發(fā)給CPU Interface
,CPU Interface
主要用于連接處理器,與處理器進(jìn)行交互;Virtual Distributor
和Virtual CPU Interface
都與虛擬化相關(guān),本文不深入分析;
再來(lái)一張細(xì)節(jié)圖看看Distributor
和CPU Interface
的功能:
GIC-V2
支持三種類型的中斷:SGI(software-generated interrupts)
:軟件產(chǎn)生的中斷,主要用于核間交互,內(nèi)核中的IPI:inter-processor interrupts
就是基于SGI
,中斷號(hào)ID0 - ID15
用于SGI
;PPI(Private Peripheral Interrupt)
:私有外設(shè)中斷,每個(gè)CPU都有自己的私有中斷,典型的應(yīng)用有local timer
,中斷號(hào)ID16 - ID31
用于PPI
;SPI(Shared Peripheral Interrupt)
:共享外設(shè)中斷,中斷產(chǎn)生后,可以分發(fā)到某一個(gè)CPU上,中斷號(hào)ID32 - ID1019
用于SPI
,ID1020 - ID1023
保留用于特殊用途;
Distributor
功能:- 全局開關(guān)控制
Distributor
分發(fā)到CPU Interface
; - 打開或關(guān)閉每個(gè)中斷;
- 設(shè)置每個(gè)中斷的優(yōu)先級(jí);
- 設(shè)置每個(gè)中斷將路由的CPU列表;
- 設(shè)置每個(gè)外設(shè)中斷的觸發(fā)方式:電平觸發(fā)、邊緣觸發(fā);
- 設(shè)置每個(gè)中斷的Group:Group0或Group1,其中Group0用于安全中斷,支持FIQ和IRQ,Group1用于非安全中斷,只支持IRQ;
- 將
SGI
中斷分發(fā)到目標(biāo)CPU上; - 每個(gè)中斷的狀態(tài)可見;
- 提供軟件機(jī)制來(lái)設(shè)置和清除外設(shè)中斷的pending狀態(tài);
- 全局開關(guān)控制
CPU Interface
功能:- 使能中斷請(qǐng)求信號(hào)到CPU上;
- 中斷的確認(rèn);
- 標(biāo)識(shí)中斷處理的完成;
- 為處理器設(shè)置中斷優(yōu)先級(jí)掩碼;
- 設(shè)置處理器的中斷搶占策略;
- 確定處理器的最高優(yōu)先級(jí)pending中斷;
中斷處理的狀態(tài)機(jī)如下圖:
Inactive
:無(wú)中斷狀態(tài);Pending
:硬件或軟件觸發(fā)了中斷,但尚未傳遞到目標(biāo)CPU,在電平觸發(fā)模式下,產(chǎn)生中斷的同時(shí)保持pending
狀態(tài);Active
:發(fā)生了中斷并將其傳遞給目標(biāo)CPU,并且目標(biāo)CPU可以處理該中斷;Active and pending
:發(fā)生了中斷并將其傳遞給目標(biāo)CPU,同時(shí)發(fā)生了相同的中斷并且該中斷正在等待處理;
GIC檢測(cè)中斷流程如下:
- GIC捕獲中斷信號(hào),中斷信號(hào)assert,標(biāo)記為pending狀態(tài);
Distributor
確定好目標(biāo)CPU后,將中斷信號(hào)發(fā)送到目標(biāo)CPU上,同時(shí),對(duì)于每個(gè)CPU,Distributor
會(huì)從pending信號(hào)中選擇最高優(yōu)先級(jí)中斷發(fā)送至CPU Interface
;CPU Interface
來(lái)決定是否將中斷信號(hào)發(fā)送至目標(biāo)CPU;- CPU完成中斷處理后,發(fā)送一個(gè)完成信號(hào)
EOI(End of Interrupt)
給GIC;
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
嵌入式
+關(guān)注
關(guān)注
5086文章
19141瀏覽量
305971 -
Linux
+關(guān)注
關(guān)注
87文章
11314瀏覽量
209783 -
子系統(tǒng)
+關(guān)注
關(guān)注
0文章
109瀏覽量
12413 -
gic
+關(guān)注
關(guān)注
0文章
14瀏覽量
6277 -
控制器
+關(guān)注
關(guān)注
0文章
24瀏覽量
3274
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
英特爾Altera系列cyclone V HPS GIC
大家好,又到了每日學(xué)習(xí)的時(shí)間了,今天我們來(lái)聊一聊英特爾 Altera系列 cyclone V HPS GIC. 一、CYCLONE V GIC配置 Cyclone v使用雙核ARM CORTEX
ARM之中斷GIC分析
1.“站的高尿的遠(yuǎn)” GIC為中斷控制器,不要和ARM core的中斷搞混了,這些中斷都是連接到ARM core的IRQ或者FIQ上的。 要了解arm中斷系統(tǒng),GIC絕對(duì)不容錯(cuò)過(guò),好先付
發(fā)表于 11-26 13:50
ARM GIC(一)之ARM soc中斷的處理介紹
的橋接器件,就是arm公司推出大名鼎鼎的gic,general interrupt controller。gic其實(shí)是一個(gè)架構(gòu),版本歷經(jīng)了gicv1(已棄用),gicv2,gicv3,gicv4。對(duì)于
發(fā)表于 04-06 10:12
ARM GIC(二)之中斷術(shù)語(yǔ)的定義
ARM在GIC中,對(duì)于中斷,定義了如下的一些術(shù)語(yǔ)。一、中斷狀態(tài)對(duì)于每一個(gè)中斷而言,有以下4個(gè)狀態(tài):?inactive:中斷處于無(wú)效狀態(tài)?pending:中斷處于有效狀態(tài),但是cpu沒有響應(yīng)該中斷
發(fā)表于 04-06 10:15
GIC ITS的ITS tables和Command Queue訪問(wèn)簡(jiǎn)析
ACE-Lite轉(zhuǎn)換為了AXI interface,因而這個(gè)系統(tǒng)設(shè)計(jì)不能實(shí)現(xiàn)GIC ITS和CPU的硬件一致性。在這樣的系統(tǒng)上運(yùn)行Linux GICv3 driver可能會(huì)出現(xiàn)一致性問(wèn)題:因?yàn)?/div>
發(fā)表于 12-20 14:35
基于GIC的物聯(lián)網(wǎng)的應(yīng)用方案
本文檔內(nèi)容介紹了基于GIC的物聯(lián)網(wǎng)的應(yīng)用方案,供參閱。
發(fā)表于 09-18 15:46
?0次下載
小電阻器對(duì)治理電網(wǎng)GIC的效果分析
地磁感應(yīng)電流(geomagnetically induced currents,GIC)引起變壓器半波飽和對(duì)電力系統(tǒng)的安全運(yùn)行產(chǎn)生不利影響,甚至引發(fā)大面積停電事故。為了有效治理GIC對(duì)大規(guī)模電力系統(tǒng)
發(fā)表于 01-04 17:03
?7次下載
應(yīng)用K值算法的甘肅電網(wǎng)GIC-Q擾動(dòng)計(jì)算
的安全運(yùn)行。以甘肅750 kV電網(wǎng)和330 kV電網(wǎng)GIC的計(jì)算數(shù)據(jù)為基礎(chǔ),基于變壓器GIC無(wú)功(GIC-Q)損耗系數(shù)K值算法,計(jì)算了750 kV和330 kV變壓器的GIC無(wú)功損耗增
發(fā)表于 01-31 14:57
?3次下載
扒一扒GIC-600的相關(guān)知識(shí)
為了適應(yīng)大規(guī)模的SoC設(shè)計(jì),GIC-600被設(shè)計(jì)成分布式IP。所謂分布式,GIC-600由幾種組件構(gòu)成,每個(gè)組件可以跟其它相關(guān)模塊在物理設(shè)計(jì)上擺放在一起,并與其擁有共同的電源域
發(fā)表于 02-06 11:36
?2756次閱讀
GIC驅(qū)動(dòng)的執(zhí)行流程是什么
驅(qū)動(dòng)流程分析 GIC驅(qū)動(dòng)的執(zhí)行流程如下圖所示: 首先需要了解一下鏈接腳本 vmlinux.lds ,腳本中定義了一個(gè) __irqchip_of_table 段,該段用于存放中斷控制器信息,用于最終來(lái)
Linux GIC驅(qū)動(dòng)數(shù)據(jù)結(jié)構(gòu)分析
數(shù)據(jù)結(jié)構(gòu)分析 先來(lái)張圖: GIC驅(qū)動(dòng)中,使用 struct gic_chip_data 結(jié)構(gòu)體來(lái)描述GIC控制器的信息,整個(gè)驅(qū)動(dòng)都是圍繞著該結(jié)構(gòu)體的初始化,驅(qū)動(dòng)中將函數(shù)指針都初始化好,實(shí)際的工作
GIC-600的組件是如何連接的
為了適應(yīng)大規(guī)模的SoC設(shè)計(jì),GIC-600被設(shè)計(jì)成分布式IP。 所謂分布式,GIC-600由幾種組件構(gòu)成,每個(gè)組件可以跟其它相關(guān)模塊在物理設(shè)計(jì)上擺放在一起,并與其擁有共同的電源域;組件之間通過(guò)片上網(wǎng)
GIC-600的內(nèi)部結(jié)構(gòu)組件
接下來(lái)看看每個(gè)組件。 ? 首先是distributor,一個(gè)SoC只有一個(gè)。 ?它的組件只能與distributor通信。所以,可以看出,distributor是GIC-600中的核心,其作用是收集
gic和ARM Core的連接
? ?nVIRQ: 虛擬普通中斷 ? ?nVFIQ: 虛擬快速中斷 (2)gicv3和ARM Core的連接 gicv3 AXI-stream協(xié)議 ? ?gic stream協(xié)議,是基于AXI-stream協(xié)議
評(píng)論