基于ARM7軟中斷程序的設計-技術方案_第1頁
基于ARM7軟中斷程序的設計-技術方案_第2頁
基于ARM7軟中斷程序的設計-技術方案_第3頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

精品文檔-下載后可編輯基于ARM7軟中斷程序的設計-技術方案筆者在設計一項目時采用LPC2458。此CPU為ARM7內(nèi)核,帶512K字節(jié)的片內(nèi)FLASH,98k字節(jié)的片內(nèi)RAM,支持片外LOCALBUS總線,可從片外NORFLASH啟動CPU.由于代碼量較大,程序放在片外的NORFLASH中。且存在片外NORFLASH在運行程序時,需對片外的NORFLASH擦寫的需求。圖1為存儲部分框圖。

圖1存儲部分原理框圖

在設計中,片外NORFLASH的大小為16M字節(jié)。其中2M規(guī)劃為存放運行程序,剩余的空間用于產(chǎn)品運行日志,告警燈存儲空間。因此存在著在程序運行時對片外NORFLASH擦寫的需求。如果程序正在正常運行的片外FLASH中去擦寫FLASH,會存在總線沖突的問題,無法實現(xiàn)此功能。我們采用ARM7內(nèi)核的SWI軟中斷功能來實現(xiàn)。

2ARM軟中斷原理(SWI)

軟中斷(SWI)目前沒有找到任何的正式定義。筆者嘗試與硬中斷對比定義如下:

1.軟中斷發(fā)生的時間是由程序控制的,而硬中斷發(fā)生的時間是隨機的。

2.軟中斷是由程序調(diào)用發(fā)生的,而硬中斷是由外設引發(fā)的。

3.硬中斷處理程序要確保它能快速完成它的任務,這樣程序執(zhí)行時才不會等待較長的時間。

在C程序中調(diào)用軟件中斷需要用到編譯器的擴展功能,使用關鍵字“_SWI”來聲明中斷函數(shù)。注意軟中斷號碼同時在函數(shù)定義時指定。

_swi(0x24)voidmy_swi(void);

這樣當調(diào)用函數(shù)my_swi的時候,就會用“SWI0X24”來代替普通的函數(shù)調(diào)用“BLmy_swi”。

可以發(fā)現(xiàn)軟件中斷同樣存在著中斷分支的問題,即需要根據(jù)中斷號碼來決定調(diào)用不同的處理程序。軟中斷號碼只存在于SWI指令碼當中,因此需要在中斷處理程序中讀取觸發(fā)中斷的指令代碼,然后提取中斷號信息,再進行進一步處理。下面是軟中斷指令的編碼格式:

ARM狀態(tài)下的SWI指令編碼格式,32位長度,其中24位是中斷編號。

Thumb狀態(tài)下的SWI指令編碼格式,16位長度,其中低8位是中斷編號。

為了在中斷處理程序里面得到SWI指令的地址,可以利用LR寄存器。每當響應SWI的時候,處理器都會自動保存并調(diào)整LR寄存器,使里面的內(nèi)容指向SWI下一條指令的地址,所以把LR里面的地址內(nèi)容上溯一條指令就是所需的間隔不一樣,如果進入SWI執(zhí)行前是在ARM狀態(tài)下,需要通過LR-4來獲得SWI指令地址,如果是在Thumb狀態(tài)下進入,則只有LR-2就可以了。

下面是一段提取SWI中斷號碼的例程:

MRSR0,SPSR;檢查進入SWI響應前的狀態(tài)

TSTR0,#T_bit;是ARM還是Thumb?#T_bit=0x20

LDRNEHR0,[LR,#-2];是Thumb,讀回SWI指令碼

BICNER0,R0,#0xff00;提取低8位

LDREQR0,[LR,#-4];是ARM,讀

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論