ARM單片機是大多數(shù)新手選擇的入門切入點,但由于知識的不足,在設(shè)計過程中新手們經(jīng)常會遇到這樣或那樣的問題,ARM異常中斷返回就是這樣一種令人頭疼的問題。在ARM的使用問題中異常中斷返回是新手們較為苦惱的問題,本文就將對ARM異常中斷的集中情況進行總結(jié),并給出了一些解決方法。
在正式介紹之前,要為大家補充一些較為重要的基礎(chǔ)知識。首先R15(PC)總是指向“正在取指”的指令,而不是指向“正在執(zhí)行”的指令或正在“譯碼”的指令。一般來說,人們習(xí)慣性約定將“正在執(zhí)行的指令作為參考點”,稱之為當(dāng)前第一條指令,因此PC總是指向第三條指令。當(dāng)ARM狀態(tài)時,每條指令為4字節(jié)長,所以PC始終指向該指令地址加8字節(jié)的地址,即:PC值=當(dāng)前程序執(zhí)行位置+8;而ADS中的pc,是為了調(diào)試看著方便而修改過的,它指向的是正在執(zhí)行的指令,即“真正pc-8”!
SWI和未定義指令異常中斷的返回
指令地址:
A PC-8當(dāng)前指令為SWI或未定義指令,此時發(fā)生中斷.PC的值還沒有更新。
A+4 PC-4中斷時處理器將PC-4保存到LR。;r!
A+8 PC
返回時,從發(fā)生中斷的指令A(yù)(PC-8)的下一條指令A(yù)+4(PC-4)處開始執(zhí)行,所以直接把LR的值賦給PC就行了,具體指令為MOV PC,LR(PC=A+4=LR)。
白話解釋:對于SWI和未定義指令發(fā)生異常時pc沒有更新,根據(jù)ARM的三級流水線原理,pc沒有更新,仍然等于(A+8);lr = pc – 4(這時處理器決定的,無法更改!)即A+4。
由于這類異常返回后應(yīng)執(zhí)行下一條指令(A+4),所以返回時,pc=lr即可。
IRQ 和FIQ異常中斷處理的返回指令地址對應(yīng)于PC A,PC-8執(zhí)行此指令完成后(!)查詢IRQ及FIQ,如果有中斷請求則產(chǎn)生中斷。
A+4 PC-4
A+8 PC ;lr!
(此時PC的值已經(jīng)更新,指向A+12.將當(dāng)前PC-4,即A+8)。
保存到LR.返回時,要接著執(zhí)行A+4(LR-4)處的指令,所以返回指令為:
SUBS PC,LR,#4(PC=A+4=LR-4)
白話解釋:對于普中斷和快中斷異常,中斷必須在一條指令執(zhí)行完以后被檢測到,如正在執(zhí)行指令甲時發(fā)生了中斷,不等指令甲執(zhí)行完是不會處理該中斷的,發(fā)生異常時pc已經(jīng)更新(A+12); lr=pc– 4(這時處理器決定的,無法更改!)即A+8返回后,應(yīng)執(zhí)行被中斷而沒有執(zhí)行的指令(上面的A+4),所以返回時,pc= lr-4。
指令預(yù)取中止異常中斷處理的返回
指令地址:
A PC-8 執(zhí)行本指令時發(fā)生中斷,A+4 PC-4處理器將A+4(PC-4)保存到:
LR. ;lr!A+8 PC
返回時,發(fā)生指令預(yù)取中止的指令A(yù)(PC-8)處重新執(zhí)行,所以返回指令為SUBS PC,LR,#4(PC=A=LR-4)。
白話解釋:對于預(yù)取指令中止異常發(fā)生預(yù)取指令異常時,是在執(zhí)行時發(fā)生的異常,pc未更新,即pc=A+8;lr=pc – 4(這時處理器決定的,無法更改!)即A+4。
由于這類異常返回后應(yīng)重新執(zhí)行異常的那個指令(A),所以返回時,pc = lr-4。
數(shù)據(jù)訪問中止異常中斷處理的返回
指令地址:
A PC-8 本指令訪問有問題的數(shù)據(jù),產(chǎn)生中斷時,PC的值已經(jīng)更新。
A+4 PC-4 中斷發(fā)生時PC=A+12,處理器將A+8(PC-4)保存到LR.。
A+8 PC ;lr!
返回時,要返回到A處繼續(xù)執(zhí)行,所以指令為SUBS PC,LR,#8.(PC=A=LR-8)
白話解釋:對于數(shù)據(jù)訪問中止異常時,是在執(zhí)行時訪問數(shù)據(jù)錯誤。
導(dǎo)致的異常,pc已經(jīng)更新,即pc=A+12。
lr=pc–4(這時處理器決定的,無法更改!)即A+8。
由于這類異常返回后應(yīng)重新執(zhí)行異常的那個指令(A),所以返回時,pc=lr-8。
總結(jié)
引起PC更新的原因一種是數(shù)據(jù)中止,還有就是中斷了。
中斷必須是在一條指令執(zhí)行完畢后才能被檢測到,所以它中斷的只是還未執(zhí)行的那條。指令(pc-8),所以pc=lr – 4;
與中斷相同,SWI和未定義指令異常也是返回到下一條指令(pc-4),只是他們在執(zhí)行時,PC的值并沒有更新,所以pc= lr。
預(yù)取指令中止異常,也沒有發(fā)生pc更新,但它還得重新執(zhí)行發(fā)生異常的那條指令,所以pc=lr–4。
數(shù)據(jù)訪問中止異常,發(fā)生了pc更新,并且它也需要重新執(zhí)行發(fā)生異常的那條指令,所以pc=lr–8。
通過以上的介紹,可以看到造成單片機中斷返回的原因非常多,每種方法的應(yīng)對方案都不盡相同。在ARM芯片調(diào)試過程中遇到中斷返回問題的朋友不妨仔細閱讀本文,相信會從中找到問題的解決方法。
上一篇:基于ARM和FPGA的開放性計算機數(shù)控系統(tǒng)
下一篇:學(xué)習(xí)ARM+Linux之前講解用ADS或RealViewMDK調(diào)試ARM開發(fā)板的原因
推薦閱讀
史海拾趣
在電子行業(yè)的初期,Compact公司憑借其卓越的技術(shù)研發(fā)團隊,成功開發(fā)出了一款具有顛覆性的新型半導(dǎo)體芯片。這款芯片不僅性能卓越,而且成本遠低于市場上的同類產(chǎn)品。憑借這一技術(shù)創(chuàng)新,Compact公司迅速獲得了市場份額,并在行業(yè)內(nèi)建立了良好的聲譽。隨著技術(shù)的不斷進步,Compact公司不斷推出新產(chǎn)品,鞏固了其市場地位。
在快速發(fā)展的過程中,Compact公司始終注重品牌建設(shè)和文化傳承。公司通過不斷提升產(chǎn)品質(zhì)量和服務(wù)水平,樹立了良好的品牌形象。同時,公司還注重培養(yǎng)員工的歸屬感和忠誠度,形成了獨特的企業(yè)文化。這種文化傳承不僅為公司的發(fā)展提供了強大的精神動力,還使公司在激烈的市場競爭中保持了獨特的競爭力。
隨著電子市場的日益成熟,Compact公司意識到單純的技術(shù)創(chuàng)新已不足以支撐其長期發(fā)展。于是,公司開始積極尋求市場拓展和戰(zhàn)略合作的機會。通過與國內(nèi)外知名企業(yè)建立合作伙伴關(guān)系,Compact公司成功將其產(chǎn)品打入國際市場,進一步擴大了市場份額。同時,通過與上下游企業(yè)的緊密合作,Compact公司實現(xiàn)了產(chǎn)業(yè)鏈的整合,提高了整體運營效率。
在便攜式應(yīng)用領(lǐng)域,多種器件整合已是必然。正如臺灣電源管理芯片廠商立锜科技指出:“未來基于空間小以及高效率的需求,整合勢在必行。”多輸入、多功能器件正開始將充電、監(jiān)控及管理功能集于一身。電源控制器和電源管理芯片(傳統(tǒng)上是相互關(guān)聯(lián)但又 ...… 查看全部問答∨ |
印刷電子當(dāng)選2010年影響世界的十大潛力新技術(shù) 2. 印刷電子 能快速印刷出多個導(dǎo)體/絕緣體或半導(dǎo)體層以形成電路的技術(shù),可望催生比目前采用傳統(tǒng)制程生產(chǎn)之IC成本更低芯片。通常印刷半導(dǎo)體意味著使用性能與硅大不相同 的有機材料,甚至所生產(chǎn)之組件尺寸也能超越硅材料的 ...… 查看全部問答∨ |
我想在cygwin下編譯基于目標(biāo)cpu i960的交叉編譯工具鏈 在編譯bootrap gcc的時候遇到一個libgcc1.a的問題 mv libgcc1.a libgcc1.cross || (echo You must find a way to make libgcc1.a; false) mv: cannot stat `libgcc1.a\': No such file or d ...… 查看全部問答∨ |
|
我這幾天用筆記本串口連接開發(fā)板(之前用臺式機正常),但是在超級終端下輸入顯示亂碼,而在dnw下輸入顯示正常。開發(fā)板像超級終端輸出顯示正常。 怎么才能在超級終端下正常輸入呢,請指教,謝謝!… 查看全部問答∨ |
中斷方式下,arm(嵌入式的linux)讀雙口ram的驅(qū)動中,讀ram只能一直處于阻塞狀態(tài),只有中斷來了才能喚醒讀。只能這樣嗎? 中斷方式下,arm(嵌入式的linux)讀雙口ram的驅(qū)動中,讀ram只能一直處于阻塞狀態(tài),只有中斷來了才能喚醒讀。只能這樣嗎? 而不能象單片機的中斷那樣,來了中斷直接進入中斷函數(shù)進行處理。… 查看全部問答∨ |
Pocket PC怎樣通過activesync連接到局域網(wǎng)? 我已經(jīng)安裝好Activesync4.2,Pocket PC通過USB線連接到我的電腦上,連接成功.我的電腦是連在局域網(wǎng)上的,怎樣將Pocket PC連到局域網(wǎng)上呢?… 查看全部問答∨ |
|
關(guān)于verilog語言綜合中l(wèi)atch的一些疑問? 1:如果變量沒有在IF語句的每個分支中進行賦值,將會產(chǎn)生latch。如果IF語句中產(chǎn)生了latch,則IF的條件中最好不要用到算術(shù)操作。Case語句類似。Case的條款可以是變量。如果一個變量在同一個IF條件分支中先贖值然后讀取,則不會產(chǎn)生latch。如果先讀取 ...… 查看全部問答∨ |
本帖最后由 jameswangsynnex 于 2015-3-3 19:54 編輯 用頭戴式耳機,尤其是小型耳機聽音樂,總感到音樂味不夠足,在低頻段的效果更差。因此用本機增強耳機的低頻特性,并采用立體聲反相合成的辦法,加上內(nèi)藏簡易矩陣環(huán)繞聲電路,能獲得強勁的低音 ...… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 英飛凌微控制器:以全新實惠套件和強大開發(fā)環(huán)境為開發(fā)者提供支持
- iTOP-i.MX6開發(fā)板設(shè)備數(shù)驅(qū)動Menuconfig的用法
- 迅為IMX6ULL開發(fā)板Qt for Android搭建開發(fā)環(huán)境
- 迅為i.MX8M mini開發(fā)板Windots QT系統(tǒng)開發(fā)環(huán)境搭建
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)使用Gstarwmra(一)
- 迅為IMX8M mini開發(fā)板Linix系統(tǒng)修改默認屏幕
- iTOP-4412開發(fā)板支持4G以上文件系統(tǒng)擴展
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)設(shè)置開機自啟動
- 迅為IMX6Q開發(fā)板 Buildroot文件系統(tǒng)mqtt測試
- 理想智駕的VLA模型及其結(jié)構(gòu)
- RoboSense發(fā)布真192線車載數(shù)字化激光雷達EMX,引領(lǐng)行業(yè)進入數(shù)字化可定制時代
- 2025年Q1移動機器人行業(yè)融資情況:18起,總額超16億
- 打造機器人安全新維度,詳析實時安全氣泡探測架構(gòu)
- SAE :L4級自動駕駛系統(tǒng)架構(gòu)
- 生命的證明 快速發(fā)展的健身、健康和保健的生物傳感器
- L0到L5技術(shù)躍遷圖譜:從駕駛輔助到完全自動駕駛的工程實現(xiàn)路徑
- 博世正式發(fā)布全新駕駛輔助品牌—博世縱橫輔助駕駛及其產(chǎn)品矩陣
- 基于高云Arora-V 60K FPGA實現(xiàn)的MIPI CPHY轉(zhuǎn)MIPI DPHY透傳模塊
- 博世2025上海車展展品亮點