在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺談OpenHarmony LiteOS-A內(nèi)核之基礎(chǔ)硬件——中斷控制器GIC400

OpenAtom OpenHarmony ? 來源:未知 ? 2022-10-26 23:00 ? 次閱讀

點(diǎn)擊藍(lán)字 ╳ 關(guān)注我們

開源項(xiàng)目 OpenHarmony是每個人的 OpenHarmony 5df532de-553e-11ed-a3b6-dac502259ad0.png

蔣衛(wèi)峰

深圳開鴻數(shù)字產(chǎn)業(yè)發(fā)展有限公司

OS內(nèi)核開發(fā)工程師

一、前言

OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)采用多內(nèi)核架構(gòu),支持Linux內(nèi)核的標(biāo)準(zhǔn)系統(tǒng)、LiteOS-A的小型系統(tǒng)、LiteOS-M的輕量系統(tǒng)。 其中LiteOS-A要求設(shè)備具備一定的處理能力,對比LiteOS-M,LiteOS-A支持以下特性: (1)MMU支持:通過MMU支持內(nèi)核態(tài)和用戶態(tài)分離,支持虛擬單元; (2)支持獨(dú)立進(jìn)程:調(diào)度對象分別為進(jìn)程、線程; (3)支持文件系統(tǒng):包括虛擬文件和塊設(shè)備等; (4)支持更復(fù)雜的IPC:包括LiteIPC等; (5)支持多核調(diào)度:支持雙核MCU,支持雙核調(diào)度; (6)支持POSIX接口:為APP開發(fā)提供更多幫助。 LiteOS-A內(nèi)核特性都是建立在CPU硬件的基礎(chǔ)上,而中斷控制器在支持LiteOS-A內(nèi)核的CPU中發(fā)揮著巨大的作用:它管理和控制可屏蔽中斷并對可屏蔽中斷進(jìn)行優(yōu)先權(quán)判定,減少CPU的負(fù)載,使得CPU更加專注于計算。 在嵌入式領(lǐng)域,ARM公司提供的芯片目前是市場的主流,OpenHarmony LiteOS-M內(nèi)核目前支持的ARM公司的Cortex-M系列的芯片,而LiteOS-A內(nèi)核支持的則是ARM公司功能更強(qiáng)大的Cortex-A/R系列的芯片,GIC是ARM公司給Cortex-A/R系列芯片提供的一個中斷控制器,在移植OpenHarmony LiteOS-A內(nèi)核到特定板子的實(shí)踐中,我們遇到了很多GIC中斷控制器相關(guān)的技術(shù)問題,所以需要深入了解ARM體系架構(gòu)下GIC中斷控制器的原理和使用方法,特此總結(jié)并共享給各位網(wǎng)友。

二、GIC控制器概述

