TQ210——S5PV210中断体系
TQ210——S5PV210中斷體系
?
? ? ? 中斷是指 CPU 在執(zhí)行程序的過程中,遇到異常情況需要處理, CPU停 止當(dāng)前程序的運行,保存當(dāng)前程序運行處的必要參數(shù),轉(zhuǎn)去處理這些異常情況, 處理結(jié)束后再返回當(dāng)前程序的間斷處,繼續(xù)執(zhí)行原程序。
1、異常向量表
2、一級異常處理
#define pExceptionIRQ ( *((volatile unsigned long *)(0xD0037418)) ) pExceptionIRQ = (unsigned long)IRQ_handle; IRQ_handle: sub lr, lr, #4 // 保存現(xiàn)場 stmfdsp!, {r0-r12, lr} bl irq_handler // 跳轉(zhuǎn)到中斷處理函數(shù)ldmfd sp!, {r0-r12,pc}^ // 恢復(fù)現(xiàn)場3、VICX
? ? ? S5PV210共有4個VIC(Vectored Interrupt Controller,向量中斷控制器),以菊花鏈的方式互連共同支持了多達93個中斷源。
? ? ? 這些中斷源分別為系統(tǒng)DMA、定時器、外設(shè)、多媒體、音頻、安全等模塊提供中斷服務(wù)
? ? ? 中斷種類有IRQ和FIQ可選配,在中斷處理級別上都屬于二級。
? ? ? 菊鏈方式的4個TZIC和4個VIC是為了能支持93個中斷源。在可信域設(shè)計里,TZIC為安全中斷系統(tǒng)提供一個軟中斷。它提供nFIQ中斷的安全控制和在沒安全邊際的系統(tǒng)(vic)上,中斷控制器掩蓋中斷源。用后者來生成nIRQ信號。
? ? ? 菊鏈:一種沿總線傳輸信號的方法,其中設(shè)備串聯(lián),而信號則從一臺設(shè)備傳向下一臺設(shè)備。菊花鏈連接方法可根據(jù)設(shè)備在總線上的電氣地位分配其優(yōu)先級
4、寄存器
(1)IRQSTATUS 中斷狀態(tài)
(2)VICINTSELECT(中斷類型選擇:irq或者fiq)
如何保證FIQ具有最佳的中斷響應(yīng)速度?
<1>、FIQmode具有更多的banked register,因此進入FIQ的ISR后可以避免因保存寄存器而浪費的時間。
<2>、FIQ在異常向量表中處于末端,因此ISR可以不用跳轉(zhuǎn)到別處而直接在向量表末端開始ISR。
(3)VICINTENABLE/VICINTENCLEAR(中斷使能/失能設(shè)置)
? ? ? 中斷允許寄存器中,每個bit代表一個中斷源。向VICINTENABLE寄存器中相應(yīng)bit寫1可以使能該中斷(寫0無效,讀取時若該中斷允許則返回1,若未允許則返回0),而向VICINTENCLEAR寄存器相應(yīng)bit寫1可以禁止該中斷(寫0無效)。
在另一些CPU中,只有一個INTENABLE寄存器。寫1可以使能中斷,寫0則會禁止中斷。
(4)ISR相關(guān)
ISR如何設(shè)置:
S5PV210的中斷體系采用如下的ISR確定策略
<1>、將93個中斷源分為4組,每組的ISR組成一個數(shù)組,以中斷號為數(shù)組索引。
<2>、4組ISR數(shù)組的首地址分別存放在VICVECTADDR0~VICVECTADDR3中。
綁定ISR時,只需將用戶自己編寫的ISR地址放入ISR數(shù)組中以中斷號為索引的位置即可
ISR如何獲得:
當(dāng)中斷發(fā)生,并且在一級異常向量表中跳轉(zhuǎn)入IRQ后,首先要保護現(xiàn)場,然后轉(zhuǎn)入相應(yīng)的ISR執(zhí)行。
獲取相應(yīng)的ISR時只需讀取VICADDRESS寄存器即可。因為S5PV210的中斷系統(tǒng)會自動將當(dāng)前發(fā)生的中斷對應(yīng)的ISR從ICVECTADDRx中推入VICADDRESSx中。這省去了我們使用查詢方式確認中斷號的麻煩,提高了IRQ的響應(yīng)速度。
?
5、中斷處理
中斷處理過程
<1>、硬件事件發(fā)生,SRCPENDING位響應(yīng)掛起
<2>、根據(jù)中斷允許設(shè)置決定是否產(chǎn)生中斷掛起INTPENDING,并根據(jù)INTSELECT決定中斷種類為IRQ還是FIQ
<3>、響應(yīng)中斷,CPU根據(jù)一級異常向量表自動跳轉(zhuǎn)到IRQ或FIQ異常入口
<4>、對于IRQ,在二級中斷表中,根據(jù)INTNUM進行判斷,跳轉(zhuǎn)入相應(yīng)的ISR執(zhí)行
<5>、中斷返回,本次中斷事件結(jié)束
?
如何使用中斷:
<1>、全局性設(shè)置。包括設(shè)置一級異常向量表、清理所有中斷掛起、禁止所有中斷源等。
<2>、針對要使用的中斷進行具體設(shè)置。包括設(shè)置中斷種類為IRQ/FIQ,中斷允許、優(yōu)先級等。
<3>、綁定中斷處理程序。以便在二級中斷處理時能夠跳轉(zhuǎn)到正確的ISR。?
<4>、設(shè)置中斷允許位以允許中斷發(fā)生。
? ? ? 不同平臺中斷處理差異:有些平臺是置1允許中斷,而另一些平臺是清0允許中斷;二級中斷時獲取中斷號(意味著獲取中斷ISR)的方式不同。這些不同會影響平臺的中斷響應(yīng)速度。
?
6、外部中斷
? ? ? 外部中斷意為來自(SoC)外部的中斷,是相對于內(nèi)部中斷(來自SoC內(nèi)部,即各種內(nèi)部外設(shè)產(chǎn)生的中斷,譬如定時器中斷)來說的。
? ? ? S5PV210共支持32個通道的外部中斷,每個外部中斷有對應(yīng)的GPIO接收來自外部的中斷信號。中斷觸發(fā)方式有電平(高、低)、邊沿(上升沿、下降沿、Both)等5種方式可選配。? ? ??
(1)EXT_INT_0_CON外部中斷控制寄存器
? ? ? EXT_INT_x_CON(x= 0~3)用來配置32個外部中斷通道的觸發(fā)模式。
(2)EXT_INT_0_MASK外部中斷允許/禁止
? ? ? EXT_INT_x_MASK(x=0~3)用來使能/禁止相應(yīng)的外部中斷通道
(3)EXT_INT_0_PEND外部中斷掛起寄存器
? ? ? ? ? ?
? ? ? EXT_INT_xPEND(x=0~3)用來標(biāo)識外部中斷掛起。向相應(yīng)bit寫1可以清除中斷掛起
?
6、外部中斷設(shè)置流程
<1>、全局的中斷初始化
<2>、設(shè)置相應(yīng)的GPIO為XEINTx
<3>、綁定中斷處理程序
<4>、設(shè)置EXT_INT_x_CON以配置觸發(fā)方式
<5>、寫EXT_INT_x_PEND清中斷
<6>、設(shè)置EXT_INT_x_MASK以使能相應(yīng)通道
<7>、最后使能相應(yīng)外部中斷通道
分析:
1、中斷掛起產(chǎn)生,CPU自動跳轉(zhuǎn)到一級異常向量表中IRQ入口地址中。
2、由IRQSTATUS和VICADDRESS機制得到相應(yīng)ISR地址并進入執(zhí)行。
3、ISR內(nèi)部內(nèi)容應(yīng)該包含三部分:
(1)、有效isr,處理按鍵對應(yīng)的任務(wù)
(2)、向VICxADDR寫入任意值清中斷
(3)、向EXT_INT_x_PEND寫1清除相應(yīng)中斷?
總結(jié)
以上是生活随笔為你收集整理的TQ210——S5PV210中断体系的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VS2015 vc++ 项目出现new.
- 下一篇: i3wm 配置