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.中斷過程。
a 如果是不帶子中斷的內部中斷:發生後srcpnd相應位置1,如果沒有被intmsk遮蔽,那麼等待進一步處理。
b 如果是帶子中斷的內部中斷:發生後subsrcpnd相應位置1,如果沒有被intsubmsk遮蔽,那麼srcpnd相應位置1,等待進一步處理,幾個subsrcpnd可能對應同乙個srcpnd,對應表如下:
srcpndsubsrcpnd
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,對應表如下:
srcpndeintpend
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處理。
5.中斷的開啟。
a.如果是不帶子中斷的內部中斷,只需設定intmsk,讓它不遮蔽中斷就可以了。
b 如果是帶子中斷的內部中斷,需設定intsubmsk和intmsk,讓它門不遮蔽中斷就可以了。
c 如果是外部中斷,對於eint8-23需要設定eintmask和intmsk。對於eint0-eint3只需設定intmsk。
6.中斷的清除。
a.如果是不帶子中斷的內部中斷,只需清除srcpnd,注意清除需位置1。
b 如果是帶子中斷的內部中斷,需清除srcpnd和subsrcpnd,注意先清除subsrcpnd,再清除srcpnd。因為,如果你先清除srcpnd的話,然後在清除subsrcpnd的過程中,srcpnd會以為又有中斷發生,又會置1。也就是說一次中斷會響應兩次。所以必須先掐斷源頭。
c 如果是外部中斷,對於eint8-23需要清除eintpend和srcpnd(同樣注意順序)。對於eint0-eint3只需清除srcpnd。
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...
S3C2440 中斷控制暫存器
1 subsrcpnd 暫存器 sub source pending subsrcpnd 暫存器被用來標識 int rxd0 int txd0 等中斷 s3c2410中這類中斷有 11 個,而 s3c2440 中有 15 個 是否已經發生,每位對應乙個中斷。當這些中斷發生並且沒有被 intsubms...