ARM微處理器的編程模型之:異常中斷處理
當數據訪問中止異常發生時,寄存器的值將根據以下規則進行修改。
① 返回地址寄存器r14的值只與發生數據異常的指令地址有關,與PC值無關。
② 如果指令中沒有指定基址寄存器回寫,則基址寄存器的值不變。
③ 如果指令中指定了基址寄存器回寫,則寄存器的值和具體芯片的Abort Models有關,由芯片的生產商指定。
④ 如果指令只加載一個通用寄存器的值,則通用寄存器的值不變。
⑤ 如果是批量加載指令,則寄存器中的值是不可預知的值。
⑥ 如果指令加載協處理器寄存器的值,則被加載寄存器的值不可預知。
6.外部中斷IRQ
當處理器的外部中斷請求引腳有效,而且CPSR寄存器的I控制位被清除時,處理器產生外部中斷IRQ異常。系統中各外部設備通常通過該異常中斷請求處理器服務。
當外部中斷IRQ發生時,處理器執行下列偽操作。
r14_irq = address of next instruction to be executed + 4
SPSR_irq = CPSR
CPSR[4∶0] = 0b10010 /*進入特權模式*/
CPSR[5] = 0 /*處理器進入ARM狀態*/
/*CPSR[6]保持不變*/
CPSR[7] = 1 /*禁止外設中斷*/
If high vectors configured then
PC = 0xffff0018
Else
PC = 0x00000018
7.快速中斷FIQ
當處理器的快速中斷請求引腳有效且CPSR寄存器的F控制位被清除時,處理器產生快速中斷請求FIQ異常。
當快速中斷異常發生時,處理器執行下列偽操作。
r14_fiq = address of next instruction to be executed + 4
SPSR_fiq = CPSR
CPSR[4∶0] = 0b10001 /*進入FIQ模式*/
CPSR[5] = 0
CPSR[6] = 1
CPSR[7] = 1
If high vectors configured then
PC= 0xffff001c
Else
PC = 0x0000001c
3.4.2 異常優先級
每一種異常按表3.5中設置的優先級得到處理。
表3.5 異常優先級
優 先 級 | 異 常 |
最高 1 | |
2 | 數據中止 |
3 | 快速中斷請求 |
4 | 中斷請求 |
5 | 預取指令異常 |
6 | 軟件中斷 |
最低 7 | 未定義指令 |
異常可以同時發生,處理器按表3.5的優先級順序處理異常。例如,復位異常的優先級最高,處理器上電時發生復位異常。所以當產生復位時,它將優先于其他異常得到處理。同樣,當一個數據訪問中止異常發生時,它將優先于除復位異常外的其他所有異常。
優先級最低的2種異常是軟件中斷和未定義指令異常。因為正在執行的指令不可能既是一條SWI指令,又是一條未定義指令,所以軟件中斷異常SWI和未定義指令異享有相同的優先級。
3.4.3 處理器模式和異常
每一種異常都會導致內核進入一種特定的模式。表3.6顯示了ARM處理器異常及其對應的模式。此外,也可以通過編程改變CPSR,進入任何一種ARM處理器模式。
注意 | 用戶和系統模式是僅有的不可通過異常進入的兩種模式,也就是說,要進入這兩種模式,必須通過編程改變CPSR。 |
表3.6 ARM處理器異常及其對應模式
異 常 | 模 式 | 用 途 |
快速中斷請求 | FIQ | 進行快速中斷請求處理 |
外部中斷請求 | IRQ | 進行外部中斷請求處理 |
SWI | SVC | 進行操作系統的高級處理 |
復位 | SVC | 進行操作系統的高級處理 |
預取指令中止異常 | ABORT | 虛存和存儲器保護 |
數據中止異常 | ABORT | 虛存和存儲器保護 |
未定義指令 | Undefined | 軟件模擬硬件協處理器 |
評論