ARM內(nèi)核之中斷技術(shù)篇
出處:互聯(lián)網(wǎng) 發(fā)布于:2011-09-03 12:10:40
1 ARM7TDMI
談及ARM7TDMI就有必要先了解一下有關(guān)于它的其它知識(shí):
ARM(Advanced RISC Machines)是微處理器行業(yè)的一家企業(yè),設(shè)計(jì)了大量高性能、廉價(jià)、耗能低的RISC處理器、相關(guān)技術(shù)及軟件。技術(shù)具有性能高、成本低和能耗省的特點(diǎn)。適用于多種領(lǐng)域,比如嵌入控制、消費(fèi)/教育類多媒體、DSP和移動(dòng)式應(yīng)用等。
ARM公司是蘋果、Acorn、VLSI、Technology等公司的合資企業(yè)。ARM將其技術(shù)授權(quán)給世界上許多的半導(dǎo)體、軟件和OEM廠商,每個(gè)廠商得到的ARM公司(6張)都是一套的ARM相關(guān)技術(shù)及服務(wù)。利用這種合伙關(guān)系,ARM很快成為許多性RISC標(biāo)準(zhǔn)的。
目前,采用 ARM技術(shù)知識(shí)產(chǎn)權(quán)( IP )核的微處理器,即我們通常所說(shuō)的 ARM 微處理器,已遍及工業(yè)控制、消費(fèi)類電子產(chǎn)品、通信系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)、無(wú)線系統(tǒng)等各類產(chǎn)品市場(chǎng),基于 ARM 技術(shù)的微處理器應(yīng)用約占據(jù)了 32 位 RISC 微處理器 75 %以上的市場(chǎng)份額, ARM 技術(shù)正在逐步滲入到我們生活的各個(gè)方面。
ARM7系列處理器是英國(guó)ARM公司設(shè)計(jì)的主流嵌入式處理器,內(nèi)核是0.9MIPS/MHz的三級(jí)流水線和馮·諾伊曼結(jié)構(gòu);ARM7TDMI是一款經(jīng)典的通用32位微處理器,采用精簡(jiǎn)指令系統(tǒng)(RISC)和流水線結(jié)構(gòu)。典型應(yīng)用如GPS、PDA、雙向?qū)ず魴C(jī)、移動(dòng)電話、板卡間高速通信等。
ARM7TDMI定義有7種工作模式,本文涉及到的有:用戶模式,程序正常運(yùn)行時(shí)的模式;快中斷模式,處理器響應(yīng)快中斷而進(jìn)入的模式;中斷模式,處理響應(yīng)常規(guī)中斷而進(jìn)入的模式;監(jiān)督模式,操作系統(tǒng)的保護(hù)模式。處理器響應(yīng)軟件中斷時(shí)即進(jìn)入監(jiān)督模式。下面重點(diǎn)介紹ARM7TDMI的中斷特性。主要特性如表1所列。
表1 中斷特性表
| 向量地址 | 中斷類型 | 工作模式 | 優(yōu)先級(jí) | 返回地址 |
| 0x8 | 軟件中斷 | SWI模式 | 6 | pc-4 |
| 0x18 | 常規(guī)則中斷 | IRQ模式 | 4 | pc-8 |
| 0x1C | 快中斷 | FIQ模式 | 3 | pc-8 |
ARM7TDMI具有常規(guī)中斷(IRQ)、快中斷(FIQ)和軟件中斷(SoftWare Interrupt)三種中方式。常規(guī)中斷和快中斷都是硬件中斷。
快中斷
快中斷是為支持?jǐn)?shù)據(jù)傳輸或快速數(shù)據(jù)通道而設(shè)計(jì)的,為快速處理快中斷。
①快中斷被設(shè)為中斷優(yōu)先級(jí);
②在快中斷模式增設(shè)了7個(gè)私有工作寄存器,從而避免了由于主工作寄存器數(shù)據(jù)的保存和恢復(fù)而帶來(lái)了額外開銷;
③快中斷處理程序處于異常向量表的位置,因此可緊接異常向量表書寫快中斷處理程序,而不必進(jìn)行程序跳轉(zhuǎn)操作,避免了刷新指令流水線和高速緩存。
軟件中斷
編程異常通常叫做軟中斷,軟中斷是通訊進(jìn)程之間用來(lái)模擬硬中斷的 一種信號(hào)通訊方式,中斷源發(fā)中斷請(qǐng)求或軟中斷信號(hào)后,CPU或接收進(jìn)程在適當(dāng)?shù)臅r(shí)機(jī)自動(dòng)進(jìn)行中斷處理或完成軟中斷信號(hào)對(duì)應(yīng)的功能,軟中斷是軟件實(shí)現(xiàn)的中斷,也就是程序運(yùn)行時(shí)其他程序?qū)λ闹袛?;而硬中斷是硬件?shí)現(xiàn)的中斷,是程序運(yùn)行時(shí)設(shè)備對(duì)它的中斷。
①軟中斷發(fā)生的時(shí)間是由程序控制的,而硬中斷發(fā)生的時(shí)間是隨機(jī)的
?、谲浿袛嗍怯沙绦蛘{(diào)用發(fā)生的,而硬中斷是由外設(shè)引發(fā)的
?、塾布袛嗵幚沓绦蛞_保它能快速地完成它的任務(wù),這樣程序執(zhí)行時(shí)才不會(huì)等待較長(zhǎng)時(shí)間
2 響應(yīng)中斷和中斷返回
(1)當(dāng)中斷產(chǎn)生時(shí),ARM7TDMI將執(zhí)行的操作
?、侔旬?dāng)前程序狀態(tài)寄存器(CPSR)的內(nèi)容拷貝到相應(yīng)的備份程序狀態(tài)寄存器(SPSR)。當(dāng)前工作模式、中斷屏蔽位和狀態(tài)標(biāo)志被保存下來(lái)。
?、谵D(zhuǎn)入相應(yīng)的模式,并關(guān)閉常規(guī)中斷。如響應(yīng)快中斷,則同時(shí)關(guān)閉快中斷。
③把程序計(jì)數(shù)器(pc)的值減4后,存入相應(yīng)的連接寄存器(1r)。
?、軐⒊绦蛴?jì)數(shù)器指向相應(yīng)的中斷向量。
?。?)由中斷返回時(shí),ARM7TDMI將完成的操作
①將備份程序狀態(tài)寄存器的內(nèi)容拷貝到當(dāng)前程序狀態(tài)寄存器,恢復(fù)中斷前的狀態(tài)。
?、谇宄鄳?yīng)禁止中斷位(如果已設(shè)置的話)。
?、郯堰B接寄存器的值拷貝到程序計(jì)數(shù)器,繼續(xù)運(yùn)行原程序。
?。?)返回地址的計(jì)算
ARM7TDMI采用流水線結(jié)構(gòu):當(dāng)一條指令被執(zhí)行時(shí),下一條指令正被譯碼,而第三條指令被從內(nèi)存中取出。當(dāng)程序計(jì)數(shù)器未更新的,pc指向從內(nèi)存中取出的指令,(pc-4)指向當(dāng)前指令的一條指令。處理器響應(yīng)軟件中斷時(shí),由于軟件中斷由指令自身產(chǎn)生,程序計(jì)數(shù)器還沒有更新,(pc-4)正好指向當(dāng)前指令的下一條指令。因此,只要在中斷處理程序加入MOVS pc,lr把連接寄存器的值賦給程序計(jì)數(shù)器即可。ARM7TDMI總是在一條指令執(zhí)行完畢后,才去檢查是否有硬件中斷信號(hào)和中斷屏蔽狀態(tài)。此時(shí),程序計(jì)數(shù)器已經(jīng)更新,(pc-4)指向當(dāng)前指令的下兩條指令。因此要先把連接寄存器的內(nèi)容減去4(指向pc-8)后,再賦給程序計(jì)數(shù)器。要添加的代碼是SUBS pc,lr #4
3 中斷處理程序的編寫
?。?)軟件中斷處理程序的編寫
軟件中斷指令的格式如圖1所示。低24位立即數(shù)為軟件中斷號(hào)。在中斷處理程序中,必須首先得到軟件中斷號(hào),然后根據(jù)中斷號(hào)執(zhí)行不同代碼。以下的中斷處理程序,在軟件中斷號(hào)為1時(shí),將端口A的0號(hào)引腳置“1”。

