GIC是ARM架構(gòu)中及其重要的部分,本文只在公開ARM對(duì)應(yīng)資料基礎(chǔ)上,以MTK開發(fā)板為基礎(chǔ)整理。個(gè)人理解之后記錄,鞏固和加深認(rèn)識(shí),僅此而已,如果有錯(cuò)誤,歡迎指出。
1. GIC的概述
看過SOC架構(gòu)的同學(xué)知道,CPU接受外部的中斷處理請(qǐng)求,并進(jìn)行處理,其實(shí)是一個(gè)被動(dòng)接受的過程,這樣好處是既能
保證主任務(wù)的執(zhí)行效率,又能及時(shí)獲知外部的請(qǐng)求,從而處理重要的設(shè)備請(qǐng)求操作。
如圖:
GIC的全稱為general interrupt controller,主要作用可以歸結(jié)為:
接受硬件中斷信號(hào),并進(jìn)行簡(jiǎn)單處理,通過一定的設(shè)置策略,分給對(duì)應(yīng)的CPU進(jìn)行處理。
這樣的圖比較簡(jiǎn)單,可以看下在ARM完整的SOC結(jié)構(gòu)中,其位置是什么樣的:
這是ARM比較新的架構(gòu)圖,其中CORELINK CCI-500是片上互聯(lián)總線,也就是AMBA,在這總線上面掛了不同的設(shè)備。比如NIC-400設(shè)備,這可以理解為network interface設(shè)備,在這個(gè)設(shè)備上使用者可以再連接其它需要的器件。那么cpu,也就是cortex-72(大核)和cortex-53(小核)也是掛在總線上。上接GIC-500,也就是我們說的中斷控制器,這個(gè)圖其實(shí)是邏輯上的,實(shí)際中,GIC-500也是有線連接到CCI-500上,通過CCI-500和cpu連接交互,ARM的Distributor應(yīng)該是為表示cpu和GIC之間的關(guān)系,才將其邏輯圖表示成大家看到的。詳細(xì)的可以參考ARM的官方網(wǎng)站介紹。
2.硬件中斷的分類和GIC的組成
2.1 GIC_V2的介紹
我們知道了GIC的大致用途,那么它包含了那些部分,如果工作的,有什么特殊的地方呢。
OK,我們一個(gè)一個(gè)來。先來看下GIC的大致組成結(jié)構(gòu):
這是經(jīng)典的GIC V2圖,實(shí)際上大家能看到的經(jīng)典的圖也是這個(gè)。
2.1.1中斷源的分類
這里面把硬件中斷源分為了3類:
SPI:這是shared peripheral interrupt , 這是常見的外部設(shè)備中斷,也定義為共享中斷,比如按鍵觸發(fā)一個(gè)中斷,手機(jī)觸摸屏觸發(fā)的中斷,共享的意思是說
可以多個(gè)Cpu或者說Core處理,不限定特定的Cpu。一般定義的硬件中斷號(hào)范圍31~1019.
PPI:這里指的是private peripheral interrupt,16~31,私有中斷,為什么這樣說呢,這些中斷一般是發(fā)送給特定的Cpu的,比如每個(gè)Cpu有自己對(duì)應(yīng)的Physicaltimer,產(chǎn)生的中斷信號(hào)就發(fā)送給這個(gè)特定的cpu進(jìn)行處理。比如ARM_V8平臺(tái)上的:
在設(shè)備上,cat /proc/interrupts可以看到:
SGI:這個(gè)中斷有些同學(xué)遇到的比較少,software generatedinterrupt,軟件出發(fā)產(chǎn)生的中斷,中斷號(hào)范圍0~15,也就是最前的16個(gè)中斷。如果在X86平臺(tái)上做過開發(fā)工作的同學(xué)可能有影響,其實(shí)這就是相當(dāng)于IPI,簡(jiǎn)單的說Cpu_1要給Cpu_2發(fā)送特定信息,比如時(shí)間同步,全局進(jìn)程調(diào)度信息,就通過軟件中斷方式,目標(biāo)Cpu接受到這樣的中斷信息,可以獲取到信息是哪個(gè)Cpu發(fā)送過來的,具體的中斷ID是哪個(gè)數(shù)字,從而找到對(duì)應(yīng)處理方式進(jìn)行處理。比如MTK上的:
2.1.2 GIC的組成
這是硬件中斷的分類。
那么GIC控制器完成這樣的中斷信號(hào)收集和分發(fā)工作,也劃分了幾個(gè)功能部分,見上面第2個(gè)圖。包含2個(gè)部分:
Distributor和CPU interface.
Distributor:
The Distributor block performs interruptprioritization anddistribution to the CPU interface
blocks that connect to the processors in the system. The Distributor blockregisters are identified by the GICD_ prefix
The Distributor provides a programminginterface for:
? Globally enabling the forwarding of interrupts to the CPU interfaces.
? Enabling or disabling eachinterrupt.
? Setting the priority level of each interrupt.
? Setting the target processor list of each interrupt.
? Setting each peripheral interrupt to be level-sensitive oredge-triggered.
? Setting each interrupt as either Group 0 or Group 1.
CPU Interface:
Each CPU interface block provides theinterface for a processorthat is connected to the GIC. Each CPUinterfaceprovides
a programming interface for:
? enabling the signaling of interrupt requests to the processor
? acknowledging an interrupt
? indicating completion of the processing of an interrupt
? setting an interrupt priority mask for the processor
? defining the preemption policy for the processor
? determiningthe highest priority pending interrupt for the processor .
這是其英文解釋,其實(shí)總的來說:
Distributor,做為一個(gè)中斷路由的設(shè)備,主要完成工作:
對(duì)整個(gè)中斷控制器設(shè)備的使能等操作。
對(duì)每一個(gè)中斷的優(yōu)先級(jí)控制。
對(duì)每一個(gè)中斷的觸發(fā)方式設(shè)置。
對(duì)沒一個(gè)中斷的目標(biāo)發(fā)送CPU進(jìn)行設(shè)置,決定分發(fā)到哪個(gè)具體的CPU上進(jìn)行處理。
對(duì)中斷的去向,是到G0還是G1,這個(gè)是安全域的概念。我們后面補(bǔ)充GIC V3和V4的概念再展開說。
記錄每個(gè)中斷的狀態(tài),是否到來,是否處理中,是否處理完,是否在等待發(fā)送狀態(tài)等等。
那么,CPUInterface主要工作是:
使能和發(fā)送一個(gè)具體的中斷信號(hào)到特定對(duì)應(yīng)的CPU上,
確認(rèn)具體中斷已經(jīng)被CPU接受,處理,以及處理完成。
設(shè)置cpu能接受的中斷的優(yōu)先級(jí)別。以及對(duì)應(yīng)的基于級(jí)別的中斷搶斷等處理。
所以,從第二個(gè)圖來說。中斷信號(hào)先到Distributor,然后根據(jù)設(shè)定目標(biāo)CPU,送到CPU對(duì)應(yīng)的Interface上,在這里仲裁是否優(yōu)先級(jí)足夠高,
是否可以搶斷或者打斷當(dāng)前的終端處理等,如果可以,那么CPU Interface就發(fā)送一個(gè)物理的SIGNAL到CPU的IRQ接線上,CPU感知到中斷信號(hào),
從而轉(zhuǎn)到中斷模式進(jìn)行處理。
那么途中帶*號(hào)的IRQ和FIQ是什么意思呢?
FIQ是Fastinterrupt request,這是ARM上定義的一種中斷處理方式,某些終端需要快速處理完成,在這種情況下,CPU會(huì)簡(jiǎn)化操作,然后退出中斷。
那么從留向來說,途中是直接到CPU側(cè)的,沒有經(jīng)過Distributor?
是的,我們說過,Distributor可以被使能,等各種操作,那么當(dāng)其主功能暫時(shí)關(guān)閉了怎么辦呢,這就又了BYPASS功能,一個(gè)已將IRQ直接繞過它,
送到CPU側(cè),在某些情況下這可以作為一個(gè)喚醒的信號(hào)源去WAKE UP 對(duì)應(yīng)的CPU,或者可以設(shè)置成為X86上的NMI,也就是不可屏蔽中斷來處理。
2.2 GIC_V3的介紹
在現(xiàn)在市面上看到的手機(jī)或者其它設(shè)備產(chǎn)品中,既有老的V2版本的中斷控制器,也有比較新的V3結(jié)構(gòu)的,而且是在不斷向后演進(jìn),我們有必要依照新的V3的來說明,畢竟,這是后面的趨勢(shì),比如現(xiàn)在大家現(xiàn)在可以看到GIC_V4的介紹了。
好,我們切入正題,在之前介紹GIC_V2的基礎(chǔ)上我們擴(kuò)展下。
在上圖中,我們?cè)贕IC_V3的基礎(chǔ)上整理出這樣的結(jié)構(gòu)圖,其實(shí)主題結(jié)構(gòu)和V2是大致一樣的,但是我們會(huì)發(fā)現(xiàn),多了Redistributor這樣的組件,這是為啥呢?另外,我也也看到cpuinterface移到GIC外面了,為啥這樣表示邏輯圖呢?多出來的LPI這個(gè)中斷是做什么用的?
2.2.2 GIC中斷
其實(shí),LPI解釋為L(zhǎng)PI (Locality-specific Peripheral Interrupt)。
所有的中斷類型可以分為:
SGI:software generated Interrupt
軟件觸發(fā)的中斷,這個(gè)和之前解釋的一致。
PPI:Private Peripheral Interrupt
私有中斷類型,這個(gè)和之前解釋的也是一致。但是PPI直接到Redistributor,繞過, 這是因?yàn)樵黾拥腞edistributor一個(gè)是為L(zhǎng)PI需要,特殊的中斷類型,既然PPI是各自CPU都有的,就沒必要再經(jīng)過之前的Distributor
來分發(fā)了,這樣也導(dǎo)致了其中的寄存器等也做了修改。我們后面介紹寄存器時(shí)候再說明。
SPI:SharedPeripheral InterruptDistributor
共享外圍硬件中斷,這個(gè)也是和GIC_V2解釋一樣的ID32-ID1019。
但是,多了LPI(Locality-specific Peripheral Interrupt)
LPIs are new in GICv3, and they are different to the other types of interruptin a number of ways . In particular, LPIs are always message-based interrupts,and their configuration is held in tables in memory rather than registers.
這是一個(gè)基于消息的中斷類型,是ARM為后續(xù)的SERVER等產(chǎn)品做的擴(kuò)展。
在傳統(tǒng)的GIC流程中如上圖,外圍設(shè)備的中斷觸發(fā)線是引出到GIC上的,這樣可以理解為一個(gè)物理的SIGNAL,比如一個(gè)高電平信號(hào),邊沿觸發(fā)信號(hào)。
但是實(shí)際上在現(xiàn)在GIC_V3中,中斷可以依照MESSAGEBASED方式來觸發(fā),外圍設(shè)備的終端信號(hào)先到INTERCONNECT(AMBA總線),然后片上總線再給GIC發(fā)送一個(gè)消息,這個(gè)作為一個(gè)IRQ來源,這就是基于消息的中斷的簡(jiǎn)單解釋,當(dāng)然這個(gè)需要總線,SOC等做調(diào)整適配,在這里我們不展開來說,有興趣的同學(xué)可以看看CCI-500等總線如何定義信號(hào)燈細(xì)節(jié)的。
我們這樣來表示下整個(gè)圖:
從ITS是Interrupt Translate service,如果我們只看圖右側(cè)的部分,X86上經(jīng)典的PCI總線,經(jīng)過一系列轉(zhuǎn)換發(fā)送一個(gè)中斷到X86的CPU上,從而處理。那么現(xiàn)在我要直接把這部分搬到arm,由于體系架構(gòu)不同,中斷控制器邏輯和流程都不一樣, X86對(duì)應(yīng)APIC-IO 和Local APIC這樣的終端控制邏輯。
但是我們可以這樣來處理:
我們?cè)黾右粋€(gè)ITS,在這里定義好特定的消息,包含消息從哪里來的,比如PCI-ROOT,具體的設(shè)備編號(hào),比如PCIe-endpoint對(duì)應(yīng)的設(shè)備,可能是個(gè)音頻設(shè)備,或者簡(jiǎn)單的按鍵,這都不是重點(diǎn)。關(guān)鍵是ITS可以根據(jù)定義好的配置,來把對(duì)PCI發(fā)來的中斷消息進(jìn)行轉(zhuǎn)換,比如轉(zhuǎn)換成IRQ_ID:8200終端
這樣就可以發(fā)送到Redistributor上進(jìn)行分發(fā)處理,和一般的IRQ類似,但是不經(jīng)過Distributor,其中斷也沒有Pending狀態(tài),如果處理不過來丟失了那就丟失了,不會(huì)特別的關(guān)注。
從現(xiàn)在我們看到的資料來說,還沒有看到LPI的具體應(yīng)用,但是ARM已經(jīng)在在很多方面為SERVER的架構(gòu)做了調(diào)整,這也是其中一個(gè),所以在這里會(huì)提示下,但不是我們介紹的重點(diǎn)。
2.2.2 GIC的組成
我們?cè)谏厦鎴D中,給出GIC_V3已經(jīng)之后對(duì)應(yīng)的邏輯圖,從中可以看到幾個(gè)部分:
Distributor
The Distributor registers arememory-mapped, and contain global settings that affect all PEs
connected to the interrupt controller. The Distributor provides a programminginterface for:
· Interrupt prioritization and distribution of SPIs.
· Enabling and disabling SPIs.
· Setting the priority level of each SPI.
· Routing information for each SPI.
· Setting each SPI to be level-sensitive or edge-triggered.
· Generating message-based SPIs.
· Controlling the active and pending state of SPIs.
· Controls to determine the programmers’ model that is used in each Securitystate (affinity routing or legacy).
CPU Interface
Each Redistributor is connected to aCPU interface. The CPU interface provides a programming interface for:
· General control and configuration to enable interrupt handling.
· Acknowledging an interrupt.
· Performing a priority drop and deactivation of interrupts.
· Setting an interrupt priority mask for the PE.
· Defining the preemption policy for the PE.
· Determining the highest priority pending interrupt for the PE
Redistribute (V3,V4)
For each connected PE there is aRedistributor. The Redistributors provides a programming interface for:
· Enabling and disabling SGIs and PPIs.
· Setting the priority level of SGIs and PPIs.
· Setting each PPI to be level-sensitive or edge-triggered.
· Assigning each SGI and PPI to an interrupt group.
· Controlling the state of SGIs and PPIs.
· Base address control for the data structures in memory that support theassociated interrupt properties and pending state for LPIs.
· Power management support for the connected PE.
其實(shí)之前對(duì)應(yīng)的Distributor 和CPU Interface也還是一致的,但是Distributor不再處理PPI這樣的中斷,PPI直接送到Redistribute來處理,另外Redistribute也會(huì)處理LPI類型中斷,其它邏輯上和我們之前介紹的是相似的,在這里不再重復(fù)。
2.3 IRQ生命周期
從GIC角度來說,一個(gè)中斷可以分為幾個(gè)階段,對(duì)應(yīng)不同的狀態(tài):
當(dāng)GIC上配置的中斷,配置好之后,沒有其對(duì)應(yīng)的中斷到來,或者之前處理的中斷已經(jīng)完全結(jié)束了,這個(gè)可以表示為
Deactive狀態(tài)或者Inactive,如果中斷信號(hào)到來,GIC獲取到了,這個(gè)時(shí)候要經(jīng)過一系列的的判斷,然后送給對(duì)應(yīng)的CPU來處理,在CPU確認(rèn)該中斷并處理之前,狀態(tài)是Pending,如果CPU獲取到了該終端確認(rèn)要處理了,那么久變?yōu)锳ctive狀態(tài)。這個(gè)時(shí)候,對(duì)應(yīng)的GIC上終端信號(hào)線可能依舊有效,比如高電平觸發(fā)的終端信號(hào)還沒有被拉低,或者說又來一個(gè)同樣的終端,那就是Activeand Pending。
2.4 IRQ Group
在ARM中,新的架構(gòu)上引入了EX的概念,如果Ex0/1/2/3,以及安全域和非安全域,這個(gè)我會(huì)在補(bǔ)充個(gè)Topic:TRUSTZONE來說明,或者大家也查看資料來理解ARM的工作模式,比如FIQ/IRQ等傳統(tǒng)模式。只是現(xiàn)在ARM淡化了這樣模式,使用Ex,exception level 0/1/2/3,比如我們看到的ANDROID APP就是在Ex0,也就是USER空間,Ex1是我們常見的KERNEL空間。Ex2是對(duì)應(yīng)的Hypervisor,虛擬化對(duì)應(yīng)的空間,那么Ex3就是最好的權(quán)限和異常級(jí)別,這里可以由各個(gè)芯片廠家自己定義來添加對(duì)應(yīng)的如ATF底層功能。
另外還在CPU上劃分了SECURE 和NON-SECURE空間,這需要ARM對(duì)應(yīng)的控制寄存器等來進(jìn)行權(quán)限控制。
所以,IRQ的發(fā)到一個(gè)CPU上,還需要知道送到哪個(gè)Ex去處理,是送到KERNEL(Ex1)?還是安全域里面,這也在GIC里面進(jìn)行配置,然后一個(gè)IRQ到來了才會(huì)往對(duì)應(yīng)的寄存器里面發(fā)送。
OK,這概念比較抽象,我們?cè)诤竺嬖敿?xì)介紹GIC主要的寄存器和功能時(shí)候,會(huì)介紹,如果能理解對(duì)應(yīng)的寄存器和作用,那么GIC的組成和功能也就明白了。
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 基于51系列單片機(jī)的智能照明控制系統(tǒng)設(shè)計(jì)方案
- 基于STM32的四旋翼飛行器控制系統(tǒng)
- 單片機(jī)應(yīng)用編程技巧解析
- 基于89C52的教室智能節(jié)能照明系統(tǒng)設(shè)計(jì)
- 一種新型的雨量光照傳感器的設(shè)計(jì)
- 智能護(hù)眼臺(tái)燈設(shè)計(jì)
- 蓄電池高能脈沖充電系統(tǒng)設(shè)計(jì)
- 基于51單片機(jī)定時(shí)器的電子時(shí)鐘設(shè)計(jì)方案
- 瑞薩電子推出面向單電機(jī)應(yīng)用優(yōu)化的卓越MCU, 涵蓋電動(dòng)工具、家用電器等廣泛應(yīng)用場(chǎng)景
- AM3G-2412DZ ±12V 3 瓦 DC-DC 轉(zhuǎn)換器的典型應(yīng)用
- 使用 LT3045IDD 并聯(lián)多個(gè)使用 ILIM(電流監(jiān)視器)以消除鎮(zhèn)流電阻壓降的典型應(yīng)用
- LTC1921 在一個(gè) 4 二極管設(shè)計(jì)電路中監(jiān)控卡邊緣的每個(gè)電源
- LT1021BCN8-5 具有升壓輸出電流和電流限制的電壓基準(zhǔn)的典型應(yīng)用
- DC2263A-A,用于 LTC3887EUJ (RSENSE) 雙路 PMBU 降壓轉(zhuǎn)換器的演示板,7V = VIN = 18V,Vout0/Vout1 = 0.8V 至 1.8V @ 25A
- LT3990IMSE-5 2.5V 降壓轉(zhuǎn)換器的典型應(yīng)用
- 使用 ROHM Semiconductor 的 BD4958 的參考設(shè)計(jì)
- TL431 可編程精密基準(zhǔn)電壓源的典型應(yīng)用,用于串聯(lián)通路穩(wěn)壓器的高電流分流穩(wěn)壓器
- 基于VIPer06的12V-4W,115kHz隔離反激
- LTC7813EUH 寬輸入范圍至 10V/10A 低 IQ 級(jí)聯(lián)升壓+降壓穩(wěn)壓器的典型應(yīng)用電路
- 匯頂科技營(yíng)收結(jié)構(gòu)發(fā)生較大變化,IoT與音頻業(yè)務(wù)效能顯現(xiàn)
- 高通CEO透露他們已同23家全球性汽車品牌有合作
- 2021高通XR生態(tài)合作伙伴大會(huì):凝聚產(chǎn)業(yè)力量,開啟XR新視界
- AVR單片機(jī)-nRF24L01發(fā)送接收程序
- 視頻通話中嘯叫產(chǎn)生的原因及解決方案
- 使用數(shù)字示波器需要注意的問題
- 英飛凌AIROC? CYW20829低功耗藍(lán)牙系統(tǒng)級(jí)芯片支持最新藍(lán)牙5.4規(guī)范
- 示波器有哪些作用
- 51單片機(jī)學(xué)習(xí):定時(shí)器1實(shí)驗(yàn)
- ICDIA 2025 創(chuàng)芯展圓滿落幕!
- 中興微電子亮相ICDIA 2025,共話RISC-V架構(gòu)推動(dòng)AI算力普惠化進(jìn)程
- 動(dòng)力電池“三國(guó)殺”:中企提前鎖定勝局,日韓廠商集體失守
- 研究人員開發(fā)出人工智能雷達(dá)技術(shù) 可用于高分辨率3D城市制圖
- 上半年動(dòng)力電池TOP15:寧德時(shí)代和比亞迪裝車近200GWh 兩家公司新上榜
- 半年砸下數(shù)千億元!“并購(gòu)”浪潮下,汽車芯片大戰(zhàn)再起風(fēng)云
- 奇瑞人形機(jī)器人9月開售并將面向個(gè)人用戶,機(jī)器人時(shí)代該來了嗎?
- 華為李文廣:華為智能駕駛規(guī)劃曝光,加速追趕特斯拉
- 功能迭代和功能安全的矛盾及車端應(yīng)用層-下
- 功能迭代和功能安全的矛盾及車端應(yīng)用層-中
- 120W超快閃充即將量產(chǎn),iQOO新旗艦8月發(fā)布
- 600W+組件指日可待 光伏逆變器準(zhǔn)備好了嗎?
- 國(guó)內(nèi)最大規(guī)模5G智能電網(wǎng)建成
- 國(guó)內(nèi)最大規(guī)模5G智能電網(wǎng)建成,應(yīng)用5G基站削峰填谷供電
- 解析 節(jié)卡機(jī)器人全系列產(chǎn)品
- 大陸限電停工 半導(dǎo)體、面板、組裝廠等正常運(yùn)作
- 51實(shí)驗(yàn)4:總線法寫流水燈
- 蘋果將推送更新修復(fù)第三方程序在高刷屏幕下顯示問題
- iPhone 13 Pro Max 后置相機(jī) CIS 型號(hào)揭秘
- 總投約6億元 容大感光擬在珠海建設(shè)感光干膜、光刻膠等項(xiàng)目