學會Zynq(7)中斷系統簡介

FPGADesigner發表於2019-03-18

本文簡單介紹Zynq的中斷系統和中斷控制器。Zynq的PS部分基於ARM架構,使用了兩個Cortex-A9處理器(CPU)以及GIC pl390中斷控制器(單核Zynq則只有一個GIC)。GIC是通用中斷控制器(Generic Interrupt Controller)的簡稱。雙核的中斷系統框圖如下:
在這裡插入圖片描述

Zynq的中斷結構與CPU密切相關,可以接受來自I/O外設和PL部分的中斷。從上圖我們可以看到中斷主要分為私有外設中斷PPI、軟體生成中斷SGI和共享外設中斷SPI。

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

如果中斷和多個CPU有關,SGI和PPI分發器的暫存器會為每個CPU提供獨立的副本,硬體上確保中斷一次只能由一個CPU執行。只有應答了中斷的CPU才能中止那個中斷。


通用中斷控制器

GIC用於管理從PS和PL傳送到CPU的中斷(見上圖)。當CPU介面接受一箇中斷時,GIC對中斷源做啟用、禁用、遮蔽、設定優先順序處理,並以可程式設計的方式將它們傳送到選定的CPU。此外GIC還支援安全擴充套件,以實現安全感知(security-aware)系統。Zynq中的中斷控制器基於ARM GIC v1.0版本。

GIC通過CPU專用匯流排來訪問暫存器,實現快速讀寫響應,以避免臨時阻塞等其它互聯中的瓶頸。在將具有最高優先順序的中斷源分配給各CPU前,中斷分發器先集中所有中斷源。GIC確保針對多個CPU的中斷一次只能由一個CPU執行。所有中斷源都由唯一的中斷ID號標識。每個中斷源都有自己可配置的優先順序和目標CPU列表。三種中斷的中斷源如下圖:
在這裡插入圖片描述


三種中斷

每個CPU都有一組私有外設中斷,簡稱PPI,這些中斷使用儲存暫存器進行私有訪問。PPI包括全域性定時器、私有看門狗定時器、私有定時器和來自PL的FIQ/IRQ共五種外設,中斷號為27-31,其中斷敏感型別(Type)固定不可改變,見下表:
在這裡插入圖片描述
軟體生成中斷簡稱SGI,可以路由到一個或兩個CPU。通過寫入GIC中的暫存器來產生軟體中斷。每個CPU都可以產生16個軟體中斷,中斷號為0-15。向ICDSGIR暫存器寫入SGI中斷號,並設定目標CPU,便可生成SGI中斷。每個CPU都有自己的一組SGI暫存器。
在這裡插入圖片描述
共享外設中斷簡稱SPI,由PS和PL中的各種I/O和記憶體控制器產生,共有60個左右。SPI可以被路由到一個或兩個CPU。來自PS外設的SPI中斷也可以路由到PL。中斷控制器會管理這些中斷的優先順序和接收。中斷號61-68和84-91的中斷敏感型別可以改變,其餘皆固定不變,見下表。
對於電平敏感型別的中斷,中斷請求源必須提供在中斷被確認後將其清除掉的機制。對於上升沿敏感型別的中斷,請求源必須提供足夠寬的脈衝,讓GIC能夠捕獲。比如來自PL的中斷IRQF2P[n]中斷便可配置為高電平敏感或上升沿敏感,使用時要注意。

在這裡插入圖片描述
在這裡插入圖片描述

相關文章