中斷實(shí)驗(yàn)課件_第1頁(yè)
中斷實(shí)驗(yàn)課件_第2頁(yè)
中斷實(shí)驗(yàn)課件_第3頁(yè)
中斷實(shí)驗(yàn)課件_第4頁(yè)
中斷實(shí)驗(yàn)課件_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、中斷實(shí)驗(yàn)程序介紹本實(shí)驗(yàn)以鍵盤中斷為例,介紹ARM微處理器中斷處理過(guò)程。實(shí)驗(yàn)現(xiàn)象:系統(tǒng)啟動(dòng)后,按12345678任意鍵,相應(yīng)的八段數(shù)碼管就會(huì)被點(diǎn)亮。AREA boot ,CODE ,READONLYENTRYB Reset_HandlerB Undefined_HandlerB SWI_HandlerB Prefetch_HandlerB DataAbort_HandlerNOPB IRQ_Handler B FIQ_HandlerUndefined_HandlerBUndefined_HandlerSWI_Handler BSWI_HandlerPrefetch_HandlerBPrefetc

2、h_HandlerDataAbort_HandlerBDataAbort_Handler;IRQ_Handler;BIRQ_FunctionFIQ_HandlerBFIQ_HandlerReset_Handler如果中斷處理程序所在的物理地址小于32MB,可使用B跳轉(zhuǎn)指令;當(dāng)跳轉(zhuǎn)范圍大于32MB時(shí),需使用LDR指令。對(duì)于程序中未使用的中斷,可使中斷異常跳轉(zhuǎn)到一個(gè)只含返回指令的啞函數(shù)或跳轉(zhuǎn)到自身標(biāo)號(hào)地址處,以防止中斷異常引起系統(tǒng)的混亂。NOP一定不能去掉,必須要保證中斷向量表正確建立。 中斷初始化過(guò)程處理器要對(duì)中斷進(jìn)行處理時(shí),需要對(duì)CPSR的IRQ和FIQ與ICMR(中斷控制器屏蔽寄存器)相應(yīng)的

3、中斷屏蔽位進(jìn)行正確的配置:即當(dāng)CPSR的IRQ 、FIQ 位為“0”時(shí),ARM 處理器可以響應(yīng)IRQ 、FIQ 中斷,如果為“1”時(shí),ARM 處理器將不響應(yīng)IRQ或FIQ中斷。同樣,當(dāng)ICMR 的相應(yīng)位為“1”時(shí),相應(yīng)的中斷被開啟,為”0”時(shí),相應(yīng)的中斷被屏蔽。IMPORT ICMRIMPORT init_ICMREXPORT Enableirq;*;Enable & Set Interrupt;*AREA Enableirq, CODE, READONLYENTRYmrs r1, CPSRbic r1, r1,#0 x80msr CPSR_c, r1ldr r1, =ICMRldr r2,

4、=init_ICMRstr r2,r1ENDInit.s鍵盤中斷開啟過(guò)程 ldr r1, =ICMR ;/讀取中斷控制屏蔽寄存器ldr r2, =init_ICMR; init_ICMR= x00000010str r2,r1; /開啟鍵盤中斷,屏蔽 其他所有中斷 LDR R1,=0 x40e00000 ;GAFR3_LLDR R0,=0 x020a9550 ;GPIO STR R0,R1,#0 x6C;GPDR3ldr R0,=0 x21380;GPIOSTR R0,R1,#0 x10c ldr r1,=0 x41500000;KPCldr r0,=0 x3FBFF9C3str r0,r1,

5、#0 x0ldr r0,=0 x707str r0,r1,#0 x48Init.s矩陣鍵盤接口電路四條行線分別對(duì)應(yīng):GPIO100、GPIO101、GPIO102、GPIO99四條列線分別對(duì)應(yīng):GPIO103、GPIO104GPIO105、GPIO96鍵盤掃描:先全部輸出“1”,確定行在逐列輸出“1”,確定列行輸入列輸出1031051049610110010299作為列線的GPIO引腳的復(fù)用功能作為行線的GPIO引腳的復(fù)用功能鍵盤控制寄存器第11位:矩陣鍵盤中斷使能-1第12位:矩陣鍵盤使能-1第13:20:位矩陣鍵盤掃描線設(shè)置,我們這里全列線設(shè)為掃描線。第23:25位:矩陣鍵盤列設(shè)置,可設(shè)為

6、最大值-111。第26:28位:矩陣鍵盤行設(shè)置,可設(shè)為最大值-111。第29位:自動(dòng)掃描設(shè)置-1鍵盤去抖寄存器KPKDI0 x707表示直入鍵盤和矩陣鍵盤的去抖時(shí)間都設(shè)為7ms主程序開始設(shè)置中斷向量表初始化內(nèi)存初始化堆棧初始化GPIO初始化中斷主程序等待中斷發(fā)生中斷發(fā)生跳轉(zhuǎn)到中斷向量表執(zhí)行中斷處理程序是否鍵盤中斷一旦外部中斷觸發(fā)時(shí),ARM處理器通過(guò)自己的硬件特性,執(zhí)行到中斷向量表,通過(guò)觸發(fā)的中斷類型來(lái)判斷到底執(zhí)行哪個(gè)中斷處理函數(shù),在這里只打開了鍵盤中斷,屬于外部中斷,因此當(dāng)鍵盤被按下時(shí),便產(chǎn)生鍵盤中斷,程序跳轉(zhuǎn)到IRQ_Handler 函數(shù)處運(yùn)行 Interrupt.c#include #de

7、fine LED_CS2 (*(volatile unsigned short int *)(0 x10300000) /LED1 and LED2#define LED_CS3 (*(volatile unsigned short int *)(0 x10400000) /LED3 and LED4#define KPAS_VALUE(*(volatile unsigned char *)(0 x41500020) /Matrix Keypad 自動(dòng)掃描寄存器int main(void) unsigned short int temp = 0 x8F8F;LED_CS2 = temp;LED

8、_CS3 = temp; while(1) /waiting for interruptreturn 0;Interrupt.cInterrupt.cvoid IRQ_Handler(void)IRQ_Function();void IRQ_Function(void)char i;unsigned short int kbd_buff;i = KPAS_VALUE;switch (i)case 0 x00:/key-press 1kbd_buff=0 x8F79;LED_CS2 = kbd_buff;LED_CS3 = 0 x8F8F;break;case 0 x01: /key-press 2kbd_buff=0 x248F;LED_CS2 = kbd_buff;LED_CS3 = 0 x8F8F;break; case 0 x12: /key-press 6kbd_buff=0 x028F;LED_CS2 = kbd_buff;LED_CS3 = 0 x8F8F; break;case 0 x20: /key-press 7kbd_buff=0 x8F78;LED_CS

溫馨提示

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

評(píng)論

0/150

提交評(píng)論