1、GIC簡介 GIC是ARM公司給Cortex-A/R核提供的一個中斷控制器,類似Cortex-M中的NVIC。目前GIC有4個版本:V1~V4:V1是最老的版本,已經(jīng)被廢棄了;V2~V4目前正在被大量地使用。GIC V2是給ARMv7-A架構(gòu)使用的,比如Cortex-A5,Cortex-A7、Cortex-A9、Cortex-A15等,V3和V4是給ARMv8-A/R架構(gòu)使用的,也就是64位芯片使用的。 GIC V2最多支持8個核。ARM會根據(jù)GIC版本的不同研發(fā)出不同的IP核,半導(dǎo)體廠商直接購買對應(yīng)的IP核即可,比如ARM針對GIC V2就開發(fā)出了GIC400中斷控制器IP核。注意,具體產(chǎn)品是GIC400,設(shè)計規(guī)范是V2。當(dāng)GIC接收到外部中斷信號以后匯報給ARM內(nèi)核,但是ARM內(nèi)核只提供四個信號給GIC來匯報中斷情況:VFIQ、VIRQ、FIQ和IRQ,他們之間的關(guān)系如圖所示: 5e44006c-553e-11ed-a3b6-dac502259ad0.png ? 在圖中,GIC接收眾多的外部中斷,并對其進(jìn)行處理,最終只通過四個信號報給 ARM 內(nèi)核,這四個信號的含義如下:VFIQ: 虛擬快速 FIQVIRQ: 虛擬外部 IRQFIQ: 快速中斷 IRQIRQ: 外部中斷 IRQ 2、GIC整體實(shí)現(xiàn) 下圖左側(cè)部分是中斷源,中間部分是GIC控制器,最右側(cè)是中斷控制器向處理器內(nèi)核發(fā)送中斷信息。我們重點(diǎn)要看的是中間的 GIC 部分,GIC 將眾多的中斷源分為三類: ①SPI(Shared Peripheral Interrupt),共享中斷,即所有Core共享的中斷,外部中斷都屬于SPI中斷。比如按鍵中斷、串口中斷等,這些中斷所有的Core都可以處理,不限定特定Core。在圖中,每個SPI設(shè)計是共享的,在SMP系統(tǒng)中每個SPI都需要連接一個線到各個CPU中。 ②PPI(Private Peripheral Interrupt),私有中斷,GIC是支持多核的,每個核有自己獨(dú)有的中斷,需要指定的核心處理。在圖中,每個CPU都有屬于自己的PPIs,對應(yīng)關(guān)系是1對1。 ③SGI(Software-generated Interrupt),軟件中斷,由軟件觸發(fā)引起的中斷,通過向寄存器GICD_SGIR寫入數(shù)據(jù)來觸發(fā),系統(tǒng)使用SGI中斷來完成多核之間的通信在圖中,SGI是軟件(軟件運(yùn)行在CPU上)觸發(fā),所以SGI中斷源頭是各個CPU上的應(yīng)用,另外SGI和PPI一樣,每個CPU都有屬于自己的SGI,所以必須指定CPU。 5e632366-553e-11ed-a3b6-dac502259ad0.png ?3、中斷 ID 中斷源有很多,為了區(qū)分不同的中斷源要給它們分配唯一ID,也就是中斷ID。每一個CPU最多支持1020個中斷ID,中斷ID號為ID0~ID1019。1020 個ID包含了PPI、SPI和SGI,那么這三類中斷是如何分配這 1020 個中斷 ID 的呢?分配如下:ID0~ID15:這16個ID分配給SGIID16~ID31:這16個ID分配給PPID32~ID1019:這988個ID分配給SPI,像GPIO中斷、串口中斷等這些外部中斷 至于具體到某個ID對應(yīng)哪個中斷,那就由半導(dǎo)體廠商根據(jù)實(shí)際情況去定義。比如 I.MX6U 的總共使用了128個中斷ID,加上前面屬于PPI和SGI的32個ID,I.MX6U的中斷源共有128+32=160個。 5ed9f658-553e-11ed-a3b6-dac502259ad0.png ?4、GIC邏輯模塊 GIC架構(gòu)分為了兩個邏輯塊:Distributor和CPU Interface,也就是分發(fā)器端和CPU接口端。 Distributor(分發(fā)器端):參考GIC整體實(shí)現(xiàn)的圖,此邏輯塊負(fù)責(zé)處理各個中斷事件的分發(fā)問題,確定中斷事件應(yīng)該發(fā)送到哪個CPU Interface上去。分發(fā)器收集所有的中斷源,可以控制每個中斷的優(yōu)先級,它總是將優(yōu)先級最高的中斷事件發(fā)送到CPU接口端。分發(fā)器端要做的主要工作如下: ① 全局中斷使能控制 ② 控制每一個中斷的使能或者關(guān)閉 ③ 設(shè)置每個中斷的優(yōu)先級 ④ 設(shè)置每個中斷的目標(biāo)處理器列表 ⑤ 設(shè)置每個外部中斷的觸發(fā)模式:電平觸發(fā)或邊沿觸發(fā) ⑥ 設(shè)置每個中斷屬于組0還是組1,此設(shè)置涉及到另外一個領(lǐng)域安全領(lǐng)域 CPU Interface(CPU接口端):CPU接口端和CPU Core相連接,因此每個CPU Core都可以在GIC中找到一個與之對應(yīng)的CPU Interface。CPU接口端是分發(fā)器和CPU Core之間的橋梁,CPU接口端主要工作如下: ① 使能或者關(guān)閉發(fā)送到CPU Core的中斷請求信號 ② 應(yīng)答中斷 ③ 通知中斷處理完成 ④ 設(shè)置優(yōu)先級掩碼,通過掩碼來設(shè)置哪些中斷不需要上報給CPU Core ⑤ 定義搶占策略 ⑥ 當(dāng)多個中斷到來的時候,選擇優(yōu)先級最高的中斷通知給CPU Core

三、GIC400原理

