版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
MPC860的中斷處理技術(shù)研究摘要:
MPC860是網(wǎng)絡(luò)通信設(shè)備中應(yīng)用最廣的一款RISC嵌入式處理器。
本文介紹MPC860的中斷體系結(jié)果及中斷發(fā)生后服務(wù)程序的處理流程;以SMC1的接收中斷為例,闡述在設(shè)計操作系統(tǒng)管理的條件下,中斷初始化程序和中斷服務(wù)程序的編寫。關(guān)鍵詞:嵌入式處理器MPC860中斷體系結(jié)構(gòu)中斷處理技術(shù)引言Motorola公司推出的MPC860PowerQUICC是目前在通信領(lǐng)域應(yīng)用得非常廣泛的一款嵌入式處理器,被譽為MC68360PowerQUICC在網(wǎng)絡(luò)和數(shù)據(jù)通信領(lǐng)域的新一代產(chǎn)品。
與MC68360相比,MPC860PowerQUICC在各方面的性能,包括器件的適應(yīng)性、外部擴展能力和芯片集成度等都得到了提高。MPC860PowerQUICC(簡稱MPC860)內(nèi)部集成了兩個處理單元。
一個處理單元是嵌入的PowerPC核(PowerPCCore)。
它是主處理單元(CPU),包括Cache和內(nèi)存管理單元;是一個RISC芯片,通常編譯后的程序指令都是由它執(zhí)行。
另一個是通信處理模塊CPM(CommunicationsProcessorModule),內(nèi)部也集成了一個RISC微處理器,對各種常用的通信模塊進行管理。
通信處理模塊內(nèi)部集成有4個串行通信控制器SCC(SerialCommunicationController)、2個串行管理控制器SMC(SerialManagementChannels)、1個串行外圍接口電路SPI(SerialPeripheralInterface)和1個I2C(Inter-IntegrtaedCircuit)接口。
兩個處理單元之間的數(shù)據(jù)通常使用DMA方式傳送。
由于CPM分擔(dān)了嵌入式PowerPC核的外圍工作任務(wù),這種雙處理器體系結(jié)構(gòu)極大減輕了CPU的工作負荷,而且功耗也要低于傳統(tǒng)體系結(jié)構(gòu)的處理器。
另外,在MPC860中還有一個系統(tǒng)接口單元SIU(SystemInterfaceUnit),主要功能是提供內(nèi)外總線的接口及一些其它功能(如SIU中斷)的管理等。由于MPC860的體系與通用的X86體系結(jié)構(gòu)有很大的不同,其中斷體系結(jié)構(gòu)和處理機制也有自己的特點,使得它的中斷管理及中斷服務(wù)程序成為系統(tǒng)移植和應(yīng)用中的難點。
本文將對MPC860的中斷體系結(jié)構(gòu)和中斷應(yīng)用程序的編寫進行介紹。
MPC860中斷體系結(jié)構(gòu)與MPC860的兩個處理單元相對應(yīng),對于CPM產(chǎn)生的中斷,也有兩級處理過程。
整個MPC860的中斷體系結(jié)構(gòu)如圖1所示。從圖1可以看出,MPC860的整個中斷體系結(jié)構(gòu)有3個模塊:PowerPC核、SIU中斷控制器SIUIC(SIUInterruptController)和CPM中斷控制器CPMIC(CPMInterruptController)。PowerPCCore是指令執(zhí)行單元,使用異常(Exception)的目的就是要打斷它的正常執(zhí)行,使它轉(zhuǎn)入處理緊急事件的異常處理程序中執(zhí)行。
對于每一類異常,異常發(fā)生后PowerPC跳轉(zhuǎn)執(zhí)行的位置是不同的。
這些不同的位置組成了一個表——異常向量表。
不同類型的異常在異常向量表中的偏移量不同。
例如系統(tǒng)重啟異常在異常向量表中的偏移量是0x100,機器自檢異常的偏移量是0x200,而外部中斷在異常向量表中的偏移量是0x500等等。SIU中斷控制器負責(zé)管理8個外部中斷源(IRQ0~7)和8個內(nèi)部中斷源(Leve10~7),結(jié)構(gòu)如圖2的示。
其中IRQ0一般用作不可屏蔽中斷,通過NMI向PowerPC內(nèi)核請求中斷,其余15個通過IREQ請求中斷。
對于8個內(nèi)部中斷源,包括周期性的中斷時鐘(PIT)、實時時鐘(RTC)、PCMCIA以及CPM等,用戶可以通過對寄存器的操作,把它們設(shè)定為Leve10~7中的任何一級。
這16個中斷源之間的優(yōu)先級SIUIC已經(jīng)設(shè)定了。
其中IRQ0的優(yōu)先級最高,Leve10其次,依此類推,Leve17的優(yōu)先級最低。
在SIUIC進行SIU中斷處理時,有幾個重要的寄存器與之相關(guān)的。
它們是中斷懸掛寄存器SIPEND、中斷屏蔽寄存器SIMASK和中斷向量寄存器SIVEC。CPM中斷控制器是對SIU中斷控制器的下一級擴展。
它管理通信處理模塊的各個中斷源,并向SIUIC申請中斷處理,其結(jié)構(gòu)如圖3所示。
CPIC接收12個外部中斷源和17個內(nèi)部中斷源的中斷請求,經(jīng)過屏蔽和判優(yōu)處理后,把中斷請求送往SIU中斷控制器。
通過設(shè)置CPIC的配置寄存器,CPM在SIUIC中的優(yōu)先級可以是Leve10~7中的任何一級,并且所有的CPM中斷源都將以這個優(yōu)先級向SIU申請中斷。
在CPMIC內(nèi)部,它也為每個中斷源分配了一個中斷向量號,并且分配了不同的優(yōu)先級,還可以編程設(shè)定哪個中斷源為最高優(yōu)先級。在CPM的中斷源中,如果一個中斷源有多個子功能可以產(chǎn)生中斷請求,并且每一項子功能的中斷請求都可以屏蔽,那么這個中斷源稱為子塊可屏蔽中斷。
例如,對串行管理通道SMI(SerialManagementChannels),每一個SMC有一個事件寄存器SMCE和一個屏蔽寄存器SMCM,具體定義如圖4所示。
用戶可以通過對SMCM進行編程,屏蔽掉某項子功能的中斷請求功能。
假如用戶要使用中斷接收功能,就應(yīng)該置位SMCM的RX位以打開接收中斷。
在中斷服務(wù)程序中還要讀取SMCE,以判斷是哪個子功能產(chǎn)生的中斷。
如果SMCE的RX位已被置位,就表明產(chǎn)生了接收中斷,應(yīng)進入接收中斷處理函數(shù)。CPMIC中提供了一些可編程寄存器。
通過對這些寄存器進行設(shè)置,可以設(shè)定CPMIC的工作方式。
這些寄存器分別是CPM中斷配置寄存器CICR、CPM中斷屏蔽寄存器CIMR、CPM中斷向量寄存器CIVR、CPM中斷是掛寄存器CIPR和CPM中斷服務(wù)寄存器CISR。編寫MPC860中斷應(yīng)用程序編寫MPC860中斷應(yīng)用程序主要有兩個方面的內(nèi)容:一個是中斷初始化程序,另一個是中斷服務(wù)程序。
中斷初始化程序首要的工作是初始化中斷寄存器,包括打開SIMASK對應(yīng)的屏蔽位、使能外部中斷。
如果要使用SIU的外部中斷,應(yīng)該初始化SIEL寄存器,以設(shè)定中斷是低電平觸發(fā)還是下降沿觸發(fā)。
如果使用了CPM中斷,還應(yīng)該初始化CICR、CIMR寄存器,以設(shè)定CPM在SIUIC中的中斷優(yōu)先級,以及它自身內(nèi)部的最高優(yōu)先級中斷源。
對于子塊可屏蔽中斷源,還應(yīng)該打開對應(yīng)的事件屏蔽寄存器。
只有在初始化這些寄存器后,中斷源產(chǎn)生的中斷才得到響應(yīng)。對于外部中斷,PowerPC內(nèi)核接收到中斷請求信號后,會轉(zhuǎn)入異常向量表中的外部中斷偏移地址處(0x500)執(zhí)行。
這一段最大長度為256個字節(jié)的代碼,也可以說是SIU中斷的服務(wù)程序。
在中斷初始化程序中,還必須把SIU中斷服務(wù)程序放到正確的位置。中斷服務(wù)程序是中斷產(chǎn)生后自動跳轉(zhuǎn)執(zhí)行的程序,它對中斷進行處理。
對于其中比較復(fù)雜的CPM中斷,它有兩級處理程序,分別是SIU中斷服務(wù)程序和CPM中斷服務(wù)程序。
中斷服務(wù)程序的處理流程如圖5所示。在SIU中斷服務(wù)程序中,要讀取產(chǎn)生SIU中斷有中斷向量號,根據(jù)中斷向量號判斷中斷源,然后跳轉(zhuǎn)到對各個中斷源處理的服務(wù)程序中執(zhí)行。
如果讀到的中斷向量號對應(yīng)的是CPM,要轉(zhuǎn)入CPM中斷服務(wù)程序中執(zhí)行。CPM又有29個中斷源,每個中斷源對應(yīng)不同CPM中斷向量號。
在CPM中斷服務(wù)程序中,也要讀取CPM中斷向量號,然后根據(jù)中斷向量號調(diào)用對應(yīng)的中斷處理程序。
這樣,所有的CPM中斷源,在進入中斷處理程序之前,都經(jīng)過了SIUIC和CPMIC兩級處理。
另外,由于MPC860是RISC處理器,它有許多通用寄存器,在中斷服務(wù)程序中應(yīng)該把影響到的寄存器壓入到堆棧中,在退出中斷服務(wù)程序之前再恢復(fù)。
實例應(yīng)用下面以CPM的SMC1用作串口,使用中斷接收數(shù)據(jù)為例,說明MPC860的中斷應(yīng)用程序編寫過程。本程序的主函數(shù)是main()。
它調(diào)用smc_init()進行smc初始化,然后循環(huán)等待接收數(shù)據(jù)。
smc_init()是初始化函數(shù)。
它設(shè)定smc1的工作方式,初始化接收描述字,然后初始化中斷寄存器,并且把SIU中斷服務(wù)程序拷貝到異常向量表的0x500處。
Initbrn()是SIU中斷服務(wù)程序,也就是外部中斷產(chǎn)生后的入口程序。
它讀取SIU的中斷向量號,如果是CPM中斷,就調(diào)用CPM中斷處理程序CPMHandler(),在這個程序中再讀取CPM中斷向量號,如果是CPM中斷,就調(diào)用CPM中斷處理程序CPMHandler(),在這個程序中再讀取CPM中斷向量號,處理SMC1發(fā)送過來的數(shù)據(jù)。另外,函數(shù)getimmr()的作用是用匯編指令得到芯片雙端口寄存器的基址,getmsr()的作用是讀取機器狀態(tài)字(MSR)的值,getevt()利用MSR的值得到的異常向量表的基址。
整個程序代碼如下:#include"pc860.h" /*MPC860寄存器宏定義頭文件*/structdprbase*pdpr; /*指向雙端口內(nèi)存基址的地址*/voidsmc_init() /*初始化SMC函數(shù)*/{voidintbrn(); /*定義SIU中斷服務(wù)程序*/int*ptrs,*ptrd; /*SIU中斷服務(wù)程序搬移的源和目的地址*/charintlv1=4; /*CPM中斷級別*/pdpr=(structdprbase*)(getimmr()&0xFFFF0000); /*得到內(nèi)部雙端口寄存器的基址*/…… /*初始化SMC的寄存器和工作參數(shù),如工作模式,波特率等*/……/*初始化串口數(shù)據(jù)收發(fā)緩沖區(qū)的描述字,注意要把接收緩沖區(qū)描述字RxBD的中斷位置為1*/ptrs=(int*)intbrn; /*需要搬移的SIU中斷服務(wù)程序源地址*/ptrd=(int*)(getevt()+0x500); /*目標(biāo)地址*/do /*把SIU中斷服務(wù)程序搬移到外部中斷入口處*/*ptrd++=*ptrs;while(*ptrs++!=0x4c000064);/*0x4c000064是SIU中斷服務(wù)程序返回指令RFI指令的二進制代碼*/pdpr->CICR.IRL2=(unsigned)(intlv1);/*設(shè)定CPM的中斷級別為4*/pdpr->CICR.HP0_HP4=0x1F;/*設(shè)定PC15為最高優(yōu)先級中斷*/pdpr->CIMR.SMC1=1;/*打開CPMIC的SMC1中斷屏蔽位*/pdpr->SIMASK.ASTRUCT.LVM4=1;/*打開SIUIC的CPM中斷屏蔽位*/pdpr->CICR.IEN=1;/*使能CPM中斷*/pdpr->SMCE1=0xFF;/*清除SMC1的事件寄存器*/pimm->SMCM1=1;/*打開子模塊可屏蔽的接收中斷*/asm("mtspr80,0");/*使能中斷*/……/*使能SMC1的發(fā)送和接收功能*/}main()/*主函數(shù)*/{smc_init()/*初始化SMC1*/while(1==1);/*等待接收*/}#pragmainterruptintbrn/*SIU中斷服務(wù)程序voidintbrn(){voidCPMHandler();/*定義CPM中斷服務(wù)程序*/asm("stwur9,-4(r1");/*把GRR9壓入堆棧*/switch(pdpr->SIVEC.IC)/*讀取SIU的中斷向量號,轉(zhuǎn)入相應(yīng)處理程序*/{case0x24;/*為CPM對應(yīng)的中斷向量號*/asm("mfsprr9,8");/*把LR壓入堆棧*/asm("mfsprr9,8");/*把LR壓入堆棧*/asm("mfsprr9,8");/*把LR壓入堆棧*/asm("stwur9,-4(r1)");asm("blaCPMHandler")/*調(diào)用CPM中斷處理函數(shù)*/asm("lwzr9,0(r1)");/*把LR從堆棧中彈出*/asm("addir1,r1,4");/*恢復(fù)堆棧指針*/asm("mtspr8,r9");break;default:;}asm("lwzr9,0(r1);/*把GPR9從堆棧中彈出/*asm("addir1,r1,4");/*恢復(fù)堆棧指針*/}voidCPMHandler()/*CPM中斷處理程序*/{unsignedv1;pdpr->CIVR.IACK=1;/*把CIVR的IACK位置為1,以讀取CIVR中的中斷向量號*/v1=pdpr->CIVR.VN;/*讀取中斷向量號*/switch(pimm->CIVR.VN)/*根據(jù)中斷向量號進行處理*/{case4:/*SMC1的中斷向量*/……/*SMC1中斷處理程序,對接收到的數(shù)據(jù)進行處理*/pimm->CISR=1<<(31-11);/*清除IN-SRVCE位*/break;default:;}}getimmr()/*得到雙端口寄存器的基址*/{asm("mfspr3,638");}getevt()/*得到中斷入口的基址*/{if((getmsr()&0x40)==0)/*如果MSR.IP等于0*/return(0);/*中斷入口在低位*/elsereturn(0xFFF00000);/*中斷入口在高位*/}getmsr()/*得到機器狀態(tài)寄存器MSR的值*/{asm(mfmsr3;/*把MSR的值讀到r3中*/}
結(jié)論以上討論的中斷應(yīng)用程序的編寫是在沒有操作系統(tǒng)的情況下進行的;如果有操作系統(tǒng),對中斷管理的初始化會在操作系統(tǒng)初始化時完成,用戶只需調(diào)用API函數(shù)安裝中斷服務(wù)程序即可。
但即使這樣,理解上述的中斷處理過程,對編寫MPC860中斷服務(wù)程序也是有必要的。從以上討論可以看出,與MPC860帶有兩個處理器的體系結(jié)構(gòu)相適應(yīng)的,MPC860中斷機制采用了兩級中斷處理,其優(yōu)點是能最大限度地擴展外部中斷源的數(shù)量,并可以加快對CPM中斷的響應(yīng)速度。
編寫MPC860中斷處理程序的關(guān)鍵在兩個方面:一個是在初始化時應(yīng)該設(shè)置好各個中斷寄存器,并且把SIU中斷服務(wù)程序放到正確的位置;另一個是在中斷服務(wù)程序的處理過程中,要根據(jù)讀得的SIU和CPM中斷向量號進行相應(yīng)處理。VxWorks下MPC860的中斷處理機制及其應(yīng)用嵌入式實時操作系統(tǒng)VxWorks提供的中斷處理機制中斷延遲小,應(yīng)用編程方便。MPC860是目前在網(wǎng)絡(luò)與通信領(lǐng)域應(yīng)用非常廣泛的一款微處理器芯片。論文詳細分析了VxWorks及MPC860的中斷處理機制,闡述了中斷處理應(yīng)用編程的過程,并給出了應(yīng)用實例。引言中斷是外部事件通知操作系統(tǒng)的最常用手段。中斷處理機制是計算機多任務(wù)環(huán)境運行的基礎(chǔ),是系統(tǒng)實時性的保證.VxWorks是美國WindRiver公司于1983年設(shè)計開發(fā)的一種嵌入式實時操作系統(tǒng)。內(nèi)核wind在任務(wù)調(diào)度、中斷處理及網(wǎng)絡(luò)處理等方面與其它嵌入式實時操作系統(tǒng)相比具有一定的優(yōu)勢。特別是其提供的微秒級的中斷處理為VxWorks在嵌入式實時操作系統(tǒng)領(lǐng)域的旗艦地位奠定了基礎(chǔ)。Motorola公司推出的MPC860是目前在網(wǎng)絡(luò)與通信領(lǐng)域應(yīng)用非常廣泛的一款微處理器芯片。高速的PowerPC內(nèi)核,連同集成的網(wǎng)絡(luò)與通信外圍設(shè)備,為用戶提供了一個建立高端通信系統(tǒng)的全新系統(tǒng)解決方案。因其體系結(jié)構(gòu)與通用的x86體系結(jié)構(gòu)有很大的不同,理解其中斷處理機制及編寫相應(yīng)的中斷處理程序成為系統(tǒng)移植與應(yīng)用中的難點。VxWorks下的中斷處理機制中斷處理的實時性設(shè)計VxWorks采用中斷處理與普通任務(wù)分別在不同的棧中處理的中斷處理機制.中斷處理程序運行于一種特殊的上下文環(huán)境中,沒有任務(wù)控制塊(TaskControlBlock,TCB),這使得中斷的產(chǎn)生只會引發(fā)一些關(guān)鍵寄存器的存儲而不會導(dǎo)致任務(wù)上下文的切換,從而減小了中斷延遲。VxWorks下的中斷服務(wù)程序(ISR,InterruptServiceRoutine)只完成在最小時間內(nèi)通告中斷的發(fā)生,而將其它的非實時處理盡量通過中斷與任務(wù)間的通信機制放在被引發(fā)的任務(wù)上下文中來完成,類似于Linux中的底半處理機制,這樣既可以避開中斷服務(wù)程序編寫的種種限制,又進一步縮小了中斷延遲。VxWorks在內(nèi)核Wind中普遍采用被高度優(yōu)化的信號量而不是關(guān)中斷來實現(xiàn)互斥訪問,這也對縮小中斷延遲有一定的貢獻。方便的中斷編程接口為了讓用戶方便的使用C語言編寫中斷服務(wù)程序來實現(xiàn)對中斷的控制,VxWorks在體系結(jié)構(gòu)無關(guān)例程庫intLib和體系結(jié)構(gòu)相關(guān)例程庫intArchLib中提供了系統(tǒng)接口函數(shù).對于應(yīng)用程序員一般只需了解intLib庫即可,而BSP(BoardSupportPacket,板級支持包)程序員則還需要了解intArchLib庫。對例程庫的詳細描述請參見參考文獻.接口函數(shù)中最常用的是在intLib庫中提供的中斷連接函數(shù)intConnect()。其函數(shù)原型為STATUSintConnect(VOIDFUNCPTR*vector, /*需要連接的外部中斷向量*/VOIDFUNCPTRroutine, /*中斷發(fā)生時調(diào)用的中斷服務(wù)程序*/intparameter /*傳遞給中斷服務(wù)程序的參數(shù)*/)該函數(shù)將指定的中斷服務(wù)程序routine與指定的外部事件中斷向量vector相關(guān)聯(lián)。當(dāng)指定的外部中斷事件發(fā)生時,該函數(shù)以指定的參數(shù)parameter為參數(shù),調(diào)用中斷服務(wù)程序,完成相應(yīng)的中斷服務(wù)。MPC860的中斷處理機制MPC860有三個主要組成部分:嵌入式PowerPC內(nèi)核(Core)、系統(tǒng)接口單元(SIU,SystemInterfaceUnit)和通信處理模塊(CPM,CommunicationsProcessorModule)。MPC860屬于雙處理器體系結(jié)構(gòu)。嵌入式PowerPC內(nèi)核是主處理單元,包括高速緩存(CACHE)和內(nèi)存管理單元(MMU),它是一個RISC芯片,通常開發(fā)編譯后的程序指令都是由它執(zhí)行。通信處理模塊內(nèi)部也集成了一個RISC微處理器,對各種常用的通信模塊進行管理。由于CPM分擔(dān)了嵌入式PowerPC內(nèi)核的外圍工作任務(wù),這種雙處理器體系結(jié)構(gòu)功耗低于傳統(tǒng)體系結(jié)構(gòu)的處理器。系統(tǒng)接口單元主要提供內(nèi)外總線的接口,以及一些其它功能如SIU中斷的管理等。MPC860的中斷體系結(jié)構(gòu)MPC860的中斷體系結(jié)構(gòu)有三個模塊:PowerPC內(nèi)核、SIU中斷控制器(SIUInterruptController)和CPM中斷控制器(CPMInterruptController)。如圖1所示。圖1MPC860中斷體系結(jié)構(gòu)CPM中斷控制器對通信處理模塊的各個中斷進行管理,它接收12個外部中斷源和17個內(nèi)部中斷源的中斷請求,經(jīng)過屏蔽和判優(yōu)處理后,把中斷請求送往SIU中斷控制器。CPM中斷控制器為每個中斷源分配了一個中斷向量號,并且分配了不同的優(yōu)先級,還可以編程設(shè)定哪個中斷源為最高優(yōu)先級。所有的CPM中斷在SIU中斷控制器中產(chǎn)生的中斷向量號都是一樣的。SIU中斷控制器負責(zé)管理8個外部中斷源(IRQ0~7)和8個內(nèi)部中斷源(Level0~7),其中IRQ0一般用作不可屏蔽中斷,通過NMI向PowerPC內(nèi)核請求中斷,其余15個通過外部中斷引腳IREQ請求中斷。對于8個內(nèi)部中斷源,包括時間基準(zhǔn)(TB)、周期性的中斷定時器(PIT)、實時時鐘(RTC)、PCMCIA以及CPM等,用戶可以通過對寄存器的操作,把它們設(shè)定為Level0~7中的任何一級。SIU中斷控制器已經(jīng)設(shè)定了這16個中斷源之間的優(yōu)先級,其中IRQ0的優(yōu)先級最高,Level0其次,IRQ1再次,依此類推,Level7的優(yōu)先級最低。PowerPC內(nèi)核接收到中斷請求信號后,保存內(nèi)核中斷現(xiàn)場,即將程序計數(shù)器保存到SRR0,機器狀態(tài)寄存器(MSR,MachineStateRegister)保存到SRR1,并改變MSR相關(guān)的信息,然后按異常向量表轉(zhuǎn)入外部中斷偏移地址處(0x500)執(zhí)行最大長度為256個字節(jié)的SIU中斷服務(wù)程序,完成中斷服務(wù)。中斷處理流程MPC860的中斷處理流程如圖2所示。內(nèi)核在收到中斷請求,保存中斷現(xiàn)場后執(zhí)行SIU中斷服務(wù)程序。首先保存用戶中斷現(xiàn)場,保存關(guān)鍵寄存器到中斷堆棧,并設(shè)置堆棧入口,然后讀取產(chǎn)生SIU中斷的中斷向量號,根據(jù)中斷向量號判斷中斷源,再跳轉(zhuǎn)到各個中斷源相應(yīng)的服務(wù)程序中執(zhí)行。讀到的中斷向量號如果對應(yīng)的是CPM,要轉(zhuǎn)入CPM中斷服務(wù)程序中執(zhí)行。在CPM中斷服務(wù)程序中,首先內(nèi)核將CPM中斷向量寄存器(CIVR,CPMInterruptVectorRegister)的IV位置1,然后讀取CPM中斷向量號,再根據(jù)中斷向量號調(diào)用對應(yīng)的中斷服務(wù)程序。這樣,所有的CPM中斷源,在進入中斷處理程序之前,都經(jīng)過了SIU中斷控制器和CPM中斷控制器兩級處理。另外,由于MPC860是RISC處理器,它有許多通用寄存器,在中斷服務(wù)程序中應(yīng)該把影響到的關(guān)鍵寄存器壓入到堆棧中,在退出中斷服務(wù)程序之前再恢復(fù)。圖2MPC860的中斷處理流程中斷處理應(yīng)用編程實際中斷處理應(yīng)用編程主要包括兩部分工作:一是編寫中斷初始化程序,進行初始化和中斷連接;二是編寫中斷服務(wù)程序完成中斷服務(wù)功能。編寫中斷初始化程序中斷初始化程序的首要工作是初始化中斷寄存器,包括打開SIU中斷屏蔽寄存器(SIMASK,SIUInterruptMask)對應(yīng)的屏蔽位,使能外部中斷。如果是SIU的外部中斷,應(yīng)該初始化SIU中斷邊沿/電平寄存器(SIEL,SIUInterruptEdge/LevelRegister),以設(shè)定中斷是下降沿觸發(fā)還是低電平觸發(fā)。如果使用了CPM中斷,還應(yīng)該初始化CPM中斷配置寄存器(CICR,CPMInterruptConfigurationRegister)和CPM中斷屏蔽寄存器(CIMR,CPMInterruptMaskRegister),以設(shè)定CPM在SIU中斷控制器中的中斷優(yōu)先級,以及其內(nèi)部的最高優(yōu)先級中斷源。對于子塊可屏蔽中斷源,還應(yīng)該打開對應(yīng)的事件屏蔽寄存器。中斷初始化程序還必須把SIU中斷服務(wù)程序放到正確的位置。在VxWorks環(huán)境下調(diào)用intConnect()函數(shù)即將中斷服務(wù)程序與外部中斷源連接起來。編寫中斷服務(wù)程序由于中斷服務(wù)程序不是在規(guī)則的任務(wù)上下文中運行(它沒有任務(wù)控制塊,中斷處理程序共享一個堆棧等),中斷服務(wù)程序必須遵守一個基本約束:它必須不能調(diào)用可能直接或間接導(dǎo)致阻塞的函數(shù)。例如,ISR不能獲取信號量,但可以釋放信號量;ISR不能直接或間接調(diào)用內(nèi)存操作函數(shù)malloc()和free();ISR不能通過VxWorks驅(qū)動來執(zhí)行I/O操作,但VxWorks的管道驅(qū)動程序是一個例外;ISR也不能使用printf()進行打印,VxWorks專門為ISR打印信息設(shè)計了一個記錄功能logMsg(
),允許向系統(tǒng)輸出平臺打印文本信息。具體能被中斷服務(wù)程序調(diào)用的函數(shù)請參見參考文獻.由于中斷服務(wù)通常涉及到任務(wù)級代碼,并且中斷服務(wù)程序受到種種限制,VxWorks支持在中斷級運行的中斷服務(wù)程序直接與一般任務(wù)進行通信。其通信機制有共享數(shù)據(jù)結(jié)構(gòu)、信號量、消息隊列、管道、信號等。其中,信號量是VxWorks提高中斷服務(wù)程序與任務(wù)的合作性能的最好機制。理想情況下,一個中斷服務(wù)程序僅僅調(diào)用semGive()函數(shù)釋放一個信號量,發(fā)起一個任務(wù)來完成必要的處理.中斷處理應(yīng)用實例下面給出VxWorks下MPC860的中斷處理的應(yīng)用實例。我們在某項目開發(fā)中利用中斷通知MPC860讀取外圍器件FIFO的數(shù)據(jù)。相關(guān)的硬件連接如圖3所示。圖3中斷處理應(yīng)用實例
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中共甘孜州委社會工作部2025年甘孜州社會化招募新興領(lǐng)域黨建工作專員(47人)備考題庫附答案
- 北京市海淀區(qū)學(xué)府幼兒園招聘備考題庫附答案
- 四川省岳池銀泰投資(控股)有限公司公開招聘急需緊缺專業(yè)人才備考題庫附答案
- 宜昌市公安局公開招聘輔警70人參考題庫必考題
- 招16人!城西公安分局2025年第一次公開招聘警務(wù)輔助人員參考題庫附答案
- 景德鎮(zhèn)市公安局2025年下半年招聘警務(wù)輔助人員體能測評備考題庫必考題
- 特飛所2026屆校園招聘參考題庫附答案
- 贛州市國家區(qū)域醫(yī)療中心及緊密型城市醫(yī)療集團成員單位2026年公開招聘高層次衛(wèi)生專業(yè)人才(廣州站)筆試備考題庫必考題
- 陜西2026選調(diào)生公布網(wǎng)站考試備考題庫附答案
- 美國平面設(shè)計職業(yè)方向
- 湖南省婁底市期末真題重組卷-2025-2026學(xué)年四年級語文上冊(統(tǒng)編版)
- 2025年華僑生聯(lián)考試題試卷及答案
- 土石方測量施工方案
- DB11∕T 2490-2025 文物保護單位無障礙設(shè)施設(shè)置規(guī)范
- 2025年司法協(xié)理員年度考核表
- 風(fēng)電項目質(zhì)量管理
- 靜脈輸液操作規(guī)范與并發(fā)癥預(yù)防指南
- 福建省福州市福清市2024-2025學(xué)年二年級上學(xué)期期末考試語文試卷
- 2025年CAR-NK細胞治療臨床前數(shù)據(jù)
- 班團活動設(shè)計
- 基金通道業(yè)務(wù)合同協(xié)議
評論
0/150
提交評論