




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、實驗五中斷限制實驗一 實驗?zāi)康?了解中斷的作用; 掌握嵌入式系統(tǒng)中斷的處理流程; 掌握ARM中斷編程.二實驗設(shè)備計算機;ARM硬件仿真器;ARM開發(fā)板三實驗硬件設(shè)置在做實驗之前,先將開發(fā)板電源接好,將仿真器的USB連線與電腦相連,通電,然后按核心板的復(fù)位鍵.四實驗原理1 .中斷的根本概念CPUW外設(shè)之間傳輸數(shù)據(jù)的限制方式通常有三種:查詢方式、中斷方式和DM防式.DMA方式將在后續(xù)實驗中說明. 查詢方式的優(yōu)點是硬件開銷小,使用起來比較簡單. 但在此方式下,CPU不斷地查詢外設(shè)的狀態(tài),當(dāng)外設(shè)未準(zhǔn)備好時,CPU只能循環(huán)等待,不能執(zhí)行其它程序,這樣就浪費了 CPU的大量時間,降低了 CPU的利用率.為
2、了解決這個矛盾, 通常采 用中斷傳送方式:即當(dāng) CPU進行主程序操作時,外設(shè)的數(shù)據(jù)已存入輸入端口的數(shù)據(jù)存放器; 或端口的數(shù)據(jù)輸出存放器已空,由外設(shè)通過接口電路向CPU發(fā)出中斷請求信號,CPU在滿足一定的條件下,暫停執(zhí)行當(dāng)前正在執(zhí)行的主程序,轉(zhuǎn)入執(zhí)行相應(yīng)能夠進行輸入/輸出操作的子程序,待輸入/輸出操作執(zhí)行完畢之后 CPUS返回并繼續(xù)執(zhí)行原來被中斷的主程序.這樣 CPU!預(yù)防了把大量時間消耗在等待、查詢狀態(tài)信號的操作上,使其工作效率得以大大地提 高.能夠向CPU發(fā)出中斷請求的設(shè)備或事件稱為中斷源.系統(tǒng)引入中斷機制后,CPU與外設(shè)甚至多個外設(shè) 處于“并行工作狀態(tài), 便于實現(xiàn)信息的實時處理和系統(tǒng)的故障
3、處理.中斷方式的原理示意圖如下所示.中斷喟應(yīng)斷點一中斷服葬孑程序中斷返回圖5-7中斷處理示意圖1) 中斷響應(yīng)中斷源向CPU發(fā)出中斷請求,假設(shè)優(yōu)先級別最高,CPU在滿足一定的條件下,可以中斷當(dāng)前程序的運行,保護好被中斷的主程序的斷點及現(xiàn)場信息.然后,根據(jù)中斷源提供的信息,找到 中斷效勞子程序的入口地址,轉(zhuǎn)去執(zhí)行新的程序段,這就是中斷響應(yīng).CPU響應(yīng)中斷是有條件的,如內(nèi)部允許中斷、中斷未被屏蔽、當(dāng)前指令執(zhí)行完等.2中斷效勞子程序CPU響應(yīng)中斷以后,就會中止當(dāng)前的程序,轉(zhuǎn)去執(zhí)行一個中斷效勞子程序,以完成為相應(yīng) 設(shè)備的效勞.中斷效勞子程序的一般結(jié)構(gòu)如以下圖所示.圖5-8中斷效勞子程序處理流程 保護現(xiàn)場
4、由一系列的壓棧指令完成.目的是為了保護那些與主程序中有沖突的寄存器,如R0, R1, R2等,如果中斷效勞子程序中所使用的存放器與主程序中所使用的存放 器等沒有沖突的話,這一步驟可以省略. 中斷處理,中斷處理程序在檢查到相應(yīng)的中斷源后,調(diào)用對應(yīng)的中斷處理程序完成. 恢復(fù)現(xiàn)場并返回由一系列的出棧指令完成.是與保護現(xiàn)場對應(yīng)的,但要注意數(shù)據(jù)恢復(fù)的次序,以免混亂.由于中斷效勞子程序需要打斷主程序的執(zhí)行,因此其處理應(yīng)該及時完成,較長時間的延時將導(dǎo)致系統(tǒng)性能嚴(yán)重下降.五實驗關(guān)鍵代碼及使用的存放器S3c44B0X勺中斷限制器包括 5類存放器:中斷限制存放器、中斷狀態(tài)存放器、中斷模式 存放器、中斷屏蔽存放器和
5、中斷去除存放器.1中斷限制存放器該限制存放器是處理器總的中斷限制,包括中斷模式是矢量模式還是非矢量模式,是否使能IRQ模式的中斷,是否使能 FIQ模式的中斷,具體說明如下:表5-3中斷限制存放器奇存器名稱地址讀 寫 狀 態(tài)描述復(fù)位值INTCON0X01E00000R/W中斷限制存放器0x7INTCON位描述初始狀態(tài)保存300V2IRQ禁止/使能向量模式0:向量中斷模式1:非向量中斷模式1I1使能CPU的IRQ中斷,在使用IRQ中斷之前,必須去除該 位0: IRQ中斷使能1: IRQ中斷禁止1F0使能CPU的FIQ中斷,在使用FIQ中斷之前,必須去除該 位0: FIQ中斷使能1: FIQ中斷禁止
6、12中斷狀態(tài)存放器該存放器用于檢查中斷來源,該存放器是只讀屬性的.表5-4中斷狀態(tài)存放器奇存器名稱地址讀 寫 狀 態(tài)描述復(fù)位值INTPND0X01E00004R指示中斷請求狀態(tài)0:中斷已被響應(yīng)1 :有中斷請求0x03中斷模式存放器用于設(shè)置相應(yīng)中斷的工作模式,是IRQ模式還是FIQ模式.表5-5中斷模式存放器奇存器名稱地址讀 寫 狀 態(tài)描述復(fù)位值INTMOD0X01E00008R/W中斷模式存放器0: IRQ模式1 : FIQ模式0x04中斷屏蔽存放器表5-6中斷屏蔽存放器奇存器名稱地址讀 寫 狀 態(tài)描述復(fù)位值INTMSK0X01E0000CR/W確定哪一個中斷 源被屏蔽,屏蔽的 中斷源將不引發(fā)
7、 中斷0:中斷效勞有效 1:中斷效勞屏蔽0X7FFFFFF5中斷去除存放器中斷處理之后需要去除相應(yīng)的標(biāo)志位,中斷去除存放器說明如下:表5-7中斷去除存放器存放器名稱地址讀 寫 狀 態(tài)描述復(fù)位值I_ISPC0X01E00024WIRQ中斷請求清0存放 器未定義F_ISPC0X01E0003CWFIQ中斷請求清0存放器未定義4. 44B0中斷處理S3c44B0X處理器的中斷處理與其他 CPU的處理模式根本上是一致的,只是由于它引入 了幾種不同的處理器模式,使中斷處理變得更加容易.其典型的步驟如下:1保存現(xiàn)場:當(dāng)系統(tǒng)出現(xiàn)中斷時,處理器首先要做的就是保存現(xiàn)場,這一過程包括:保存當(dāng)前的PC值到lr中,保
8、存當(dāng)前的程序運行狀態(tài)到spsr中.值得注意的就是由于 ARM7采用3級流水線結(jié)構(gòu),此時的 PC值實際上等于當(dāng)前指令地址加上8 ARM旨令時,所以返回時還需要將保存的 PC值減4;2模式切換:當(dāng)處理器完成現(xiàn)場保護后,就進入中斷模式,并將PC值置為一個固定的 值0X00000018,這也就是IRQ模式的中斷入口地址.在中斷模式下,有兩個獨立的存放器 R13 R14,這樣可以便于中斷程序使用自己特有的堆棧.但這樣隨之而來產(chǎn)生一個問題,就是中斷處理時堆棧溢出保護的問題,需要我們認(rèn)真地估計堆棧的大小,同時在中斷處理時也要盡量減少函數(shù)調(diào)用的層次,否那么將產(chǎn)生一些不可預(yù)知的錯誤;3獲取中斷源:所有的IRQ中
9、斷都從0X00000018開始執(zhí)行,通常在該地址處放一條跳 轉(zhuǎn)指令,進一步跳到我們的中斷程序中;4處理中斷:在中斷程序中需要進一步獲取中斷源,即誰引發(fā)了該中斷,然后通過查表獲取相應(yīng)中斷的處理程序入口,并調(diào)用對應(yīng)的函數(shù);5中斷返回,恢復(fù)現(xiàn)場:在返回時需要恢復(fù)處理器模式,包括恢復(fù)中斷處理用到的所有存放器、恢復(fù)被中斷的程序運行狀態(tài)到CPSR并跳轉(zhuǎn)到被中斷的主程序.以下圖為JX44B0教學(xué)實驗系統(tǒng)中處理外部中斷0的流程:HandlerIRQPC. =0X00000020圖5-8 JX44B0中斷處理示意圖中斷的入口代碼匯編代碼0X00000018:LDR pc, =0X0C0000200X0C0000
10、20:HandlerIRQ:sub sp,sp,#4stmfd sp!,r0ldr r0,=HandleIRQ /*ldr r0,r0str r0,sp,#4ldmfd sp!,r0,pc /*bHandlerIRQ/*為中斷分發(fā)例程入口地址預(yù)留??臻g*/* 保存R0 */將中斷分發(fā)例程入口地址指針保存到R0中*/*將中斷分發(fā)例程入口地址保存到R0中*/*將中斷分發(fā)例程入口地址保存到預(yù)留的堆棧空間*/將R0和中斷分發(fā)例程入口地址出棧,這條指令也*/*實現(xiàn)了一個跳轉(zhuǎn)*/上述代碼實際上就是一個三級跳,即從FLASH中跳到了 RAM勺中斷入口,然后又從中斷入口跳到中斷分發(fā)例程入口.在此我們有一個前提
11、條件,即必須在HandleIRQ地址處保存正確的分發(fā)例程入口地址,如使用下面代碼后IsrIRQ就是中斷分發(fā)例程:ldrr0,=HandleIRQldrr1,=IsrIRQstrr1,r0中斷分發(fā)例程可以采用匯編語言和C語言兩種格式編寫,下面將分別列出這兩種方式.1用匯編代碼編寫的中斷分發(fā)例程:IsrIRQ:/*using I_ISPR register.*/sub lr,lr,#4 stmfd sp!,lr /* stmfd sp!,r0-r4 /* subsp,sp,#4 /*stmfd sp!,r8-r9 /* ldr r9,=I_ISPR /* ldr r9,r9 cmpr9,#0x0/
12、*beqi2mov r8,#0x0/*R8i0:/*movs r9,r9,lsr #1 bcs i1 add r8,r8,#4 b i0/*保存中斷返回的PC值*/備份存放器 R0-R4 */為PC預(yù)留??臻g*/備份存放器 R8-R9 */讀取中斷狀態(tài) */檢查中斷狀態(tài)*/保存中斷表的偏移*/逐位檢查中斷狀態(tài)*/*如果該位等于1,那么處理這一中斷*/*修改當(dāng)前的中斷偏移*/處理下一比特*/i1:ldrr9,=HandleADC /* HandleADC位于中斷向量表起始位置,我們將該地址用作是中斷向add r9,r9,r8 ldr r9,r9/*strr9,sp,#8mov lr,pc /*
13、ldmfd sp!,r8-r9,pc ldmfd sp!,r0-r4, pcA/*i2: ldmfd sp!,r8-r9 /* addsp,sp,#4ldmfd sp!,r0-r4, pc-/*量表的基地址 */* 計算入口地址指針:中斷基地址加上偏移*/從地址向量表中獲取入口地址*/*將入口地址保存到堆棧,并移動堆棧指針 */保存當(dāng)前PC*/*調(diào)用中斷例程*/中斷返回,并恢復(fù)中斷前的處理器模式*/如果當(dāng)前沒有任何中斷,直接返回 */*移動堆棧指針,該空間由第 4句指令預(yù)留*/中斷返回,并恢復(fù)中斷前的處理器模式*/2用C代碼編寫的中斷分發(fā)例程:如果采用GN喻譯器,需要將該函數(shù)定義為中斷類型,使
14、用關(guān)鍵字:_attribute_(interrupt("IRQ") .如下所示代碼為C語言的IsrIRQ 實現(xiàn):typedef (*ISR_ROUTINE_ENTRY)(void);void IsrIRQ() _attribute_ (interrupt("IRQ");void IsrIRQ()int count = 0;unsigned int isr_pending;unsigned int isr_mask = 0x00000001;unsigned int isr_mask_set = rINTMSK; /* 讀取中斷掩碼 */ISR_ROUTI
15、NE_ENTRY isr_routine_entry = (ISR_ROUTINE_ENTRY)0x0;/*讀取中斷狀態(tài)*/isr_pending = (rINTPND & isr_mask_set);/*查表*/ while(isr_mask)if(isr_pending&isr_mask) /*找到中斷源,獲取中斷例程入口地址*/isr_routine_entry = (ISR_ROUTINE_ENTRY)(*(int*)(HandleADC+count); break;count+=4;isr_mask <<= 1;/*調(diào)用中斷效勞例程*/if(isr_rou
16、tine_entry) (*isr_routine_entry)();中斷處理例程(該函數(shù)無需定義為中斷類型)void EINT0_Isr()rI_ISPC=BIT_EINT0;/* 去除中斷標(biāo)志 */中斷向量表中各個中斷的偏移表5-8中斷向量表中各個中斷的偏移中斷源向量表的偏移ADC AD轉(zhuǎn)換中斷0X20RTC實時時鐘中斷0X24六實驗內(nèi)容1編譯/執(zhí)行程序2跟蹤/調(diào)試程序3斷點的設(shè)置與取消4下載程序與調(diào)試七實驗步驟1 .參照模板工程 interruptmodulesinterruptinterrupt.apj,新建一個工程interrupt ,添加相應(yīng)的文件,并修改 interrupt 的工程設(shè)置;2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 技術(shù)合同涉稅政策
- 電商行業(yè)買賣合同
- 辦公樓裝飾施工方案
- 長期供貨合同的協(xié)議書
- 員工考勤記錄表格系列
- 設(shè)備采購預(yù)算表格化統(tǒng)計分析報告
- 合同執(zhí)行進展一覽表
- 宿州拆煙囪施工方案
- 兒童廁所改造施工方案
- 別墅背景墻大理石施工方案
- 2025年開封文化藝術(shù)職業(yè)學(xué)院單招職業(yè)技能測試題庫含答案
- 2025年遼寧冶金職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫有完整答案
- 2025年安徽揚子職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫(各地真題)
- 2025年共青科技職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫完整版
- 煙草職業(yè)鑒定三級技能考點
- 2025年上半年潛江市城市建設(shè)發(fā)展集團招聘工作人員【52人】易考易錯模擬試題(共500題)試卷后附參考答案
- 2024年江西應(yīng)用工程職業(yè)學(xué)院單招職業(yè)技能測試題庫標(biāo)準(zhǔn)卷
- 2023《住院患者身體約束的護理》團體標(biāo)準(zhǔn)解讀PPT
- 星巴克運營管理手冊
- 人教鄂教版小學(xué)科學(xué)三年級下冊全冊教案教學(xué)設(shè)計
- 2鋼結(jié)構(gòu)工程常用構(gòu)件代號及相關(guān)知識
評論
0/150
提交評論