s3c6410中斷處理

Andrew Huang [email protected] 轉載請註明作者及聯絡方式
一.中斷的場景模擬
----------------------------------------------------------------------------
中斷(Interrupt)是最常用的硬件通知軟件的機制。中斷的優點相對另一種機制輪詢(Polling)的缺點而言,這兩種的機制我們考慮如下大家比較熟悉的場景.
以學生上晚自習爲例,老師這裏也坐在講臺上備課,改作業,試卷。其中不時會有學生舉手來示例老師下來輔導。這個場境一般中學生都經歷過。
這裏的老師相當是CPU,學生相當是外設。老師下來的輔導相當於CPU處理外設的請求。老師輔導的策略有兩種辦法。一種是老師改一段時間的卷子,然後下去查看一下學生是否有問題要輔導。另外一種就是學生有問題主動舉手來請老師下來輔導。
第一種策略稱爲輪詢.它的問題導致老師的工作效率低下。因爲每次老師停下手頭事去查看學生情況,但是可能學生未必有問題提出,這樣浪費老師大量時間。輪詢的優點是執行比較簡單。
第二種方法就是中斷,老師在講臺上全速修改試卷或備課。當學員有問題再舉手示意請老師下來輔助。中斷的優點是外設與CPU都能用較高速度運行。缺點就是執行起來動作比較複雜。
這裏有幾個概念.
在中斷活動中,學生相當於外設,也稱爲中斷源(interrupt source)。學生的問題五花八門。因此每一個問題我們會編上號稱爲中斷號(interrupt number),在嵌入式編程裏,中斷號是一個無符號整數,每一箇中斷號代表一個固定的問題。
如果同時有多個學生請求輔導,則按老師按一定的規則來輔導,通常是由近至遠。這種處理先後順序稱爲中斷優先級(interrupte PRIORITY)。優先級軟件是可以調整的。
如果某一些學員優先級很高,比如他可以用同時用聲音來呼叫老師。這種有較高的優先級中斷稱爲快速中斷請求(FIQ ,Fast Interrupte Request),其餘的中斷稱爲中斷請求 (IRQ ,Interrupte Request).
在同一時刻,只有一箇中斷能被設爲FIQ,否則CPU就將會無法處理,就象一個教室裏同時有兩個大嗓門在同喊將會產生混亂。
學生通知老師的方式稱爲中斷信號(Interrupte signal).這都是事先約定,在嵌入式CPU裏,一般兩類中斷信號,一種電平觸發信號,一種是邊緣觸發信號.
以低電平觸發信號爲例,中斷腳平時維持高電平狀態,一但有中斷產生,會產生一段時間的低電平。這樣CPU就知道外面來中斷了。
邊緣觸發的中斷,是指當中斷腳平時維持高電平,有中斷產生時,電平由高電平切換到低電平,在切換時CPU就知道來中斷了,由低電平切換到高電平的觸發,稱爲上升沿觸發,由高電平切換到低電平的觸發稱爲下降沿觸發
老師的腦海鍾對不同問題有對應的輔導方法, 我們稱爲這種輔導方法稱爲 ISR(Interrupte Service Routing),它完全是軟件實現的。但是由老師來根據中斷號來調用。
因此嵌入式軟件裏的中斷處理,除了中斷初始化,主要工作就是編寫ISR.
在嵌入式的SOC的CPU裏,在CPU裏內部會帶一些設備模塊,它們產生的中斷稱爲內部中斷。因爲聯線比較固定,因此編程比較簡單。而且在物理上CPU分離的芯片產生的中斷,稱爲外部中斷,外部中斷可以聯接不同的中斷腳上,因此需要對中斷IO進行較複雜的配置。
輪詢模式是否一無是處?輪詢的優點是在重負荷的情況下,輪詢比中斷效率會高很多。比如一個教室很多學生不斷的問問題,這樣與其不斷被中斷,老師還不如起身在教室走動,隨機處理學生問題會高很多。
二.異常(Exception)
--------------------------------------------------------------------------

Exception(異常),計算機體系結構中,異常或者中斷是處理系統中突發事件的一種機制,幾乎所有的處理器都提供這種機制。異常主要是從處理器被動接受的角度出發的一種描述,指意外操作引起的異常。而中斷則帶有向處理器主動申請的意味。但這兩種情況具有一定的共性,都是請求處理器打斷正常的程序執行流程,進入特定程序的一種機制。

從結構來看,外部設備產生的中斷可以看成一種特殊的異常.除了中斷之外,還有ARM不少固定的異常.包括以下七種:

1. 復位(Reset)

當按下RESET鍵後,會產生一個復位異常,此時程序跳轉到復位異常處理程序處執行.當CPU重啓後.一般剛好跳到這個復位異常來

2. 未定義指令

當ARM的處理器或協處理器遇到不能處理的指令時,產生未定義指令異常,採用這個機制,可以通過軟件仿真擴展ARM或Thumb 指令集.

3. 軟件中斷(SWI)

