當前位置:編程學習大全網 - 編程語言 - ARM處理器的中斷模式

ARM處理器的中斷模式

在ARM處理器7種運行模式中,除用戶模式外,其余6種模式稱為非用戶模式或特權模式,其中除用戶模式和系統模式以外的5種又稱為異常模式。

在非特權模式(用戶模式)下,不能對CPSR寄存器設置,只能讀取CPSR的值。ARM匯編進入默認模式的是管理模式。

CPSR的控制位***有8位,也就是最後8位。M[7]為中斷禁止位I,M[6]為快速中斷禁止位F,M[5]為處理器的運行狀態位T,M[4:0]為運行位。

運行模式位M[4:0]的含義

M[4:0]

微處理器模式

可訪問的寄存器

10000 (0)

用戶(Usr)

PC,CPSR,R0-R14

10001 (1)

快速中斷(Fiq)

PC,CPSR,R0-R7,SPSR_fiq,R8_fiq-R14_fiq

10010 (2)

外部中斷(Irq)

PC,CPSR,R0-R12,SPSR_irq,R13_irq,R14_irq

10011 (3)

管理(Svc)

PC,CPSR,R0-R12,SPSR_svc,R13_svc,R14_svc

10111 (7)

數據訪問中止(Abt)

PC,CPSR,R0-R12,SPSR_abt,R13_abt,R14_abt

11011 (B)

未定義(Und)

PC,CPSR,R0-R12,SPSR_und,R13_und,R14_und

11111 (F)

系統(Sys)

PC,CPSR,R0-R14

S3C2440壹***有60個中斷源,其中有15個子中斷源,它們與SUBSRCPND寄存器中的每壹位相對應,其他45個中斷源與SRCPND中的每壹位相對應。要註意的是EINT4~7對應的是同壹位SRCPND[4],而EINT8~23對應的也是SRCPND[5]壹位。

S3C2440的中斷寄存器:

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

2.外部中斷。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時,此次中斷無效。

3.內部中斷。內部中斷有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時自動清除。

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。

  • 上一篇:優秀***產黨員離休幹部田守誠先進事跡材料
  • 下一篇:iappv5免費到底是什麽?
  • copyright 2024編程學習大全網