1、整體框架圖 GIC-400實(shí)現(xiàn)了以下的中斷類型:16個軟件產(chǎn)生的中斷(SGI)每個處理器有6個外部私有外設(shè)中斷(PPI)每個處理器有1個內(nèi)部PP可配置的共享外設(shè)中斷(SPI)的數(shù)量 GIC-400的BD如下圖所示,GIC-400從中斷輸入信號中檢測PPI和SPI。每個處理器的每個PPI中斷ID都有一個信號。每個SPI中斷ID只有一個輸入信號,與SoC中處理器的數(shù)量無關(guān)。SGI沒有輸入信號,在GIC-400中使用AXI編程接口生成。5ef1f884-553e-11ed-a3b6-dac502259ad0.png ? ?2、輸入信號5f1989e4-553e-11ed-a3b6-dac502259ad0.png ? 上圖中左邊就是來自外設(shè)的interrupt source輸入信號。分成兩種類型,分別是PPI(Private Peripheral Interrupt)和SPI(Shared Peripheral Interrupt)。PPI中斷信號是CPU私有的,每個CPU都有其特定的PPI信號線。而SPI是所有CPU之間共享的。通過寄存器GICD_TYPER可以配置SPI的個數(shù)(最多480個)。GIC-400支持多少個SPI中斷,其輸入信號線就有多少個SPI interrupt request signal。同樣的,通過寄存器GICD_TYPER也可以配置CPU interface的個數(shù)(最多8個),GIC-400支持多少個CPU interface,其輸入信號線就提供多少組PPI中斷信號線。一組PPI中斷信號線包括6個實(shí)際的signal: ? (1)nLEGACYIRQ信號線。對應(yīng)interrupt ID 31,在bypass mode下(這里的bypass是指bypass GIC functionality,直接連接到某個processor上),nLEGACYIRQ可以直接連到對應(yīng)CPU的nIRQCPU信號線上。在這樣的設(shè)置下,該CPU不參與其他屬于該CPU的PPI以及SPI中斷的響應(yīng),而是特別為這一根中斷線服務(wù)。 (2)nCNTPNSIRQ信號線。來自Non-secure physical timer的中斷事件,對應(yīng)interrupt ID 30。 (3)nCNTPSIRQ信號線。來自secure physical timer的中斷事件,對應(yīng)interrupt ID 29。 (4)nLEGACYFIQ信號線。對應(yīng)interrupt ID 28。概念與nLEGACYIRQ信號線相同。 (5)nCNTVIRQ信號線。對應(yīng)interrupt ID 27。Virtual Timer Event,和虛擬化相關(guān),這里不予描述。 (6)nCNTHPIRQ信號線。對應(yīng)interrupt ID 26。Hypervisor Timer Event,和虛擬化相關(guān),這里不予描述。 ?3、輸出信號 所謂輸出信號,就是GIC和各個CPU直接的接口,這些接口包括: (a)觸發(fā)CPU中斷的信號。nIRQCPU和nFIQCPU信號線,主要用來觸發(fā)ARM CPU進(jìn)入IRQ mode和FIQ mode。 (b)Wake up信號。nFIQOUT和nIRQOUT信號線,協(xié)助ARM CPU的電源管理模塊,用來喚醒CPU。 (c)AXI slave interface signals。AXI(Advanced eXtensible Interface)是一種總線協(xié)議,屬于AMBA規(guī)范的一部分。通過這些信號線,ARM CPU可以和GIC硬件block進(jìn)行通信(例如寄存器訪問)。 4、觸發(fā)路徑 下面總結(jié)下SGI、PPI、SPI三種類型中斷的觸發(fā)路徑: SGI(ID0-ID15):是由CPU內(nèi)部軟件觸發(fā),所以從CPU CORE-->CPU interface-->Distributor-->CPU Interface-->CPU CORE。 PPI(ID16-ID31):是由外部器件觸發(fā),從Peripheral-->Distributor-->CPU interface-->CPU CORE。 SPI(ID32-ID1019):也是外部器件觸發(fā),從Peripheral-->Distributor-->CPU interface-->CPU CORE。 5、中斷狀態(tài)遷移圖 對于每一個中斷而言,有以下4個狀態(tài): inactive:中斷處于無效狀態(tài)。 pending:中斷處于有效狀態(tài),但是cpu沒有響應(yīng)該中斷。 active:cpu在響應(yīng)該中斷。 active and pending:cpu在響應(yīng)該中斷,但是該中斷源又發(fā)送中斷過來。 PS:對于電平觸發(fā)的中斷而言,一個中斷的處理階段也會有active and pending的階段,這是比較特殊的。5f3a04c6-553e-11ed-a3b6-dac502259ad0.png ? 下面是官方提供中斷遷移的條件和場景說明,要注意的是文中either表示轉(zhuǎn)移條件滿足其一即可: ?5f47cce6-553e-11ed-a3b6-dac502259ad0.png5fa4fe84-553e-11ed-a3b6-dac502259ad0.png ?

