<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          LPC中的中斷處理小結(jié)

          作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò) 收藏
          近來(lái)在LPC的中斷過(guò)程上看了點(diǎn)文獻(xiàn),作為一個(gè)初學(xué)者感覺(jué)這個(gè)內(nèi)容與其它的處理器還是有很大的區(qū)別,比如說(shuō)三星的S3C4510B,兩者在中斷的處理上理念是完全不同的,個(gè)人感覺(jué)LPC的要難一些,很多地方感覺(jué)上是在和ARM的規(guī)范打擦邊球,下面具體說(shuō)一下相關(guān)內(nèi)容。
          基礎(chǔ)知識(shí):LPC2294的EXT中斷分為了三類,包括FIQ,Vectored IRQ,non-- Vectored IRQ,其中,以FIQ的優(yōu)先級(jí)最高,而以non-- Vectored IRQ的優(yōu)先級(jí)最低,系統(tǒng)一共提供了27個(gè)中斷源,并且給這27個(gè)中斷源進(jìn)行了固定的編號(hào),但是注意,這個(gè)編號(hào)和優(yōu)先級(jí)沒(méi)有任何的關(guān)系,并非是編號(hào)在前面的優(yōu)先級(jí)就越高,見(jiàn)下面說(shuō)明。
          關(guān)鍵內(nèi)容:兩套控制渠道,
          第一套:在ARM體系中,本來(lái)有SWI,F(xiàn)IQ,IRQ等這些中斷的定義,并且已經(jīng)定義了這些中斷的開(kāi)關(guān)控制位,就是在CPSR寄存器中,該寄存器包含了一個(gè)I位和一個(gè)F位,I位用于控制IRQ中斷的開(kāi)關(guān),F(xiàn)用于控制FIQ的開(kāi)關(guān),但是值得注意的是CPSR的讀取和修改在用戶模式下是不能完成的,必須要通過(guò)SWI指令進(jìn)入到特權(quán)模式下才可以進(jìn)行修改。
          第二套:在LPC的SFR(特殊功能寄存器)中,也提供了一套寄存器用于控制相應(yīng)的中斷的進(jìn)行,這組控制器叫做VIC寄存器(都以VIC開(kāi)頭),改組寄存器包括了所有的與中斷有關(guān)的設(shè)置,開(kāi)啟,分類等功能,僅僅是將外部中斷引腳對(duì)應(yīng)的部分功能分離出去,由EXT系列的寄存器來(lái)處理,因此,對(duì)這一個(gè)系列的寄存器的掌握是非常重要的!
          兩者間的關(guān)系:僅僅在第二套控制渠道下打開(kāi)FIQ,IRQ中斷是不夠的,如果ARM內(nèi)核沒(méi)有開(kāi)中斷的話,整個(gè)系統(tǒng)就不會(huì)有中斷產(chǎn)生,因此,常見(jiàn)的做法是這樣:先將第二套渠道的控制內(nèi)容處理好,然后通過(guò)SWI軟件中斷指令,將ARM處理器的模式切換為特權(quán)模式,在特權(quán)模式下,對(duì)CPSR進(jìn)行“讀出-修改-寫(xiě)回”的操作,將中斷打開(kāi),然后在返回到用戶模式。
          LPC的中斷的特殊性:FIQ的中斷和普通的ARM規(guī)定是沒(méi)有任何區(qū)別的,即是在產(chǎn)生中斷時(shí),指令跳轉(zhuǎn)到0x0000001C處開(kāi)始執(zhí)行,這個(gè)是沒(méi)有什么疑問(wèn)的。但是IRQ的響應(yīng)過(guò)程就不同了,先看下面一段代碼,這個(gè)是寫(xiě)在程序的頭部的部分字節(jié):
          Reset
          LDR PC, ResetAddr ;// 0x00000000,Reset --->Supervisor Mode
          LDR PC, Und_Addr ;// 0x00000004,Undefined Instruction --->Undefined Mode
          LDR PC, SWI_Addr ;// 0x00000008,Software Interrupt --->Supervisor Mode
          LDR PC, PAbort_Addr ;// 0x0000000c,Abort(Prefetch) --->Abort Mode
          LDR PC, DAbort_Addr ;// 0x00000010,Abort(Data) --->Abort Mode
          DCD 0xB9205F80 ;// 0x00000014,Reserved --->
          LDR PC, [PC,#-0xFF0] ;// 0x00000018,IRQ --->IRQ Mode
          LDR PC, FIQ_Addr ;// 0x0000001c,F(xiàn)IQ
          指令為“LDR PC, [PC,#-0xFF0]”非常特殊,其并沒(méi)有跳轉(zhuǎn)到IRQ中斷程序的入口處,而是進(jìn)行了一個(gè)PC的運(yùn)算后賦值,這里就要說(shuō)明其緣由。在LPC系列中,IRQ的響應(yīng)過(guò)程,程序的入口地址并不是直接寫(xiě)在這條語(yǔ)句中,而是放在一個(gè)寄存器中,該寄存器是:VICVectAddr,其地址是0xFFFFF030,現(xiàn)在就很明白了,在執(zhí)行語(yǔ)句“LDR PC, [PC,#-0xFF0]”時(shí),PC的值已經(jīng)變?yōu)樵撜Z(yǔ)句的后面第二條語(yǔ)句的地址了,也就是0x00000020,而0x00000020-0xFF0時(shí),發(fā)生借位,其結(jié)果恰好為0xFFFFF030,也就是說(shuō),通過(guò)這個(gè)簡(jiǎn)單的運(yùn)算,使PC跳轉(zhuǎn)到了寄存器VICVectAddr中包含的值為地址的位置上,這樣就簡(jiǎn)單的完成了IRQ的跳轉(zhuǎn)。
          當(dāng)然,IRQ中斷源不止一個(gè),其中斷服務(wù)程序也不止一個(gè),這個(gè)寄存器的值是自動(dòng)更新的,另有一組寄存器VICVectAddr0~15(后面有數(shù)字)將IRQ的16個(gè)中斷源的地址分別放在對(duì)應(yīng)的位置上(優(yōu)先級(jí)等內(nèi)容有另外的寄存器來(lái)控制,這里不多說(shuō)),當(dāng)IRQ中斷發(fā)生時(shí),硬件自動(dòng)將對(duì)應(yīng)的VICVectAddr0~15中的某個(gè)對(duì)應(yīng)的地址傳給VICVectAddr寄存器,這個(gè)過(guò)程不用我們來(lái)編程實(shí)現(xiàn)。



          關(guān)鍵詞: LPC中斷處

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();