




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、ARM開發(fā)教程之ARM嵌入式系統(tǒng)中斷向量表的動態(tài)配置簡介1 arm中斷向量兩種設(shè)置方法2 X86與arm處置器中斷向量表比較3 arm構(gòu)造中中斷向量表的動態(tài)配置方法4 結(jié)論.簡介通常32位arm嵌入式系統(tǒng)的中斷向量表是在程序編譯前設(shè)置好的,每次編寫中斷程序都要改C程序的匯編啟動代碼,相當(dāng)繁瑣。本文給出一種配置arm中斷向量表新方法。該方法比通常方法僅添加一條指令執(zhí)行時間,簡便高效,功能完備,向量表在運(yùn)轉(zhuǎn)時動態(tài)生成,C程序可以運(yùn)用固定向量表的啟動代碼,并可隱藏起來。.普通32位ARM嵌入式系統(tǒng)的中斷向量表是程序編譯前設(shè)置好的。在編寫32位ARM嵌入式系統(tǒng)的中斷效力程序、設(shè)置和修正ARM體系構(gòu)造的
2、中斷向量表時,常感到相當(dāng)費(fèi)事,不得不修正匯編代碼,對不喜歡運(yùn)用匯編代碼編程的程序員尤其如此。當(dāng)需求在程序運(yùn)轉(zhuǎn)過程中動態(tài)修正中斷向量的程序時會感到更為不便,不得不添加很多分支處置指令才干實現(xiàn)。為此本文提出一種簡便高效的配置方法,實現(xiàn)了ROM固化程序在運(yùn)轉(zhuǎn)時動態(tài)配置arm嵌入式系統(tǒng)中斷向量表的功能。.1 ARM開發(fā)教程之ARM中斷向量兩種設(shè)置方法在32位arm系統(tǒng)中,普通都是在中斷向量表中放置一條分支指令或PC存放器加載指令,實現(xiàn)程序跳轉(zhuǎn)到中斷效力例程的功能。例如:IRQEntry B HandleIRQ ;跳轉(zhuǎn)范圍較小B HandleFIQ或IRQEntry LDR PC,=HandleIRQ
3、;跳轉(zhuǎn)的范圍是恣意32位地址空間LDR PC,=HandleFIQLDR偽指令等效生成1條存儲讀取指令和1條32位常數(shù)定義指令。32位常數(shù)存儲在LDR指令附近的存儲單元中,相對偏移小于4KB。該32位數(shù)據(jù)就是要跳轉(zhuǎn)到的中斷效力程序入口地址。之所以運(yùn)用LDR偽指令,是由于arm的RISC指令為單字指令,不能裝載32位的立刻數(shù)常數(shù),無法直接把一個32位常數(shù)數(shù)據(jù)或地址數(shù)據(jù)裝載到存放器中。下面普通程序與上述偽指令功能等效,但中斷向量表描畫得更為明晰。.其中VectorTable為相對LDR指令的偏移量:IRQEntry LDR PC,VectorTable+0;與LDR PC,=HandleIRQ等效
4、LDR PC,VectorTable+4;與LDR PC,=HandleFIQ等效VectorTable DCD HandleTRQDCD HandleFIQHandleIRQHandleFIQ.普通ARM嵌入式系統(tǒng)的程序都是固化在從00000000H開場的低端ROM空間中,中斷向量表VectorTable也是固化在ROM中,所以上述兩種方法都無法在程序運(yùn)轉(zhuǎn)時動態(tài)隨機(jī)修正中斷向量表。不論對于初學(xué)ARM處置器的程序員還是有閱歷的程序員,設(shè)置中斷向量都相當(dāng)繁瑣,必需修正arm的C程序的啟動代碼。一段晦澀的匯編代碼很不方便,比較容易出錯。.2 ARM開發(fā)教程之X86與arm處置器中斷向量表比較實方式
5、X86程序員都熟習(xí),在X86體系構(gòu)造的PC系統(tǒng)中,不論是用匯編還是用C言語,都可以動態(tài)隨機(jī)地設(shè)置、修正中斷向量表只需求簡單地把中斷程序例程的入口地址寫入到中斷向量表數(shù)據(jù)區(qū),即可完成向量表的設(shè)置。X86向量表設(shè)置方便的緣由有兩個。其一是中斷向量表與程序代碼完全分別,中斷向量表設(shè)置在RAM數(shù)據(jù)空間,向量表存放的數(shù)據(jù)是純粹地址數(shù)據(jù);而在arm向量表中存放的是與中斷效力例程入口有關(guān)的一條分支指令。另一個緣由是,除BIOS外,大多數(shù)PC程序都是在運(yùn)轉(zhuǎn)時加載到RAM中的,程序數(shù)據(jù)是不加區(qū)別的,所以可以很容易在程序運(yùn)轉(zhuǎn)的過程中從數(shù)據(jù)生成程序,并可以很容易把CPU控制權(quán)轉(zhuǎn)到新生成的程序中。.外表上看,在ARM
6、第二種中斷向量設(shè)置方法的向量表VectorTable中也是純地址數(shù)據(jù),不含指令代碼,似乎可以把VectorTable設(shè)置在RAM數(shù)據(jù)段中。然而普通arm體系的ROM代碼段和RAM數(shù)據(jù)段間的偏移遠(yuǎn)大于2 12,故超出了LDR運(yùn)用PC為基址的相對尋址范圍。代碼中的VectorTable是一個與當(dāng)前PC間的一個偏移,LDR指令的相對地址是在編譯時計算的,要求VectorTable2 12,所以VectorTable不能隨意安排在RAM空間中。VectorTable普通只能安排在中斷跳轉(zhuǎn)指令附近的代碼區(qū)內(nèi)中。.3 ARM開發(fā)教程之ARM構(gòu)造中中斷向量表的動態(tài)配置方法要在arm構(gòu)造中實現(xiàn)與X86中一樣方
7、便的在中斷向量的隨機(jī)存取功能,向量表的地址數(shù)據(jù)必需可以安排在恣意32位地址的RAM空間中。為此,中斷處置必需添加一條指令,先跳轉(zhuǎn)到向量表,然后執(zhí)行向量表中動態(tài)生成的跳轉(zhuǎn)指令,跳轉(zhuǎn)到中斷效力程序,參見以下初始化代碼:;*向量表*ENTRYB ResetHandle ;原向量偏移 ,中斷號B ReseHandle ;0 x00 ,00LDR PC,=NewVectorTable+0 x08 ;0 x04,未定義 ,01LDR PC,=NeWVector Table+0 x10 ;0 x08,SWI,02LDR PC,=NewVectorTable+0 x18 ;0 x0c,未定義 ,03LDR P
8、C,=NewVectorTable+0 x20 ;0 x10,未定義 ,04LDR PC,=NewVectorTable+0 x28;0 x14,未定義 0,05LDR PC,=NewVectorTable+0 x30 ;0 x18,IRQ ;06LDR PC,=NewVectorTable+0 x38 ;0 x1c,FIQ ,07;*代碼段*ResetHandle;*數(shù)據(jù)段,為NewVectorTable分配數(shù)據(jù)空間*.NewVectorTable # 128;大小根據(jù)需求定義,每向量2個字8字節(jié);程序運(yùn)轉(zhuǎn)時,中斷效力的初始化 程序必需設(shè)置好新的中斷向量表,即在NewVectorTable表
9、中動態(tài)生成以下指令:NewVectorTable;表安排在RAM頂端0 x0c1fff00處由硬件設(shè)定LDR PC,PC,#4;指令代碼為0 xe51ff004,功能為PC-PC+4nVt00 DCD ISR_RESET_HANDLELDR PC,PC,#4;與LDR PC,nVt01指令等效nVt01 DCD ISR_UNDEF_HANDLELDR PC,PC,#4nVt02 DCD ISR_SWI_HANDLELDR pC,PC,#4nVt03 DCD ISR_UNDEF_HANDLELDR PC,PC,#4nVt04 DCD ISR_UNDEF_HANDLELDR PC,PC,#4nVt
10、05 DCD ISR_UNDEF_HANDLELDR PC,PC,#4NVt06 DCD ISR_IRQ_HANDLELDR PC,PC,#4nVt07 DCD ISR_FIQ_HANDLE.可用C函數(shù)在NweVectorTable中生成含上述指令的向量表,詳細(xì)實現(xiàn)如下:#define VECTOR_TABLE 0 x0c1fff00/向量表首地址,根據(jù)實踐硬件來配置#define INSTRUCTION_LDR_PC 0 xe51ff004/加載PC存放器的指令碼/設(shè)置向量C函數(shù),ISR_Handle中斷效力程序地址void SetVector(unsigned char no,unsign
11、ed long int ISR_Handle)unsigned long int * pVectorTable;/定義32位無符號數(shù)指令,指向向量表pVectorTable=(unsigned long int *)(VECTOR_TABLE+(no3);*pVectorTable+=INSTRUCTION_LDR_PC;/在向量表中放置LDR PC,PC,#4指令*pVectorTable=ISR_Handle;/設(shè)置中斷效力例程入口地址./讀取向量C函數(shù),no代表中斷號unsigned long int GetVector(unsigned char no)unsigned long int *pVectorTable;pVectorTable=(unsigned long int *)(VECTOR_TABLE+(no3);return *(+pVectorTable);/前往中斷處置程序入口地址運(yùn)用上述初始化代碼和向量設(shè)置函數(shù),除復(fù)位向量外,其它一切中斷向量都可以指向了在RAM數(shù)據(jù)區(qū)中的新向量表,并給定一個一致的中斷編號。中斷效力程序可以放在任何模塊文件中編譯銜接,不需求修正原向量表代碼,但在翻開中斷運(yùn)用中斷效力例程前必需運(yùn)用C函數(shù)Set
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年口腔化學(xué)品:牙膏合作協(xié)議書
- 二零二五年度醫(yī)院體檢與康復(fù)治療一體化服務(wù)協(xié)議
- 二零二五年度湖北省旅游包車定制旅行服務(wù)協(xié)議
- 二零二五年度能源項目債權(quán)轉(zhuǎn)讓及投資合同
- 2025年度電子產(chǎn)品全面保修服務(wù)協(xié)議書
- 二零二五年度房地產(chǎn)項目干股分紅及權(quán)益保障協(xié)議
- 2025年度環(huán)保設(shè)施工程付款合同協(xié)議書
- 二零二五年度商業(yè)門面整體轉(zhuǎn)讓及裝修改造合同
- 二零二五年度房地產(chǎn)預(yù)售定金協(xié)議
- 二零二五年度物聯(lián)網(wǎng)產(chǎn)品技術(shù)開發(fā)與市場推廣合作合同
- 校園直飲水機(jī)供貨安裝及售后服務(wù)方案
- 廢氣處理系統(tǒng)改造及廢水處理系統(tǒng)改造項目可行性研究報告
- 大學(xué)物業(yè)服務(wù)月考核評價評分表
- 現(xiàn)代家政導(dǎo)論-課件 1.1.2認(rèn)識家政學(xué)起源與發(fā)展
- 期末模擬測試卷(試卷)2024-2025學(xué)年六年級數(shù)學(xué)上冊人教版
- 2024屆護(hù)士資格考試必考基礎(chǔ)知識復(fù)習(xí)題庫及答案(共170題)
- 工業(yè)大數(shù)據(jù)算法賽項實際操作部分評分細(xì)則變更說明
- 小學(xué)生防性侵安全教育主題班會課件
- DBT29-305-2024 天津市裝配式建筑評價標(biāo)準(zhǔn)
- 背光異物改善8D
- 2024年五級咖啡師職業(yè)技能鑒定考試題庫(含答案)
評論
0/150
提交評論