S3C2440的中斷體系結構

概述

S3C2440A中的中斷控制器接受來自60箇中斷源的請求。提供這些中斷源的能夠是內部外設,如DMA控制器、UART、IIC等等。在這些中斷源中,UARTn、AC97和EINTn中斷對於中斷控制器而言是「或」關係(在這幾個源中還能夠有中斷分支)。3d

當從內部外設和外部中斷請求引腳收到多箇中斷請求時,中斷控制器在仲裁步驟後請求ARM920T內核的FIQ或IRQ。blog

總流程圖以下:

程序狀態寄存器(PSR)的 F 位和 I 位

若是 ARM920T CPU 中的 PSR 的 F 位被置位爲 1,CPU 不會接受來自中斷控制器的快中斷請求(FIQ)。同
樣的若是 PSR 的 I 位被置位爲 1,CPU 不會接受來自中斷控制器的中斷請求(IRQ)。所以,中斷控制器能夠經過
清除 PSR 的 F 位和 I 位爲 0 而且設置 INTMSK 的相應位爲 0 來接收中斷。table

中斷模式

ARM920T 有兩種中斷模式的類型:FIQ 或 IRQ(能夠經過 中斷模式 INTMOD 寄存器 設置成FIQ或IRQ)。全部中斷源在中斷請求時決定使用哪一種類型。class

中斷掛起寄存器

S3C2440A 有兩個中斷掛起寄存器:源掛起寄存器(SRCPND)和中斷掛起寄存器(INTPND)。這些掛起寄
存器代表一箇中斷請求是否爲掛起。當中斷源請求中斷服務,SRCPND 寄存器的相應位被置位爲 1,而且同時在仲
裁步驟後 INTPND 寄存器僅有 1 位自動置位爲 1。若是屏蔽了中斷,則 SRCPND 寄存器的相應位被置位爲 1。這
並不會引發 INTPND 寄存器的位的改變。當 INTPND 寄存器的掛起位爲置位,每當 I 標誌或 F 標誌被清除爲 0 中
斷服務程序將開始。SRCPND 和 INTPND 寄存器能夠被讀取和寫入,所以服務程序必須首先經過寫 1 到 SRCPND
寄存器的相應位來清除掛起狀態而且經過相同方法來清除 INTPND 寄存器中掛起狀態。psr

中斷屏蔽寄存器

此寄存器代表若是中斷相應的屏蔽位被置位爲 1 則禁止該中斷。若是某個 INTMSK 的中斷屏蔽位爲 0,將正常
服務中斷。若是 INTMSK 的中斷屏蔽位爲 1 而且產生了中斷,將置位源掛起位。請求

中斷控制器支持 60 箇中斷源,以下圖所示:


這裏,外部中斷 4 至 7是共用一個源、UART2 中斷的(ERR、RXD 和 TXD)是共用一個源....我以爲這樣的做用就是爲了每項功能 (例如掛起、屏蔽)能夠用一個寄存器來管理。程序

中斷次級源,以下圖:


我想你們看到這個圖後就應該明白了爲何要有 次級源掛起(SUBSRCPND)寄存器 和 中斷次級屏蔽(INTSUBMSK)寄存器 了吧。方法

當一個源中還有子源的話,就會走第一張圖的上支路,反而走下支路。假如咱們在 INTSUBMSK 中屏蔽了 INT_TC 這個中斷,和它共處一個源的 INT_ADC_S 中斷仍是能夠進來,可是若是屏蔽了 INT_ADC 這個中斷源,它們兩個就都會被屏蔽掉。im

中斷優先級

每一個仲裁器能夠處理基於 1 位仲裁器模式控制(ARB_MODE)和選擇控制信號(ARB_SEL)的 2 位的 6 箇中斷請求,以下:d3

仲裁器的 REQ0 的優先級老是最高而且 REQ5 的優先級老是最低經過改變 ARB_SEL 位,能夠輪換 REQ1 到 REQ4 的順序(當 ARB_MODE 爲 1 時)。
– 若是 ARB_SEL 位爲 00b,優先級順序爲 REQ0、REQ一、REQ二、REQ三、REQ4 和 REQ5。
– 若是 ARB_SEL 位爲 01b,優先級順序爲 REQ0、REQ二、REQ三、REQ四、REQ1 和 REQ5。
– 若是 ARB_SEL 位爲 10b,優先級順序爲 REQ0、REQ三、REQ四、REQ一、REQ2 和 REQ5。
– 若是 ARB_SEL 位爲 11b,優先級順序爲 REQ0、REQ四、REQ一、REQ二、REQ3 和 REQ5。
中斷優先級發生模塊:

最後介紹一下中斷偏移(INTOFFSET)寄存器

中斷偏移寄存器中的值代表了是哪一個 IRQ 模式的中斷請求在 INTPND 寄存器中。此位能夠經過清楚 SRCPND
和 INTPND 自動清除

大概意思就是你能夠把這個寄存器當成中斷請求後的標誌位,經過察看偏移值就能夠知道當前是哪一個中斷源發生請求。

相關文章
相關標籤/搜索