S3C6410的中斷主要改進是. 增加中斷向量控制器,這樣在S3C2440里需要用軟體來跳轉的中斷處理機制,在S3C6410完全由硬體來跳轉。你只要把ISR地址是存在連續向量寄存器空間,而不是象S3C2440自行分配空間自行管理。 換句話說,在S3C2440下是由CPU觸發IRQ/FIQ異常,由異常
S3C6410的中斷主要改進是.
增加中斷向量控制器,這樣在S3C2440里需要用軟體來跳轉的中斷處理機制,在S3C6410完全由硬體來跳轉。你只要把ISR地址是存在連續向量寄存器空間,而不是象S3C2440自行分配空間自行管理。
換句話說,在S3C2440下是由CPU觸發IRQ/FIQ異常,由異常處理函數里再查找相關中斷寄存器來跳到指定的ISR,而可以全部由S3C6410的VIC硬體來自動處理。 這個大大簡化中斷處理編程。
另一個是外部中斷加入濾波電路,這樣原來需要軟體去毛刺的地方均可以採用硬體來進行濾波了,這樣大大簡化外部中斷處理。
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相應位。