S3C2440一共有60個中斷源,其中有15個子中斷源,它們與SUBSRCPND寄存器中的每一位相對應,其他45個中斷源與SRCPND中的每一位相對應。要注意的是EINT4~7對應的是同一位SRCPND[4],而EINT8~23對應的也是SRCPND[5]一位。
1 S3C2440的中斷寄存器
中斷分兩大類:外部中斷和內部中斷。
1.1 外部中斷寄存器
24個外部中斷占用GPF0-GPF7(EINT0-EINT7),GPG0-GPG15(EINT8-EINT23)。用這些腳做中斷輸入,則必須配置引腳為中斷,並且不要上拉。具體可參考datesheet數據手冊。
寄存器:
EXTINT0-EXTINT2:分別設置EINT0—EINT7、EINT8—EINT15、EINT16—EINT23的觸發方式(高電平觸發、低電平觸發、下降沿觸發、上升沿觸發)。
EINTFLT0-EINTFLT3:控制濾波時鐘和濾波寬度。
EINTPEND:這個是中斷掛起寄存器,清除時要寫1,後面還有幾個是寫1清除。當一個外部中斷(EINT4-EINT23)發生後,那麼相應的位會被置1。為什麼沒有EINT0-EINT3,因為它們分別由SRCPND寄存器的後4位控制。
EINTMASK:這個簡單,是屏蔽中斷用的,也就是說位為1時,此次中斷無效。
1.2 內部中斷寄存器
內部中斷有8個寄存器。
寄存器:
SUBSRCPND:當一個中斷發生後,那麼相應的位會被置1,表示一個中斷發生了。
INTSUBMSK:與上一個是一樣的,中斷屏蔽寄存器。
SRCPND:當一個中斷發生後,那麼相應的位會被置1,表示一個或一類中斷發生了。
INTMSK:用來屏蔽SRCPND寄存器所標識的中斷。但只能屏蔽IRQ中斷,不能屏蔽FIQ中斷。
INTMOD:當INTMOD中某位被設置為1時,它對應的中斷被設為FIQ,CPU將進入快速中斷模式。
PRIORITY:用於設置IRQ中斷的優先級。具體使用方法可參考芯片手冊。
INTPND:中斷優先級仲裁器選出優先級最高中斷後,這個中斷在INTPND寄存器中的相應位被置1,隨後,CPU進入中斷模式處理它。同一時間內,此寄存器只有一位被置1。
INTOFFSET:用來表示INTPND寄存器中哪位被置1了,即記錄INTPND中位[x]為1的位x的值。清除INTPND、SRCPND時自動清除。
1.3 各寄存器關系:
圖1 各中斷寄存器間的關系