因為ARM指令是三級流水線就是說取指,譯指,執行時同時執行的 ,這樣說吧,現在PC指向的是正在取指的地址,那么cpu正在譯指的指令地址是PC-4(假設在ARM狀態下,一個指令占4個字節),cpu正在執行的指令地址是PC-8.也就是說PC所指向的地址和現在所執行的指令地址相差8,盡管以后版本的指令流水線擴展為5級和8級,但是這一特性一直被兼容處理,也即pc(excute)=pc(fetch) - 8,其中:pc(excute)是當前正在執行的指令,就是之前取該指令時候的PC的值;pc(execute):當前指令執行的,計算中如果用到pc,是指此時pc的值。當突然發生中斷的時候,保存的是PC的地址。
(1)對于子程序的調用
如下面是一段S3C2440 ARM匯編代碼:
AREA Reset,CODE,READONLY
ENTRY
Start
MOV r0,#08
MOV r1,#08
BL zFun
MOV r0,#04
MOV r1,#08
zFun
MOV r0,#02
END
當0x30000008處的BL指令執行時,會把PC(=0x30000010)保存到LR寄存器里面,也就是LR=0x30000010。接下來處理器會立即對LR進行一個自動的更新動作:LR=LR-0x4,這樣,LR里面的地址為0x30000010 – 0x4 = 0x3000000C,它是指令”MOV r0,#04”的地址,所以當從子程序zFun返回時,LR里面正好是正確的返回地址。既是下一條要執行的指令的地址。
(2)中斷異常處理函數調用
異常就是正在執行的指令,由于各種軟件或硬件故障被打斷,比如,在讀數據或指令時,訪問存儲器失敗、產生了一個外部硬件中斷等。當這些情況發生時,在ARM系統里,由異常和中斷處理程序做出相應的處理,當處理完成后,要返回到被中止的指令,使被中止的指令能夠繼續正常執行下去。因此,確定異常和中斷處理程序的返回地址是一個非常重要的問題。
1、中斷處理
當外部中斷IRQ和FIQ(Fast Interrpt Request,快速中斷請求)發生時,ARM核完成一部分工作。當然,這些工作是任何異常發生時都必須要做的,所以ARM處理器就會自動帶我們完成。 其它重要的工作,必須由程序員來完成。ARM處理器處理的事包括從用戶模式切換到IRQ模式、狀態寄存器值的變化及跳轉。比如說,處理器自動跳轉到從0x0地址開始的異常中斷向量表的0x18處,在向量表的0x18處,最簡單的指令為”B HandlerIRQ”。
那程序員所要關心的就是實現具體的異常處理程序(HandlerIRQ)。當用ARM匯編語言實現HandlerIRQ函數的時候,如何確定HandlerIRQ函數正確地返回地址,使被中止的指令能夠繼續正常執行下去。
比較常用的中斷處理程序結構如下:
HandlerIRQ ;中斷響應,從向量表直接跳來
SUB r14,r14,#4 ;計算返回地址
STMFD r13,{r0-r3,r14} ;保護現場,一般只需要保護{r0-r3,lr}
BL irqHandler ;跳到具體的異常處理函數
LDMFD r13,{r0-r3,pc}^ ;恢復現場
通過”SUB R14,R14,#4”計算中斷函數的返回地址。為什么計算返回地址的時候要減去4呢?
我們看上個表,比如在執行地址為0x30000004的move指令時,突然來了一個IRQ中斷,這個中斷打斷了move指令的執行,這個時候就要去跳轉到異常處理函數,之后還要返回0x30000004地址重新執行move指令。當中斷發生時,LR里面保存了用戶模式下PC的值,那么當執行地址為0x30000004的move指令時,PC的值應該是0x3000000C,前面介紹過,當發生跳轉時,處理器會對LR進行一個自動的更新動作:LR=LR-0x4,這樣LR里面的地址是0x3000000C-0x04=0x30000008。但是0x30000008并不是我們要的地址,因為中斷發生在地址為0x30000004的move指令執行的時候,所以中斷處理完后應該返回這個地址。 這就是在計算返回地址的時候LR減去4的原因。對于FIQ中斷和預取指中止異常,計算返回地址方法和IRQ相同。
上一篇:ARM各種異常返回地址的計算
下一篇:ARM 軟中斷指令SWI
推薦閱讀
史海拾趣
D+H Mechatronic AG深知人才是企業發展的核心。因此,公司一直致力于培養和引進優秀人才,并建立了完善的培訓體系。通過內部培訓和外部引進相結合的方式,公司成功打造了一支高素質、專業化的技術和管理團隊。這支團隊不僅具備豐富的專業知識和實踐經驗,還具備良好的創新意識和團隊協作精神。他們的努力為公司的發展提供了源源不斷的動力。
品質是Enable Semiconductor Corp公司的生命線。公司從原材料采購到產品生產、從質量檢測到售后服務,都嚴格執行質量管理體系的要求。這種對品質的執著追求使得公司的產品在市場上享有良好的口碑。同時,公司還積極參與國際標準的制定和認證工作,不斷提升產品的國際競爭力。
面對日益激烈的國際競爭,Acmelux Taiwan Inc公司積極實施全球化戰略布局。公司先后在歐美、亞洲等地設立了研發中心和生產基地,以充分利用全球資源,提升公司的整體競爭力。通過與當地企業的合作與交流,Acmelux不僅拓展了國際市場,還吸收了大量先進的技術和管理經驗,為公司的持續發展注入了新的活力。
在電子行業競爭日益激烈的背景下,Allianc公司深知只有不斷創新才能保持競爭力。因此,公司加大了對研發創新的投入力度,建立了完善的研發體系和激勵機制。通過持續的創新和優化,公司不斷推出新產品和新技術,滿足了市場的不斷變化和消費者的多樣化需求。這些創新舉措不僅提升了公司的競爭力,也為公司的長期發展注入了新的動力。
Capax Technologies Inc的成功還得益于與各大企業的緊密合作。公司與多家知名的電子設備制造商建立了長期穩定的合作關系,為其提供高品質的組件和技術支持。通過與合作伙伴的共同努力,Capax Technologies Inc的產品得以廣泛應用在各類電子設備中,進一步提升了公司的知名度和市場份額。
Conditioning Semiconductor Devices Corp(簡稱CSDC)起初是一家小型半導體公司,專注于研發低功耗的芯片技術。隨著智能設備的普及,市場對節能型半導體的需求激增。CSDC通過不斷的研發投入,成功開發了一種全新的低功耗技術,顯著降低了設備的能耗,迅速在市場上獲得認可,從而實現了業務的快速增長。
在DSP的電機控制中,經常要用到方波輸出,就是常說的PWM,PTO。一般的控制方式采用的是使用2812的EV單元去產生對稱波形。但是在現代的一些控制領域,特別是位置控制領域,經常要實現開環控制脈沖個數,并產生多種頻率的脈沖輸出。EV是很難實現的。 ...… 查看全部問答∨ |
LDO LDO是low dropout regulator,意為低壓差線性穩壓器,是相對于傳統的線性穩壓器來說的。傳統的線性穩壓器,如78xx系列的芯片都要求輸入電壓要比輸出電壓高出2v~3V以上,否則就不能正常工作。但是在一些情況下,這樣的條件顯然是太苛刻了,如 ...… 查看全部問答∨ |
最近一段時間,接觸了好幾個具有 I2C 接口的從設備器件; 也對 I2C 的 WinCE 流驅動也有所了解。 開始用【查詢】方式實現了一個 I2C 流驅動; 現在準備用【中斷】方式實現 I2C 流驅動; 但是看了好幾遍【2410數據手冊】,都沒有看明白; 2410 ...… 查看全部問答∨ |
|
下載bootloader要擦除flash(spansion s29gl032a) 匯編寫的 flash容量4M 扇區:8x8k,63x64k bootloader只用了64k,故只擦除了前64k,結果時間很長,要60s左右 經過測試發現: 擦除大小 時間 8k 7s 16k&n ...… 查看全部問答∨ |
|
安裝了IAR5.2,破解失敗,怎么回事啊,用5.2的朋友進來看看 Fatal Error[Cp001]: Copy protection check, No valid license found for this product對程序進行編譯就會有這個錯誤,用軟件破解了啊,也在網上查了,但是還是沒有解決我卸載好幾遍了希望高手幫助啊… 查看全部問答∨ |
浴室的排風扇一直開著的話一方面浪費電源,另一方面不利于周圍洗浴溫度的上升。使用這樣一款浴室濕度調節器,就可以及時的調節浴室內的濕度,使其控制在一個可視的,溫度舒適的合理范圍內。這樣既可以節約能源又可以,避免浴室濕度過大視線受阻帶來 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 邁來芯高可靠可編程霍爾開關,5月21日 10:00 邀您觀看直播
- 新思科技技術日:硬件加速驗證解決方案專場 火熱報名中!
- 【已結束】TE 直播|如何有效應對當下測試測量領域的挑戰
- 答疑專場:模擬世界的最重要構成——信號鏈與電源
- TI 有獎直播 | 使用基于 Arm 的 AM6xA 處理器設計智能化樓宇
- 【已結束】直播“戴”“芯”:英飛凌可穿戴設備保姆級解決方案
- #micropython大作戰#多種參與姿勢,大家一起來玩micropython!
- 揭秘正確選擇探頭的5大要素 (泰克原裝探頭促銷,高貴不貴,199元起)
- 有獎直播:萬物互聯 -世健公司攜手Microchip專家,共同探討IoT解決方案