四、GIC400寄存器

1、GIC-400寄存器地圖 所有GIC-400寄存器都有短名稱。在這些名稱中,前三個字符是GIC,第四個字符表示 GIC-400 的功能塊:GICD_ 分配器GICC_ 中央處理器接口GICH_ 虛擬接口控制塊GICV_ 虛擬CPU接口。 GIC-400寄存器是內(nèi)存映射的,下表列出了地址范圍:5fc5c3d0-553e-11ed-a3b6-dac502259ad0.png ? 內(nèi)存映射的含義:對于ARM體系架構(gòu)而言,IO和內(nèi)存是統(tǒng)一編制,寄存器會占用內(nèi)存的地址范圍。至于GIC-400寄存器首地址映射在哪個內(nèi)存地址上,這是硬件廠商設(shè)計,并通過CP15協(xié)處理器來獲取。 ?2、具體寄存器 下面解釋幾個經(jīng)典的寄存器,更多的寄存器請參考ARM出品的官方文檔。(1)GICD_CTRL寄存器 5fe9535e-553e-11ed-a3b6-dac502259ad0.png ?寄存器GICD_CTRL各個位的含義如下:-------------------------------------GICD_CTRL_reserved_0:保留。-------------------------------------EnableGrp1:Global enable for forwarding pending Group 1 interrupts from the Distributor to the CPU interfaces:-------------------------------------EnableGrp0:Global enable for forwarding pending Group 0 interrupts from the Distributor to the CPU interfaces:-------------------------------------個人見解:第一,EnableGrp1和EnableGrp0是全局開關(guān),第二,這是Distributor側(cè)的開關(guān),至于CPU interfaces側(cè)繼續(xù)參考其它寄存器。------------------------------------- (2)2 GICD_TYPER 5ffb3e02-553e-11ed-a3b6-dac502259ad0.png ?-------------------------------------GICD_TYPER_reserved_0:個人見解:保留字段,不使用-------------------------------------LSPI:If the GIC implements the Security Extensions, the value of this field is the maximum numberof implemented lockable SPIs, from 0 (0b00000) to 31 (0b11111), see Configuration lockdown on page 4-82. If this field is 0b00000 then the GIC does not implement configuration lockdown. If the GIC does not implement the Security Extensions, this field is reserved.個人見解:在不使能ARM安全體系的功能前提下,此處保留,安全體系的功能暫時不使用。-------------------------------------SecurityExtn:Indicates whether the GIC implements the Security Extensions.0 Security Extensions not implemented.1 Security Extensions implemented.個人見解:ARM安全體系的功能,使能后,0組和1組含義不一樣,具體需要另外篇幅來闡述-------------------------------------GICD_TYPER_reserved_1:-------------------------------------CPUNumber:Indicates the number of implemented CPU interfaces. The number of implemented CPUinterfaces is one more than the value of this field, for example if this field is 0b011, thereare four CPU interfaces. If the GIC implements the Virtualization Extensions, this is also the number of virtual CPU interfaces.個人見解:the number of implemented CPU interfaces = CPUNumber+1,域值是從0開始,含義卻是從1開始。-------------------------------------ITLinesNumber:Indicates the maximum number of interrupts that the GIC supports. If ITLinesNumber=N, the maximum number of interrupts is 32(N+1). The interrupt ID range is from 0 to (number of IDs - 1).For example: 0b00011 Up to 128 interrupt lines, interrupt IDs 0-127.The maximum number of interrupts is 1020 (0b11111). See the text in this section for more information. Regardless of the range of interrupt IDs defined by this field, interrupt IDs 1020-1023 are reserved for special purposes.個人見解:最大的中斷數(shù)量是32*(ITLinesNumber +1)------------------------------------- (3)GICD_IDDR 606ba980-553e-11ed-a3b6-dac502259ad0.png ?-------------------------------------ProductID:個人見解:值0x020意味著GIC-400-------------------------------------GICD_IDDR_reserved_0:個人見解:reserved-------------------------------------Variant:An IMPLEMENTATION DEFINED variant number. Typically, this field is used to distinguishproduct variants, or major revisions of a product.個人見解:產(chǎn)品主版本號,0x2代表版本為2.0-------------------------------------Revision:An IMPLEMENTATION DEFINED revision number. Typically, this field is used to distinguish minor revisions of a product.個人見解:產(chǎn)品小版本號,0x1代表修訂版為r0p1。-------------------------------------Implementer:Contains the JEP106 code of the company that implemented the GIC Distributor:Bits [11:8] The JEP106 continuation code of the implementer. For an ARM implementation, this field is 0x4. Bits [7] Always 0. Bits [6:0] The JEP106 identity code of the implementer. For an ARM implementation, bits[7:0] are 0x3B.個人見解:實(shí)現(xiàn)CPU接口的公司代碼,0x43B代表ARM公司。------------------------------------- (4)GICD_IGROUPn_0 608d43b0-553e-11ed-a3b6-dac502259ad0.png ?-------------------------------------Group_Status_Bits:The GICD_IGROUPR registers provide a status bit for each interrupt supported by the GIC.Each bit controls whether the corresponding interrupt is in Group 0 or Group 1. Accessible by Secure accesses Only.For each bit:0 The corresponding interrupt is Group 0.1 The corresponding interrupt is Group 1.For interrupt ID m, when DIV and MOD are the integer division and modulo operations:a. the corresponding GICD_IGROUPRn number, n, is given by n = m DIV 32b. the offset of the required GICD_IGROUPR is (0x080 + (4*n))c. the bit number of the required group status bit in this register is m MOD 32.個人見解:① 組狀態(tài)位,對于每個位:“0”表示相應(yīng)的中斷為Group 0;“1”表示相應(yīng)的中斷為Group 1。② 問:對于一個中斷,如何設(shè)置它的Group?答:首先找到對應(yīng)的GICD_IGROUPRn寄存器,即n是多少?還要確定使用這個寄存器里哪一位。對于interrtups ID m,如下計算:n = m DIV 32,GICD_IGROUPRn里的n就確定了;③ GICD_IGROUPRn在GIC內(nèi)部的偏移地址是多少?答:0x080+(4*n),這個信息是為了定位到具體寄存器。④ 使用GICD_IPRIORITYRn中哪一位來表示?答:bit = m mod 32。⑤ GICD_IGROUPn_0只是GICD_IGROUPn寄存器組的第一個,總共有4個寄存器:GICD_IGROUPn_0到GICD_IGROUPn_3------------------------------------- (5)GICD_ISENABLER0 60b7156e-553e-11ed-a3b6-dac502259ad0.png ?-------------------------------------Set_Enable_Bits:The GICD_ISENABLERs provide a Set-enable bit for each interrupt supported by the GIC. For SPIs and PPIs, each bit controls the forwarding of the corresponding interrupt from the Distributor to the CPU interfaces:Reads:0 Forwarding of the corresponding interrupt is disabled.1 Forwarding of the corresponding interrupt is enabled.Writes:0 Has no effect.1 Enables the forwarding of the corresponding interrupt.After a write of 1 to a bit, a subsequent read of the bit returns the value 1. For interrupt ID m, when DIV and MOD are the integer division and modulo operations:a.the corresponding GICD_ISENABLER number, n, is given by n = m DIV 32b.the offset of the required GICD_ISENABLER is (0x100 + (4*n))c.the bit number of the required Set-enable bit in this register is m MOD 32.個人見解:① 對于SPI和PPI類型的中斷,每一位控制對應(yīng)中斷的轉(zhuǎn)發(fā)行為:從Distributor轉(zhuǎn)發(fā)到CPU interface:讀:“0”表示當(dāng)前是禁止轉(zhuǎn)發(fā)的;“1”表示當(dāng)前是使能轉(zhuǎn)發(fā)的;寫:“0”表示無效;“1”表示使能轉(zhuǎn)發(fā)。 ② 對于一個中斷,如何找到GICD_ISENABLERn并確定相應(yīng)的位?答:對于interrtups ID m,如下計算:n = m DIV 32,GICD_ISENABLERn里的n就確定了;GICD_ISENABLERn在GIC內(nèi)部的偏移地址是多少?計算方法為0x100+(4*n),因?yàn)橐粋€寄存器大小為4個字節(jié)。使用GICD_ISENABLERn中哪一位來表示?計算方法為?bit = m mod 32。 ③ 這里的開關(guān)也是Distributor側(cè)的開關(guān),GICV硬件設(shè)計思想和軟件設(shè)計思想類似。④ GICD_ISENABLER0是此類寄存器組的第一個,總共是4個。------------------------------------- (6)GICD_ICFGR0 60d9ad22-553e-11ed-a3b6-dac502259ad0.png61159562-553e-11ed-a3b6-dac502259ad0.png ?-------------------------------------Int_Config:The GICD_ICFGRs provide a 2-bit Int_config field for each interrupt supported by the GIC.For Int_config[1], the most significant bit, bit [2F+1], the encoding is:0 Corresponding interrupt is level-sensitive.1 Corresponding interrupt is edge-triggered.Int_config[0], the least significant bit, bit [2F], reservedFor SGIs: Int_config[1] Not programmable, RAO/WI.For PPIs: Int_config[1] Not programmable, RAZ/WI.For SPIs: Int_config[1] this bit is programmable.A read of this bit always returns the correct value to indicate whether the corresponding interrupt is level-sensitive or edge-triggered.For interrupt ID m, when DIV and MOD are the integer division and modulo operations: a. the corresponding GICD_ICFGR number, n, is given by n = m DIV 16b. the offset of the required GICD_ICFGRn is (0xC00 + (4*n))c. the required Priority field in this register, F, is given by F = m MOD 16, where field 0 refers to register bits [1:0], field 1 refers to bits [3:2], up to field 15 that refers to bits [31:30].個人見解:對于每一個中斷,都有對應(yīng)的2位數(shù)據(jù)用來描述:它的邊沿觸發(fā),還是電平觸發(fā)。對于Int_config [1](即高位[2F + 1]),含義為:“0”表示相應(yīng)的中斷是電平觸發(fā);“1”表示相應(yīng)的中斷是邊沿觸發(fā)。對于Int_config [0],即低位[2F],是保留位,這一位就是以后才使用。-------------------------------------

