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,表示乙個中斷發生了。
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。
本文詳細分析了s3c2440的中斷暫存器,對arm初學者有一定的幫助。
S3C2440中斷暫存器
s3c2440的中斷暫存器 1.中斷分兩大類 內部中斷和外部中斷。2.外部中斷。24個外部中斷占用gpf0 gpf7 eint0 eint7 gpg0 gpg15 eint8 eint23 用這些腳做中斷輸入,則必須配置引腳為中斷,並且不要上拉。具體參考datesheet資料手冊。暫存器 extin...
S3C2440之I O暫存器和中斷暫存器
i o暫存器 一.埠暫存器組 gpacon 0 輸出 1 初始引腳狀態 gpxcon 00 輸入,01 輸出,10 初始引腳狀態,11 保留 gpxdat gpxup 0 允許上拉,1 禁止上拉 一般情況下不需要設定gpxup 二,外部中斷控制暫存器組 extiin0 7 0 000 低電平,001...
S3C2440中斷暫存器有關
1.中斷分兩大類 內部中斷和外部中斷。2.外部中斷。24個外部中斷占用gpf0 gpf7 eint0 eint7 gpg0 gpg15 eint8 eint23 用這些腳做中斷輸入,則必須配置引腳為中斷,並且不要上拉。具體參考datesheet資料手冊。暫存器 extint0 extint2 三個暫...