STMFD sp!,{r0-r12,lr} //保存各工作寄存器
LDR r0,{lr,#-4} //得到該軟件中斷指令
BIC r0,r0,#0xff000000 //從中取出中斷號(hào)
ADR r2,SWIJumpTable //r2指向代碼入口表
LDR pc,[r2,r0,LSL #2] //把r0中的值乘4后加到r2。將//程序計(jì)數(shù)器指向中斷號(hào)對(duì)應(yīng)的代碼入口地址
SWIJumpTable //代碼入口表
DCD SWInum0
DCD SWInum1
……
SWInum0 //中斷號(hào)為0時(shí)的處理代碼(略)
SWInum1 //中斷號(hào)為1時(shí)的處理代碼
MOV r0,#0x80000000 //r0指向端口A
STRB r0,#0x01 //A口0腳置“1”
B EndofSWI //跳轉(zhuǎn)
EndofSWI
LDMFD sp! {r0-r12,pc} //恢復(fù)各寄存器,返回原程序
?。?)常規(guī)中斷處理程序的編寫
為快速執(zhí)行,常規(guī)中斷處理程序一般用匯編指令編寫。在編寫可重入常規(guī)中斷處理程序(運(yùn)行時(shí)仍可響應(yīng)常規(guī)中斷)時(shí),必須先把鏈接寄存器和程序用到的工作寄存器入棧,然后才能開放中斷;各寄存器出棧前,必須先關(guān)閉中斷。這樣可防止因寄存器崩潰而無(wú)法返回的情況發(fā)生。下文介紹了一個(gè)與中控制器相配置的可重入的常規(guī)中斷處理程序。當(dāng)若干中斷源同時(shí)有效時(shí),中斷控制器(基址為IntBase)把16個(gè)中斷源中優(yōu)先級(jí)的一個(gè)存入中斷寄存器(偏移地址為IntLevel)中,并發(fā)出硬件中斷信號(hào)。
SUB lr,lr,#4 //得至并保存返回地址
STMFD sp!,{lr}
MRS r14,SPSR //把SPSR和sl2入棧
STMFD sp!,{r12,r14}
MOV r12,#IntBase
LDR r12,[r12,#IntLevel] //將優(yōu)先級(jí)號(hào)存入r12
MRS r14,CPSR. //開中斷
BIC r14,r14,#0x80
MSR CPSR_c,r14
LDR PC,[PC,r12,LSL #2] //將pc指向該優(yōu)先級(jí)號(hào)對(duì)應(yīng)的處理代碼入口
NOP //補(bǔ)位
DCD Priority0Handler //代碼入口表
DCD Priority 1 Handler
DCD Priority 2 Handler
……
Priority0Handler //0優(yōu)先級(jí)中斷處理代碼
STMFD sp!,{r0-r11} //保存工作寄存器
……(略) //具體代碼
LDMFD sp!,{r0-r11} //恢復(fù)工作寄存器
MRS r12,CPSR //關(guān)中斷
ORR r12,r12,#0x80
MSR CPSR_c,r12
LDMFD sp!,{r12,r14} //恢復(fù)r12
MSR SPSR_csxf,r14 //恢復(fù)備用程序狀態(tài)寄存器(SPSR)
LDMFD sp!,{pc}^ //返回原程序
Priority 1 Handler //優(yōu)先級(jí)中斷處理代碼(略)
?。?)快中斷處理程序的編寫
為保證高速處理,快中斷處理程序必須要用匯編語(yǔ)言編寫,而且必須是非重入的。一般快中斷處理程序主要是些數(shù)據(jù)存取指令,就不具體介紹了。
結(jié)束語(yǔ)
中斷技術(shù)是處理器和系統(tǒng)芯片開發(fā)的重要技術(shù)??焖?、高效的中斷處理程序是實(shí)時(shí)多任務(wù)系統(tǒng)設(shè)計(jì)成功的關(guān)鍵。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問(wèn)題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- ARM技術(shù)架構(gòu)與應(yīng)用開發(fā)實(shí)踐指南2026/1/6 10:40:19
- 嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)選型與移植技術(shù)指南2025/12/31 10:42:31
- 工業(yè)嵌入式系統(tǒng):通信接口技術(shù)選型與抗干擾設(shè)計(jì)實(shí)踐2025/12/15 14:36:53
- 深入解析嵌入式 OPENAMP 框架:開啟異核通信新時(shí)代2025/7/22 16:27:29
- 一文快速了解OPENWRT基礎(chǔ)知識(shí)2025/7/14 16:59:04









