ARM中斷暫存器詳解

2021-05-21 15:04:59 字數 3021 閱讀 4304

s3c2440的中斷暫存器:

1.中斷分兩大類:內部中斷和外部中斷。

2.外部中斷。24個外部中斷占用gpf0-gpf7(eint0-eint7),gpg0-gpg15(eint8-eint23)。用這些腳做中斷輸入,則必須配置引腳為中斷,並且不要上拉。具體參考datesheet資料手冊。

暫存器:extint0-extint2:三個暫存器設定eint0-eint23的觸發方式。

eintflt0-eintflt3:控制濾波時鐘和濾波寬度。

eintpend:這個是中斷掛起暫存器,清除時要寫1,後面還有幾個是寫1清除。當乙個外部中斷(eint4-eint23)發生後,那麼相應的位會被置1。為什麼沒有eint0-eint3,呵呵,看看srcpnd就知道了,裡面沒有eint4-eint23的位子,所以有了eintpend。

eintmask:這個簡單,是遮蔽中斷用的,也就是說位為1時,此次中斷無效。

3.內部中斷。內部中斷有8個暫存器,下面逐一來看。

暫存器:subsrcpnd:當乙個中斷發生後,那麼相應的位會被置1,表示乙個中斷發生了。

intsubmsk:與上乙個是一夥的,中斷遮蔽暫存器,具體遮蔽什麼,自己看手冊去吧。

intmod:中斷的方式。乙個中斷可以是普通中斷,也可以是快中斷,在這裡設定,但只能有乙個快中斷。

priority :優先順序暫存器,不說了。

srcpnd :當乙個中斷發生後,那麼相應的位會被置1,表示乙個或一類中斷發生了。

intmsk :中斷遮蔽暫存器。

intpnd :中斷發生後,srcpnd中會有位置1,可能好幾個(因為同時可能發生幾個中斷),這些中斷會由優先順序仲裁器選出乙個最緊迫的,然後吧把intpnd中相應位置1,所以同一時間只有一位是1。也就是說前面的暫存器置1是表示發生了,只有intpnd置1,cpu才會處理。

intoffset :用來表示intpnd中哪一位置1了,好讓你查詢,普通中斷跳轉時查詢用。清除intpnd、srcpnd時自動清除。

4.各暫存器關係:

下面看圖說明:

5.中斷過程。

a 如果是不帶子中斷的內部中斷:發生後srcpnd相應位置1,如果沒有被intmsk遮蔽,那麼等待進一步處理。

b 如果是帶子中斷的內部中斷:發生後subsrcpnd相應位置1,如果沒有被intsubmsk遮蔽,那麼srcpnd相應位置1,等待進一步處理,幾個subsrcpnd可能對應同乙個srcpnd,對應表如下:

srcpnd                        subsrcpnd

int_uart0                    int_rxd0,int_txd0,int_err0

int_uart1                    int_rxd1,int_txd1,int_err1

int_uart2                    int_rxd2,int_txd2,int_err2

int_adc                        int_adc_s, int_tc

int_cam                        int_cam_c, int_cam_p

int_wdt_ac97             int_wdt, int_ac97

c 如果是外部中斷:eint0-eint3發生後srcpnd相應位置1,如果沒有被intmsk遮蔽,那麼等待進一步處理。eint4-eint23發生後eintpend相應位置1,如果沒有被eintmask遮蔽,那麼srcpnd相應位eint4-7 或eint8-23置1,如果沒有被intmsk遮蔽,等待進一步處理,幾個eintpend對應同乙個srcpnd,對應表如下:

srcpnd                        eintpend

eint0                             eint0

eint1                             eint1

eint2                             eint2

eint3                             eint3

eint4-7                          eint4-eint4

eint8-23                        eint8-eint23

三種中斷都等待進一步處理了。接下來從srcpnd往下看,看intmsk。如果中斷被遮蔽了,就不用說了(注意:快中斷也能被遮蔽)。如果沒有被遮蔽,那麼會進一步到intmod。如果是快中斷,那麼直接出來,進入fiq(即cpu進入快中斷模式處理)。如果是普通中斷,那麼srcpnd可以有多為置1(fiq只能有乙個),這時就會經過priority選出乙個優先順序高的,然後把根據選出的中斷把intpnd相應位置1(注意:只能選出乙個),進入irq,讓cpu處理。

6.中斷的開啟。

a.如果是不帶子中斷的內部中斷,只需設定intmsk,讓它不遮蔽中斷就可以了。

b 如果是帶子中斷的內部中斷,需設定intsubmsk和intmsk,讓它門不遮蔽中斷就可以了。

c 如果是外部中斷,對於eint8-23需要設定eintmask和intmsk。對於eint0-eint3只需設定intmsk。

7.中斷的清除。

a.如果是不帶子中斷的內部中斷,只需清除srcpnd,注意清除需位置1。

b 如果是帶子中斷的內部中斷,需清除srcpnd和subsrcpnd,注意先清除subsrcpnd,再清除srcpnd。因為,如果你先清除srcpnd的話,然後在清除subsrcpnd的過程中,srcpnd會以為又有中斷發生,又會置1。也就是說一次中斷會響應兩次。所以必須先掐斷源頭。

c 如果是外部中斷,對於eint8-23需要清除eintpend和srcpnd(同樣注意順序)。對於eint0-eint3只需清除srcpnd。

DSP 中斷暫存器

幾乎所有的mcu都不允許mov指令修改pc值,這是乙個常識。2.中斷服務表指標暫存器istp interrupt servicetable pointer 用於確定中斷服務程式在中斷服務表中的位址。istp中的字段istb確定ist的位址的基值,另一欄位hpeint確定特定的中斷,並給出這一特定中斷...

S3C2440之I O暫存器和中斷暫存器

i o暫存器 一.埠暫存器組 gpacon 0 輸出 1 初始引腳狀態 gpxcon 00 輸入,01 輸出,10 初始引腳狀態,11 保留 gpxdat gpxup 0 允許上拉,1 禁止上拉 一般情況下不需要設定gpxup 二,外部中斷控制暫存器組 extiin0 7 0 000 低電平,001...

S3C2440的中斷暫存器

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