五、問題與建議

1、ARM芯片設(shè)計了FIQ和IRQ的2個處理模式,移植過程中沒有用到FIQ。 2、虛擬中斷相關(guān)的功能也沒有用到。 3、安全相關(guān)的中斷功能前期我們也沒有用到,后續(xù)在可信執(zhí)行環(huán)境中會用到。 4、如果代碼對中斷保護(hù)寫得不好的話,會出現(xiàn)Systick發(fā)生多次中斷,中斷狀態(tài)為active &pending,在移植過程中OpenHarmony版本不支持嵌套中斷。 5、中斷處理分為邊沿觸發(fā)處理和電平觸發(fā)處理。這就給我們不同的應(yīng)用功能提供了選擇,使得我們可以在不同個工作下選擇適合的模式,邊沿觸發(fā)適用于對時間要求高的,比如中斷中有計數(shù)之類的(GATE門控位置1時),而電平觸發(fā)則適合報警裝置。 6、在基于ARM的嵌入式應(yīng)用系統(tǒng)中,存儲系統(tǒng)通常是通過系統(tǒng)控制協(xié)處理器CP15完成的。ARM處理器使用協(xié)處理器15(CP15)的寄存器來控制cache、TCM和存儲器管理。CP15包含16個32位的寄存器,其編號為0~15,具體請參考ARM官方文檔。 7、givc2將中斷分成了group0和group1,默認(rèn)情況下,所有中斷都是組0中斷,并使用IRQ向連接的處理器發(fā)送信號中斷請求。個人理解如果都改為組1也是沒有問題的,但是沒有驗(yàn)證。 8、GIC-400通用初始化流程: (1)設(shè)置distributor和CPU interface寄存器組的基地址; (2)讀取GICD_TYPER寄存器,計算當(dāng)前GIC最大支持多少個中斷源; (3)初始化distributor: a.disable distributor; b.設(shè)置中斷分組; c.設(shè)置SPI中斷的路由; d.設(shè)置SPI中斷的觸發(fā)類型; e.disactive和disable所有中斷源; f.enable distributor; (4)初始化CPU Interface: a.設(shè)置GIC_CPU_PRIMASK,設(shè)置中斷優(yōu)先級mask level; b.enable CPU interface;

