ARM內(nèi)核的中斷技術(shù)
1 ARM7TDMI簡介
ARM7TDMI是一款經(jīng)典的通用32位微處理器,采用精簡指令系統(tǒng)(RISC)和流水線結(jié)構(gòu)。典型應(yīng)用如GPS、PDA、雙向?qū)ず魴C、移動電話、板卡間高速通信等。
ARM7TDMI定義有7種工作模式,本文涉及到的有:用戶模式,程序正常運行時的模式;快中斷模式,處理器響應(yīng)快中斷而進入的模式;中斷模式,處理響應(yīng)常規(guī)中斷而進入的模式;監(jiān)督模式,操作系統(tǒng)的保護模式。處理器響應(yīng)軟件中斷時即進入監(jiān)督模式。下面重點介紹ARM7TDMI的中斷特性。主要特性如表1所列。
ARM7TDMI具有常規(guī)中斷(IRQ)、快中斷(FIQ)和軟件中斷(SoftWareInterrupt)三種中方式。常規(guī)中斷和快中斷都是硬件中斷。
快中斷是為支持數(shù)據(jù)傳輸或快速數(shù)據(jù)通道而設(shè)計的,為快速處理快中斷。①快中斷被設(shè)為最高中斷優(yōu)先級;②在快中斷模式增設(shè)了7個私有工作寄存器,從而避免了由于主工作寄存器數(shù)據(jù)的保存和恢復(fù)而帶來了額外開銷;③快中斷處理程序處于異常向量表的最后位置,因此可緊接異常向量表書寫快中斷處理程序,而不必進行程序跳轉(zhuǎn)操作,避免了刷新指令流水線和高速緩存。
軟件中斷是一種由用戶設(shè)置的同步中斷,由程序指令產(chǎn)生,不像硬件中斷那樣由外部事件觸發(fā)。軟件中斷允許運行在用戶模式的程序進入監(jiān)督模式,并運行監(jiān)督態(tài)下的函數(shù)。在ARM7TDMI的硬件調(diào)試系統(tǒng)中,應(yīng)用程序可利用軟件中斷來申請半自主(semihosting)式操作,例如,打開主機中的一個文件、向調(diào)試通道發(fā)送一個字符等等(這些操作必須依賴主機中C程序庫才能運行,因此被稱為半自主式的)。利用軟件中斷機制,可以直觀和高效地仿真調(diào)試應(yīng)用程序。另外,軟件中斷也可用于一般性的程序控制。
2 響應(yīng)中斷和中斷返回
(1)當中斷產(chǎn)生時,ARM7TDMI將執(zhí)行的操作
①把當前程序狀態(tài)寄存器(CPSR)的內(nèi)容拷貝到相應(yīng)的備份程序狀態(tài)寄存器(SPSR)。當前工作模式、中斷屏蔽位和狀態(tài)標志被保存下來。
②轉(zhuǎn)入相應(yīng)的模式,并關(guān)閉常規(guī)中斷。如響應(yīng)快中斷,則同時關(guān)閉快中斷。
③把程序計數(shù)器(pc)的值減4后,存入相應(yīng)的連接寄存器(1r)。
④將程序計數(shù)器指向相應(yīng)的中斷向量。
(2)由中斷返回時,ARM7TDMI將完成的操作
①將備份程序狀態(tài)寄存器的內(nèi)容拷貝到當前程序狀態(tài)寄存器,恢復(fù)中斷前的狀態(tài)。
②清除相應(yīng)禁止中斷位(如果已設(shè)置的話)。
③把連接寄存器的值拷貝到程序計數(shù)器,繼續(xù)運行原程序。
(3)返回地址的計算
ARM7TDMI采用流水線結(jié)構(gòu):當一條指令被執(zhí)行時,下一條指令正被譯碼,而第三條指令被從內(nèi)存中取出。當程序計數(shù)器未更新的,pc指向從內(nèi)存中取出的指令,(pc-4)指向當前指令的一條指令。
處理器響應(yīng)軟件中斷時,由于軟件中斷由指令自身產(chǎn)生,程序計數(shù)器還沒有更新,(pc-4)正好指向當前指令的下一條指令。因此,只要在中斷處理程序最后加入MOVSpc,lr把連接寄存器的值賦給程序計數(shù)器即可。
ARM7TDMI總是在一條指令執(zhí)行完畢后,才去檢查是否有硬件中斷信號和中斷屏蔽狀態(tài)。此時,程序計數(shù)器已經(jīng)更新,(pc-4)指向當前指令的下兩條指令。因此要先把連接寄存器的內(nèi)容減去4(指向pc-8)后,再賦給程序計數(shù)器。要添加的代碼是SUBSpc,lr #4
評論