1. 程式人生 > >s5pv210中斷處理過程

s5pv210中斷處理過程

異常處理 中斷

一、異常處理的兩個過程

第一,異常向量表的跳轉

第二,進入異常處理程序中

二、異常處理中的第一個過程

1、當發生異常時,CPU會自動跳轉PC到異常向量表對應的地址處,軟件需要處理的就是將這個異常處理的代碼首地址填入這個異常向量地址處。

2、中斷處理要先在匯編文件中進行,主要的過程是保護現場和恢復現場

保護現場:主要是設置IRQ棧、保存LR和保存r0-r12,中斷返回時關鍵的就是對於PC和cpsr兩個寄存器的保存。中斷返回地址保存在LR中,而cpsr自動保存在(IRQ模式下的)spsr中。

恢復現場:主要就是恢復r0-r12、PC和cpsr等寄存器。

三、異常處理的第二個過程

1、找到具體哪個中斷:對於s5pv210中斷體系采用4個寄存器,每個32位,每位對應一個中斷源,當中斷產生時,會依次去查詢4個中斷源寄存器,當某一位被置1,則是發生了對應的中斷,即找到了中斷編號。

2、找到對應的isr:210提供了很多寄存器來解決中斷源對應isr的尋找問題。當中斷發生時,硬件會自動將相應的isr推入到對應的寄存器中,軟件只要去這個寄存器中執行函數即可。

四、整個中斷的工作分為兩部分:

第一部分是我們為中斷響應而做的預備工作:

1、初始化中斷控制器

2、綁定寫好的isr到中斷控制器

3、相應中斷的所有條件使能

第二部分是當硬件產生中斷後如何自動執行isr:

1、經過異常向量表跳轉入IRQ/FIQ的入口

2、做中斷現場保護(在start.S中),然後跳入isr_handler

3、在isr_handler中先去搞清楚是哪個VIC中斷了,然後直接去這個VIC的ADDR寄存器中取isr來執行即可。

4、isr執行完,中斷現場恢復,直接返回繼續做常規任務。

五、irq和fiq的區別

210中支持兩種中斷,irq和fiq。irq是普通中斷,fiq是快速中斷。快速中斷提供一種更快響應處理的中斷通道,用於對實時性要求很高的中斷源。fiq在CPU設計時預先提供了一些機制保證fiq可以被快速處理,從而保證實時性。fiq的限制就是只能有一個中斷源被設置為fiq,其他都是irq。

對於CPU如何保證fiq比irq快,有2個原因:

第一,fiq模式有專用的r8-r12,因此在fiq的isr中可以直接使用r8-r12而不用保存,這就能節省時間;

第二,異常向量表中fiq是最後一個異常向量入口。因此fiq的isr不需要跳轉,可以直接寫在原地,這樣就比其他異常少跳轉一次,省了些時間。


本文出自 “嵌入式” 博客,謝絕轉載!

s5pv210中斷處理過程