硬件中斷是有固定的硬件產生的中斷,而軟中斷是指沒具體的硬件產生,是CPU虛擬出來的.該異常由程序執行彙編SWI產生.軟中斷的優點,

l 可用於用戶模式下的程序調用特權操作指令.Linux 系統調用就是使用這個異常來實現的.

l 有利用程序結構的優化.比如在Linux 驅動裏,硬件中斷不能長時間運行.但是很多軟件的長時間操作依賴的於中斷的調用.有時爲解決這個衝突,會在驅動設計兩級,從硬件存取用硬件中斷,而長時間操作用軟件中斷的模擬.

4. 指令預取中止

若處理預取的指令的地址不存在,或該地址不允許當前指令訪問,存儲器會向處理器發出中止信號,但當預取的指令被執行時,纔會產生指令預取中止的異常.比如用ADS把程序下載到開發板上0x8000地址上.就會產生Abort異常.

5. 數據中止

若處理器數據訪問數據的地址不存在,或該地址不允許當前指令訪問時,產生數據中止異常

6. IRQ

當外部設備在外部中斷腳產生中斷信號時.即觸發了IRQ中斷.這是外部設備使用最常用的一種手段.

在S3C24X0是一個集成的SOC,內部除了ARM模塊以外.還其它內部集成的模塊,如USB,RTC,等.這一些模塊在CPU內部也會有相應的中斷線連到ARM920T的內核上.但這一些管腳在CPU外部是不可見的,只能用於寄存器去控制.

還一些GPIO腳就充當外部中斷控制線,外部IC可以把自己中斷信號線連到相應的中斷腳上.當外部產中斷信號後,CPU就可以知道,外設有中斷髮來.

7. FIQ

快速中斷,類似於IRQ,但是具有較快響應速度.而且設爲FIQ的條件也比較嚴格,比如一次觸發只能有一個FIQ

一句話,中斷(IRQ,FIQ,SWI)是異常中的一個特例。當產生外部中斷時,大部分CPU會只產生一個異常。在異常處理程序裏軟件再去讀不同的中斷寄存器分析後來調用ISR。這裏ISR是由軟件來執行的。象S3C2440就是這樣機制。

在S3C6410中,還可以採用簡化的中斷處理流程。由CPU直接去調用中斷的ISR來處理。 這樣中斷處理軟件的編寫難度就大大下降了。

向量(vector)

異常處理函數或中斷處理函數的地址都會按中斷號的順離順序排列在一個連續的內存當中,從C語言的角度來看,可以看成是一個指針數組。數組又稱爲向量(Vector).

如果你熟悉S3C2440的中斷處理機制,可以發現S3C6410大大簡化的中斷編程處理。
相對於S3C2440詳細而豐富的關於中斷的解釋,S3C6410的dataSheet明顯是趕工之作,關於中斷只有短短的15頁,大量內容還是寄存器表格。
因此以下大部分我從S3C6410的測試程序和Application Note反推出來的。並且重新用ADS寫程序驗證了。
S3C6410的中斷主要改進是.
增加中斷向量控制器,這樣在S3C2440裏需要用軟件來跳轉的中斷處理機制,在S3C6410完全由硬件來跳轉。你只要把ISR地址是存在連續向量寄存器空間,而不是象S3C2440自行分配空間自行管理。
換句話說,在S3C2440下是由CPU觸發IRQ/FIQ異常,由異常處理函數裏再查找相關中斷寄存器來跳到指定的ISR,而可以全部由S3C6410的VIC硬件來自動處理。 這個大大簡化中斷處理編程。
另一個是外部中斷加入濾波電路,這樣原來需要軟件去毛刺的地方均可以採用硬件來進行濾波了,這樣大大簡化外部中斷處理。
S3C6410 中斷操作
--------------------------------------------------------------------
S3C6410 中斷號
64箇中斷按硬件分組分成VIC0, VIC1兩個組,各組由一個相應寄存器來處理。
中斷號爲0-31是VIC0組
中斷號爲32-63是VIC1組
S3C6410中斷操作很簡單。
打開中斷 VICxINTENABLE 
x爲0,1,0-31中斷使用VIC0INTENABLE,32-63中斷使用VIC1INTENABLE.以下各寄存器均同,不再重複.
對應位爲1表示這個中斷可用,如0號中斷有效,是VIC0INTENABLE的第0位爲1
關閉一箇中斷
向VICxINTENCLEAR對應位置1表示關閉這個中斷.
這個是三星比較明智的改進,不會讓開發感到比較迷惑的地方

設置中斷類型
設置某一箇中斷是IRQ還是FIQ,注意只有一箇中斷才能FIQ.設置對應位1表示設爲FIQ模式。