六、總結(jié)

本篇文章從GIC控制器概述、GIC400原理、GIC400寄存器等方面介紹了OpenHarmony內(nèi)核之基礎(chǔ)硬件——中斷控制器GIC400的內(nèi)容,希望開發(fā)者能從中學(xué)有所獲,學(xué)以致用。關(guān)于OpenHarmony內(nèi)核的內(nèi)容,之前我還介紹了內(nèi)核對象隊(duì)列的算法、OpenHarmony LiteOS-M內(nèi)核事件的運(yùn)作機(jī)制,以及內(nèi)核IPC機(jī)制數(shù)據(jù)結(jié)構(gòu)、OpenHarmony Liteos-A內(nèi)核之iperf3移植方法,感興趣的讀者可以點(diǎn)擊閱讀:《OpenHarmony——內(nèi)核對象隊(duì)列之算法詳解(上)》、《OpenHarmony——內(nèi)核對象隊(duì)列之算法詳解(下)》、《OpenHarmony——內(nèi)核對象事件之源碼詳解》、《OpenHarmony——內(nèi)核IPC機(jī)制數(shù)據(jù)結(jié)構(gòu)解析》、《OpenHarmony Liteos_A內(nèi)核之iperf3移植心得》。


原文標(biāo)題:淺談OpenHarmony LiteOS-A內(nèi)核之基礎(chǔ)硬件——中斷控制器GIC400

