ZYNQ 中斷子系統

目錄

1、簡述

2、SGI(Software Generated Interrupts)

3、PPI (CPU Private Peripheral Interrupts)

4、SPI(Shared Peripheral Interrupts )

5、Registers

5.1、ICC

5.2、ICD


 

1、簡述

ZYNQ-7000 帶雙核 Cortex-A9 處理器的 7020 芯片,PS 端集成的是 GIC 中斷控制器;

GIC 是通用中斷控制器(Generic Interrupt Controller)的簡稱。GIC 的版本是 pl390,也就是 GIC 的 v1 版本;

更多 GIC 相關的請移步《ARM GIC 中斷控制器

雙核 A9 CPU 靠這個 GIC 來進行中斷相關的調度;它的結構如下所示

圖中可以看到,GIC 主要分爲了三種中斷:

SGIs(software generated interrupts):最大 16 個軟件可產生的中斷,中斷號0-15;

PPIs(private peripheral interrupts):每顆 CPU 專有的 5 個私有中斷,中斷號27-31;

SPIs(shared peripheral interrupts):60 個共享的外設中斷(包含來自 IOP 的和來自 PL),中斷號32-95;

GIC 在整個中斷的過程中,主要負責了中斷的仲裁、分發;

GIC 支持配置中斷的優先級,中斷源做啓用、禁用、屏蔽、配置中斷的觸發條件(邊沿、電平),指定哪些中斷髮送到指定的 CPU(如果中斷和多個CPU有關,SGI和PPI分發器的寄存器會爲每個CPU提供獨立的副本,硬件上確保中斷一次只能由一個CPU執行。只有應答了中斷的CPU才能中止那個中斷)

GIC 由多箇中斷觸發源連接分發器構成:

所有中斷請求(PPI、SGI、SPI)都分配了唯一的ID號。控制器使用ID號執行仲裁,中斷分發器有每個CPU中掛起的中斷列表,它會選擇中斷優先級最高的中斷,將其發送給CPU接口。中斷優先級相同時先選擇ID號小的中斷。中斷分發器會接收中斷已被應答的信息,更改相應的中斷狀態。

 

2、SGI(Software Generated Interrupts)

每個 CPU 都可以用 SGI 中斷本 CPU 或者其它 CPU。可以寫 SGI 中斷號到 ICDSGIR 寄存器中,並且指定發送的目標 CPU 來產生對應的 SGI 中斷。每個CPU都有自己的一組SGI寄存器,以生成16個(共16個SGI,如下圖)中的一個或多個SGI中斷。

SGI 常用於多核間通訊,硬件中斷號從 ID0~ID15。(SGIs 的觸發條件是上升沿,不可以進行更改)

 

3、PPI (CPU Private Peripheral Interrupts)

每個 CPU 都有一組自己的私有中斷,即 PPI。PPI 包括全局定時器、CPU 私有看門狗定時器、CPU 私有定時器,PL的FIQ/IRQ共五種外設。

PPI 通常會送達到指定的 CPU 上,應用場景有 CPU 本地時鐘。

 

4、SPI(Shared Peripheral Interrupts )

共享的外設中斷, 可以看到,有常用的 DMA、UART、Timer、IIC、SDIO 等等;

SPI 中斷可以被選擇綁定到一個或者兩個 CPU,但是隻有一個CPU處理該中斷(GIC 保證)

 

5、Registers

GIC 相關的寄存器,在 UG585 文檔中,全部集成在  mpcore 這個域下面,主要分爲了幾種類型的寄存器:ICC 和 ICD:

5.1、ICC

ICC 寄存器的全稱叫:Interrupt Controller CPU,即,控制寄存器:

ICCICR:使能/禁能 CPU 的一級中斷;

ICCPMR:CPU Interface 的優先級屏蔽寄存器,優先級高於這個值的中斷來的時候(與具體的中斷優先級比較),纔有可能處理這個中斷;

ICCBPR:控制優先級組的寄存器,子優先級;

 

5.2、ICD

ICD 寄存器的全稱叫:Interrupt Controller Distributor,即,中斷控制器分發器:

ICDDCR:分配控制寄存器,安全或者非安全控制開啓或者關閉中斷配置;

ICDICFR:配置寄存器,配置中斷觸發模式(沿觸發還是電平觸發),共6個寄存器,分別是 ICDICFR 0 ~ ICDICFR 5,並不是所有的都可以配置,有的是 RO 的,有的可以配置;

ICDIPR:中斷優先級寄存器,共24個寄存器,ICDIPR 0 ~ ICDIPR 23,每 8 位代表一箇中斷的優先級配置;

ICDIPTR:CPU 接口選擇寄存器,即,中斷會被髮送的哪個 CPU 上去,共24個寄存器,ICDIPTR 0- ICDIPTR 23,注意,並不是所有都可以配置,有的是固定和 CPU 綁定的;

ICDICER:中斷屏蔽寄存器,共3個寄存器,ICDICER 0- ICDICER 2,寫1表示屏蔽中斷;

ICDISER:中斷使能寄存器,共3個寄存器,ICDISER 0- ICDISER 2,功能和上面一個寄存器相反,寫1表示使能中斷;

ICDISPR:拉起中斷 Pending 寄存器,共3個寄存器,ICDISPR 0- ICDISPR 2,設置 pending 寄存器,寫1生效;

ICDICPR:清除中斷 Pending 寄存器,共3個寄存器,ICDICPR 0- ICDICPR 2,清除 pending 寄存器,寫1生效;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章