設置S3C6410的向量地址(ISR地址)
注意在S3C6410自已從了各用32個地址連續的寄存器然成兩個寄存器數組。首地址分別是0x71200100和0x71300100.你可以象指針數組一樣來操作它們,數組的下標就是中斷號。
這樣設置讓開發者大大簡單化ISR的向量組織。
設置中斷優先級
這個也採用用32*2寄存器形成兩個優先級數組。每一個寄存器對應優先級別,取值範圍在0-15之間.
中斷運行後指示
這個因爲了用VIC,現在省掉了S3C2440一大堆的SRCPND,INTPND,INTOFFSET,SUBSRCPND等寄存器。直接由VICxADDRESS來指示當前的ISR地址。
注意這個VICxADDRESS的寄存器,在S3C6410裏稱爲在System BUS.調用。這種方式不建議調用,因爲這種模式相當於S3C2440的用軟件進行ISR跳轉.
這三星的給的參考流程。
更爲簡單的調用方式.是VIC port 模式,是我強烈推薦的模式,它是系統產生中斷後,將由VIC直接去執行相應的ISR。這不僅上編程變成簡單,而且效率上更快,因爲它沒有訪問VICxADDRESS和在System BUS執行的時間
使用這種模式,只需要在啓動加上特定的代碼
外部中斷編程
----------------------------------------------------------
除INT_EINT0-INT_EINT4以外,全部中斷是由S3C6410內部的模塊觸發的。稱爲內部中斷

INT_EINT0-INT_EINT4是外部中斷,是由CPU外的外設來觸發的,它的觸發哪一個中斷取決外設聯接哪一個GPIO中斷腳。
象開發板的網絡控制器,按鈕等都是掛在某一些GPIO腳上。它們都是使用典形外部中斷.
外部中斷腳
S3C6410 分9組GPIO腳來充當外部中斷腳
第0組,共28腳.GPN0-GPN15 (16腳),GPL8-GPL14(7腳),GPM0-GPM4 (5腳)
第1組,由GPA0-GPA7,共8箇中斷腳
第2組,由GPC0-GPC0,共8箇中斷腳…

第8組,由GPP0-GPP14,共15箇中斷腳
第9組,由GPQ0-GPQ8,共9箇中斷腳
外部中斷號
第0組的第0腳到第3腳的設備將觸INT_EINT0=0中斷
第0組的第4-11腳將觸發INT_EINT1=1中斷
第0組的第12-19腳將觸發INT_EINT2=32中斷
第0組的第20-27腳將觸發INT_EINT3=33中斷
第1組-第9組所有設備只觸發INT_EINT4=53中斷
我們可以看到,每一個組都是多箇中斷腳共享一箇中斷號的。其中第0組比較常用。佔用了3箇中斷.
在ISR中,如何判斷是哪一個中斷腳的產生中斷?
不同的IO腳上多個設備產生同一個中斷,軟件如何知道是哪一個腳?
由External Interrupt Pending Register 來判斷
第0組由EINT0PEND來判斷
第1,2組由EINT12PEND來判斷
依此類推,EINT34PEND,EINT56PEND, 一直到EINT9PEND 來指示
外部中斷信號類型
這裏設置中斷產生何種信號纔會被捕獲。主要是五種,低電平,高電平,上升沿,下降沿或者兩者均可,
第0組用 EINT0CON0/EINT0CON1兩個寄存器來設定.
第1,2組採用 EINT12CON ,
第3,4組採用EINT34CON,
依此類推

臨時關閉外部中斷
EINTxMask是臨時性關閉中斷
爲1表示關閉某一箇中斷,爲表示打開0,一般只要需要使用中斷纔會打開。

EINT0MASK是第0組的使用

EINT12MASK是第1,2組的中斷掩碼

依次類推...

定義硬件濾波類型

對於一些波形不規整的外部中斷信號,可以通過濾波電路讓其變成規整,這樣會簡化軟件的編寫.

S3C6410有兩種濾波電路,一種延時濾波(如按鈕類中斷可以採用這一類型),一種是數字採樣濾波.第二種濾波電路還要設採樣寬度。

第0組的濾波用EINT0FLTCON0,EINT0FLTCON1, EINT0FLTCON2, EINT0FLTCON3配置.

FLTEN表示是否打開濾波功能,FLTSEL是設置濾波方式,EINTn表示數字濾波採校的寬度

第1,2組的濾波採用 EINT12FLTCON
第3,4組的濾波採用 EINT34FLTCON

第9組濾波 採用EINT9FLTCON
外部中斷編程
外部中斷除了中斷編程所有流程外,
一般額外配置相應的GPxCON配置成中斷腳。
還要配置濾波方式和中斷信號方式。
還要打開外部中斷掩碼
在ISR中,在最後除了要把VICxADDRESS清0外,還需要清除 VICxSOFTINTCLEAR相應位。
軟件中斷編程
-------------------------------------------------------------
在S3C6410有64個軟中斷(與硬件中斷對應),這一段描述是非常含糊。是同一硬件中斷可以用軟件觸發還是是,有一個完全對應的軟件中斷?這個需要軟件來驗證.
軟中斷除硬件中斷的所有流程還要加上如下兩條.
用VICxSOFTINT來觸發軟中斷
ISR退出時使用VICxSOFTINTCLEAR清除狀態
軟中斷編程流程
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章