文章出處:【微信公眾號:OpenAtom OpenHarmony】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3722

    瀏覽量

    16317

原文標(biāo)題:淺談OpenHarmony LiteOS-A內(nèi)核之基礎(chǔ)硬件——中斷控制器GIC400

文章出處:【微信號:gh_e4f28cfa3159,微信公眾號:OpenAtom OpenHarmony】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    LiteOS-A內(nèi)核

    LiteOS-A內(nèi)核簡介目錄約束使用說明準(zhǔn)備獲取源碼編譯構(gòu)建相關(guān)倉簡介OpenHarmony LiteOS-A內(nèi)核是基于Huawei
    發(fā)表于 04-23 17:10

    OpenHarmony LiteOS-A內(nèi)核介紹

    簡介OpenHarmony LiteOS-A內(nèi)核是基于Huawei LiteOS內(nèi)核演進(jìn)發(fā)展的新一代內(nèi)核
    發(fā)表于 08-19 10:46

    設(shè)備樹中GIC中斷控制器節(jié)點(diǎn)

    文章目錄一、回顧二、設(shè)備樹中GIC中斷控制器節(jié)點(diǎn)三、外設(shè)中斷控制器節(jié)點(diǎn)三、其他設(shè)備使用中斷節(jié)點(diǎn)1、中斷類型四、常用函數(shù)1、request_i
    發(fā)表于 01-10 07:37

    淺談OpenHarmony LiteOS-A內(nèi)核基礎(chǔ)硬件——中斷控制器GIC400

    原理、GIC400寄存等方面介紹了OpenHarmony內(nèi)核基礎(chǔ)硬件——
    發(fā)表于 10-27 12:20

    LiteOS-A內(nèi)核中的procfs文件系統(tǒng)分析

    內(nèi)核的系統(tǒng)移植工作。關(guān)于OpenHarmony內(nèi)核的內(nèi)容,之前我還介紹了LiteOS-A內(nèi)核
    發(fā)表于 12-08 11:31

    ARM CoreLink GIC-500通用中斷控制器技術(shù)參考手冊

    GIC-500是一個構(gòu)建時可配置的中斷控制器,最多支持128個內(nèi)核GIC-500僅支持實(shí)現(xiàn)ARMv8架構(gòu)的內(nèi)核,以及具有標(biāo)準(zhǔn)
    發(fā)表于 08-02 14:02

    CoreLink GIC-400通用中斷控制器技術(shù)參考手冊

    GIC-400是一款高性能、區(qū)域優(yōu)化的中斷控制器,具有高級微控制器總線架構(gòu)(AMBA)高級可擴(kuò)展接口(AXI)接口。它在片上系統(tǒng)(SoC)配置中檢測、管理和分配中斷。您可以配置
    發(fā)表于 08-02 12:13

    ARM CORELINK GIC-600AE通用中斷控制器技術(shù)參考手冊

    GIC-600AE是GIC-600的功能安全(FUSA)變種。 GIC-600AE是一種通用中斷控制器(GIC),可處理從外設(shè)到
    發(fā)表于 08-09 06:10

    將GICv2中斷控制器與ARM Cortex-A5x和Cortex-A72處理集成

    與之前的一些ARM處理(如Cortex-A9 MPCore)不同,ARM?Cortex?-A5x MPCore和Cortex-A72 MPCore處理
    發(fā)表于 08-23 07:21

    中斷控制器的驅(qū)動解析(上)

    這里主要分析 linux kernel 中 GIC v3 中斷控制器的代碼(drivers/irqchip/irq-gic-v3.c)。設(shè)備樹先來看下一個中斷控制器的設(shè)備樹信息:
    發(fā)表于 12-04 16:36 ?10次下載
    <b class='flag-5'>中斷控制器</b>的驅(qū)動解析(上)

    扒開 ARM 中斷控制器的底褲

    GIC 硬件原理GIC,Generic Interrupt Controller。是ARM公司提供的一個通用的中斷控制器。主要作用為:接受硬件
    發(fā)表于 12-04 17:36 ?6次下載
    扒開 ARM <b class='flag-5'>中斷控制器</b>的底褲

    ARM通用中斷控制器規(guī)范手冊

    本規(guī)范描述了ARM通用中斷控制器GIC)體系結(jié)構(gòu)。在本文檔中,對GICGIC的引用是指實(shí)現(xiàn)此GIC架構(gòu)的設(shè)備。除非上下文明確指出引用是指
    發(fā)表于 06-02 11:03 ?1次下載

    關(guān)于ARM中斷控制器的介紹

    GIC 硬件原理 GIC,Generic Interrupt Controller。是ARM公司提供的一個通用的中斷控制器。主要作用為:接受硬件
    的頭像 發(fā)表于 07-08 09:34 ?2318次閱讀

    Liteos-a內(nèi)核工作隊(duì)列的實(shí)現(xiàn)原理分析及經(jīng)驗(yàn)總結(jié)——芯海科技PPG芯片CS1262接入OpenHarmony實(shí)戰(zhàn)

    摘要OpenHarmony系統(tǒng)中使用了liteos-m、liteos-a、linux三種內(nèi)核,工作隊(duì)列是linux內(nèi)核引入的一種異步處理機(jī)制
    的頭像 發(fā)表于 04-26 09:26 ?2128次閱讀
    <b class='flag-5'>Liteos-a</b><b class='flag-5'>內(nèi)核</b>工作隊(duì)列的實(shí)現(xiàn)原理分析及經(jīng)驗(yàn)總結(jié)——芯海科技PPG芯片CS1262接入<b class='flag-5'>OpenHarmony</b>實(shí)戰(zhàn)

    【鴻蒙】小型系統(tǒng)LiteOS-A內(nèi)核

    LiteOS-A 內(nèi)核 移植概述 移植場景 LiteOS-A 當(dāng)前支持 ARMv7-a 指令集架構(gòu),如果三方芯片為 ARMv7-a 架構(gòu),可
    的頭像 發(fā)表于 02-29 16:16 ?1189次閱讀
    【鴻蒙】小型系統(tǒng)<b class='flag-5'>LiteOS-A</b><b class='flag-5'>內(nèi)核</b>
    主站蜘蛛池模板: 精品福利| 成人免费久久精品国产片久久影院 | 天堂在线观看中文字幕| 色偷偷7777www人| 国产精品久久久久aaaa| 久草资源站在线| 日本免费一区视频| 免费任我爽橹视频在线观看| 757福利影院合集3000| 他也色在线| 国产精品伦视频观看免费| 天天操天天曰| 爽好舒服快小柔小说| 人人做人人爽| 午夜精品在线| 加勒比黑人喝羽月希奶水| 很黄很黄叫声床戏免费视频| 欧美黄色片免费看| 奇米奇米| 美女扒开尿口给男人爽的视频| 男女免费视频| 色播图片| 亚洲日本中文字幕天天更新| 啪啪免费观看| 亚洲欧美日韩动漫| 国产精品麻豆va在线播放| 亚洲人成网站色7799在线观看| 亚洲成a人片在线观看导航| 甘婷婷一级毛片免费看| 天天曰天天爽| 久久婷人人澡人人爽| 激情五月综合网| 天天射天天拍| 女人的逼毛片| 久久久久国产精品免费免费不卡| 欧美影院| 在线看视频你懂的| 国产亚洲婷婷香蕉久久精品| 精品久久久久久久久久| 五月天丁香花婷婷| 天天夜夜爽|