<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM內(nèi)核的中斷技術(shù)

          ARM內(nèi)核的中斷技術(shù)

          作者: 時(shí)間:2012-09-26 來源:網(wǎng)絡(luò) 收藏

          3 中斷處理程序的編寫
          (1)軟件中斷處理程序的編寫
          軟件中斷指令的格式如圖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ù)各寄存器,返回原程序
          (2)常規(guī)中斷處理程序的編寫
          為快速執(zhí)行,常規(guī)中斷處理程序一般用匯編指令編寫。在編寫可重入常規(guī)中斷處理程序(運(yùn)行時(shí)仍可響應(yīng)常規(guī)中斷)時(shí),必須先把鏈接寄存器和程序用到的工作寄存器入棧,然后才能開放中斷;各寄存器出棧前,必須先關(guān)閉中斷。這樣可防止因寄存器崩潰而無法返回的情況發(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í)中斷處理代碼(略)
          (3)快中斷處理程序的編寫
          為保證高速處理,快中斷處理程序必須要用匯編語(yǔ)言編寫,而且必須是非重入的。一般快中斷處理程序主要是些數(shù)據(jù)存取指令,就不具體介紹了。
          結(jié)束語(yǔ)
          是處理器和系統(tǒng)芯片開發(fā)的重要技術(shù)??焖?、高效的中斷處理程序是實(shí)時(shí)多任務(wù)系統(tǒng)設(shè)計(jì)成功的關(guān)鍵。


          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: ARM內(nèi)核 中斷技術(shù)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();