資源描述:
《基于win ce與s2410的外部中斷的實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、基于WINCE與s2410的外部中斷的實(shí)現(xiàn)曹彤星中斷是指在執(zhí)行程序的過(guò)程中,出現(xiàn)了異常情況和特殊請(qǐng)求時(shí),計(jì)算機(jī)將停止現(xiàn)行程序的運(yùn)行,轉(zhuǎn)去對(duì)這些異常情況或特殊情況進(jìn)行處理。一、中斷的基本知識(shí)(一)中斷的優(yōu)點(diǎn)當(dāng)CPU與外設(shè)交換信息時(shí),若用查詢(xún)的方式,則CPU就要浪費(fèi)很多時(shí)間去等待外設(shè)。這樣就存在一個(gè)快速的CPU與慢速的外設(shè)之間的矛盾。為解決這個(gè)問(wèn)題,一方面要提高外設(shè)的工作;另一方面發(fā)展了中斷的概念。1、同步操作有了中斷功能,CPU在啟動(dòng)外設(shè)工作后,就繼續(xù)執(zhí)行主程序,同時(shí)外設(shè)也在工作,當(dāng)外設(shè)把數(shù)據(jù)準(zhǔn)備
2、好后,發(fā)出中斷申請(qǐng),請(qǐng)求CPU中斷它的程序,執(zhí)行輸入或輸出(中斷處理),處理完以后,CPU恢復(fù)執(zhí)行主程序,外設(shè)也繼續(xù)工作。而且有了中斷功能,CPU可命令多個(gè)外設(shè)同時(shí)工作。這樣大大提高了CPU的利用率,也提高了輸入、輸出的速度。2、實(shí)時(shí)控制現(xiàn)場(chǎng)的各個(gè)參數(shù)、信息,需要的話可在任何時(shí)間發(fā)出中斷申請(qǐng),要求CPU處理;CPU就可以馬上響應(yīng)(中斷要開(kāi)放)加以處理。這樣的及時(shí)處理在查詢(xún)的工作方式下是做不到的。3、故障處理在出現(xiàn)電源突跳與存儲(chǔ)出錯(cuò)等故障時(shí),就可以利用中斷系統(tǒng)自行處理,而不必停止運(yùn)行。(二)中斷系
3、統(tǒng)的基本功能控制器中設(shè)置中斷系統(tǒng)后,便可以處理各種中斷。一個(gè)完整的中斷系統(tǒng)應(yīng)具備如下的基本功能。1、實(shí)現(xiàn)中斷請(qǐng)求實(shí)現(xiàn)中斷請(qǐng)求,就是要解決如何建立中斷源,中斷源在什么時(shí)候或何種條件下可向CPU發(fā)出中斷申請(qǐng)。2、實(shí)現(xiàn)排隊(duì)判優(yōu)計(jì)算機(jī)中往往設(shè)置有多種中斷源,當(dāng)多個(gè)中斷源同時(shí)向CPU提出中斷請(qǐng)求后,CPU應(yīng)能按輕、重、緩、急予以響應(yīng)。如何確定響應(yīng)的優(yōu)先次序,是中斷結(jié)構(gòu)要解決的重要問(wèn)題之一。3、實(shí)現(xiàn)中斷響應(yīng)當(dāng)擇優(yōu)選出中斷源之后,CPU以何種方式響應(yīng)中斷,如何保護(hù)中斷時(shí)的現(xiàn)場(chǎng),又在什么時(shí)候允許有新的中斷請(qǐng)求等
4、,這些問(wèn)題都是在中斷響應(yīng)時(shí)要解決的。4、實(shí)現(xiàn)中斷服務(wù)程序的連接在CPU響應(yīng)中斷后,如何停止現(xiàn)行程序的執(zhí)行,并轉(zhuǎn)入中斷服務(wù)程序的入口地址,中斷服務(wù)程序的結(jié)構(gòu)情況等,都是要解決的問(wèn)題。5、實(shí)現(xiàn)中斷返回此功能是解決中斷處理結(jié)束后,CPU如何恢復(fù)現(xiàn)場(chǎng),并正確返回到原程序的斷電。6、實(shí)現(xiàn)多重中斷當(dāng)正在執(zhí)行中斷處理的過(guò)程中,又出現(xiàn)新的中斷請(qǐng)求時(shí)如何處理,這就是中斷嵌套問(wèn)題(三)單級(jí)中斷的處理過(guò)程一般有以下幾步:中斷請(qǐng)求、中斷響應(yīng)、中斷處理、中斷返回二、wince下關(guān)于中斷的主要函數(shù)及其說(shuō)明(一)HookIn
5、terrupt:這個(gè)函數(shù)配置一個(gè)帶內(nèi)核的中斷服務(wù)程序來(lái)識(shí)別特定的由它的中斷請(qǐng)求(IRQ)號(hào)來(lái)指示的硬件中斷。BOOLHookInterrupt(intbwIntNumber,FARPROCpfnHandler);hwIntNumber:硬件中斷號(hào),注意它為實(shí)際硬件IRQ值而不是邏輯中斷標(biāo)示pfnHandler:來(lái)處理特定IRQ中斷的指向ISR的指針?lè)祷刂担?—成功0—失敗這個(gè)函數(shù)僅在OEM適應(yīng)層被OEM調(diào)用,OEMInit函數(shù)典型用來(lái)初始化所有的ISR因?yàn)橹挥幸粋€(gè)中斷,所以不被ARM使用。頭文件
6、:Nkintr.h相鏈接的庫(kù):NK.lib(二)InterruptDisable通過(guò)識(shí)別中斷ID號(hào)來(lái)禁止硬件中斷VOIDInterruptDisable(DWORDidInt);參數(shù):idInt[in]中斷的ID評(píng)論:設(shè)備驅(qū)動(dòng)訪問(wèn)InterruptDisable來(lái)禁止硬件中斷與撤銷(xiāo)通過(guò)中斷初始化注冊(cè)的事件。這個(gè)驅(qū)動(dòng)必須在關(guān)閉事件處理之前調(diào)動(dòng)InterruptDisable。這個(gè)內(nèi)核訪問(wèn)OEMInterruptDisable函數(shù)作為這次訪問(wèn)的一部分。頭文件:PKfuncs.h鏈接庫(kù):Coredll
7、.lib(三)InterruptDone這個(gè)函數(shù)示意內(nèi)核,中斷過(guò)程已經(jīng)完成VOIDInterruptDone(DWORDidInt);參數(shù):idInt中斷標(biāo)識(shí)符評(píng)論:設(shè)備驅(qū)動(dòng)調(diào)動(dòng)InterruptDone當(dāng)它已經(jīng)完成中斷處理過(guò)程并準(zhǔn)備為下一個(gè)中斷時(shí)。InterruptDone在驅(qū)動(dòng)等待注冊(cè)事件再被示意之前,必須被訪問(wèn)來(lái)--去中斷屏蔽。內(nèi)核通過(guò)OEMInterruptDone函數(shù)來(lái)調(diào)用。OSVersions:WindowsCE2.10andlater.頭文件:Pkfuncs.h聯(lián)接庫(kù):Coredl
8、l.lib(四)InterruptInitialize這個(gè)函數(shù)與內(nèi)核一起來(lái)初始化硬件中斷。初始化允許設(shè)備驅(qū)動(dòng)來(lái)注冊(cè)一個(gè)事件與啟動(dòng)中斷。BOOLInterruptInitialize(DWORDidInt,HANDLEhEvent,LPVOIDpvData,DWORDcbData);參數(shù):idInt與中斷服務(wù)線程相聯(lián)系的中斷標(biāo)識(shí)符hEventEventtobesignaledwhentheInterruptistriggeredpvData這個(gè)參數(shù)能被當(dāng)作指針來(lái)使用cbData這個(gè)參數(shù)為pbDat