S3C2440 中斷控制暫存器

2021-07-05 17:17:23 字數 3950 閱讀 1415

1、 subsrcpnd 暫存器(sub source pending)

subsrcpnd 暫存器被用來標識 int_rxd0、int_txd0 等中斷(s3c2410中這類中斷有 11 個,而 s3c2440 中有 15 個)是否已經發生,每位對應乙個中斷。當這些中斷發生並且沒有被 intsubmsk 暫存器遮蔽,則它們中的若干位將「匯集」出現在 srcpnd 暫存器的一位上。比如 subsrcpnd 暫存器中的 3 個中斷 int_rxd0、int_txd0、int_err0,只要有乙個發生了並且它沒有被遮蔽,則 srcpnd 暫存器中的 int_uart0 位被置 1。

要清楚中斷時,往 subsrcpnd 暫存器中某位寫入 1 即可令此位為 0;寫入 0 無效果,資料保持不變。

subsrcpnd 暫存器中各位對應的中斷、subsrcpnd 暫存器中哪幾位「匯集」成 srcpnd 暫存器中的哪一位,參考資料手冊。

2、 intsubmsk 暫存器(interrupt sub mask)

intsubmsk 暫存器被用來遮蔽 subsrcpnd 暫存器所標識的中斷。 intsubmsk 暫存器中某位被設為 1 時, 對應的中斷被遮蔽。

3、srcpnd 暫存器(source pending)

srcpnd 中每一位被用來表示乙個(或一類)中斷是否已經發生,「spcpnd」的兩類中斷:使用 subsrcpnd/intsubmsk 控制的中斷,不使用 subsrcpnd/intsubmsk 控制的中斷。

srcpnd 暫存器的操作與 subsrcpnd 暫存器相似,若想清除某一位,往此位寫入 1.

srcpnd 暫存器中各位對應哪個(或哪類)中斷,參考資料手冊。

4、intmsk 暫存器(interrupt mask)

intmsk 暫存器被用來遮蔽 srcpnd 暫存器所標識的中斷。 intmsk 暫存器中某位被設為 1 時,對應的中斷被遮蔽。

intmsk 暫存器只能遮蔽被設為 irq 的中斷,不能遮蔽被設為 fiq 的中斷。

5、 intmod 暫存器(interrupt mode)

當 intmod 暫存器中某位被設為 1 時,它對應的中斷被設為 fiq,即此中斷發生時, cpu 將進入快速中斷模式,這通常用來處理特別緊急的中斷。

注意:同一時間裡, intmod 暫存器中只能有一位被設為 1.

6、 priority 暫存器

上面 intmod 暫存器中,將設為 1 的中斷稱為快速中斷(fiq),將其餘設為 0 的中斷稱為普通中斷(irq)。

當有多個普通中斷同事發生時,中斷控制器將選出最高優先順序的中斷,首先處理它。終端優先順序的判選通過 7 個仲裁器來完成,包括 6 個一級仲裁器和 1 乙個二級仲裁器。

每個仲裁器含 6 個輸入引腳 req0 ~ req5。對於每個仲裁器, priority 暫存器使用三位來控制其行為:一位被用於選擇仲裁器工作模式,稱為 arb_mode;兩位被用於控制各輸入訊號的優先順序,稱為 arb_sel。

arm_sel 的取值和 req0 ~ req5 的優先順序如下。

arb_sel

優先順序(從高到低)

00b

req0, req1, req2, req3, req4, req5

01b

req0, req2, req3, req4, req1, req5

10b

req0, req3, req4, req1, req2, req5

11b

req0, req4,  req1,  req2,  req3, req5

注:req0 的優先順序永遠是最高的,req5 的優先順序用於是最低的。

當某個仲裁器的 arb_mode 被設為 0 時, 它的 arb_sel 位是不會自動變化的,此時這個仲裁器的 6 個輸入引腳的優先順序固定不變(當然,可以通過軟體修改 arb_sel 來改變它們的優先順序)。當 arb_mode 位被設為 1 時, arb_sel 會隨著「已經被服務的 reqx」(x 為 1 ~ 4)自動變化,變化順序如下。

已經被服務的reqx

arb_sel 的新值

req0/req5

維持不變

req1

01b

req2

10b

req3

11b

req4

00b

結合上面2個表可知:當 arb_mode 為 1 時, 某個 reqx(x 為 1 ~ 4)被服務之後,它的優先順序變為 req0 ~ req4 中的最低。

priority 暫存器中位[0:6]對應這 7 個仲裁器的 arb_mode 位(位[0]是 arb_mode0,依次類推),位[7:20]位對應這 7 個 仲裁器的 arb_sel ([7:8]是 arb_sel0,依次類推)

7、intpnd 暫存器(interrupt pending)

經過中斷優先順序仲裁器選出優先順序最高的中斷後,這個中斷在 intpnd 暫存器中的相應位被置 1 ,隨後,cpu將進入中斷模式處理它。

同一時間內,此暫存器只有一位被置 1; 在 isr 中,可以根據這個位確定是哪個中斷。清除中斷時,往這個位寫入 1。

8、intoffset 暫存器(interrupt offset)

這個暫存器被用來表示 intpnd 暫存器中那位被置 1 了, 即 intpnd 暫存器中位 [x] 為 1 時, intoffset 暫存器的值為 x(x 為 0 ~ 31)。

在清除 srcpnd、 intpnd 暫存器時, intoffset 暫存器被自動清除。

S3C2440中斷暫存器

s3c2440的中斷暫存器 1.中斷分兩大類 內部中斷和外部中斷。2.外部中斷。24個外部中斷占用gpf0 gpf7 eint0 eint7 gpg0 gpg15 eint8 eint23 用這些腳做中斷輸入,則必須配置引腳為中斷,並且不要上拉。具體參考datesheet資料手冊。暫存器 extin...

S3C2440中斷暫存器有關

1.中斷分兩大類 內部中斷和外部中斷。2.外部中斷。24個外部中斷占用gpf0 gpf7 eint0 eint7 gpg0 gpg15 eint8 eint23 用這些腳做中斷輸入,則必須配置引腳為中斷,並且不要上拉。具體參考datesheet資料手冊。暫存器 extint0 extint2 三個暫...

S3C2440的中斷暫存器

s3c2440的中斷暫存器 1.中斷分兩大類 內部中斷和外部中斷。2.外部中斷。24個外部中斷占用gpf0 gpf7 eint0 eint7 gpg0 gpg15 eint8 eint23 用這些腳做中斷輸入,則必須配置引腳為中斷,並且不要上拉。具體參考datesheet資料手冊。暫存器 extin...