新聞中心

keil下ARM9按鍵中斷問題

作者: 時(shí)間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
一直糾結(jié)于MDK自帶啟動(dòng)文件不能中斷,以為文件少了一些配置,網(wǎng)上討論的也是沸沸揚(yáng)揚(yáng)?。。。。。。?!
其實(shí)不然?。。。。。。。。。。。。。。。。?!在一個(gè)好心的老師幫助及啟發(fā)下,發(fā)現(xiàn)只要把IRQ_Handler當(dāng)成中斷名稱就行了,現(xiàn)場保護(hù)都是反匯編(即把不是匯編的代碼轉(zhuǎn)換成匯編代碼)自動(dòng)保存的!

兩種方法實(shí)現(xiàn)中斷:

本文引用地址:http://m.butianyuan.cn/article/201611/322694.htm

一:啟動(dòng)文件的中斷向量表里,

IMPORT key_isr

ldr pc,=key_isr

LDR PC, FIQ_Addr

IF :DEF:__RTX

IMPORT SWI_Handler

IMPORT IRQ_Handler_RTX

ENDIF

ltorg

LDRPC, IRQ_Addr的IRQ_Addr直接改為中斷函數(shù)名稱(如上:key_isr);

二:啟動(dòng)文件里附上

HandleEINT0EQUIntVTAddress
HandleEINT1EQUIntVTAddress +4
HandleEINT2EQUIntVTAddress +4*2
HandleEINT3EQUIntVTAddress +4*3
HandleEINT4_7EQUIntVTAddress +4*4
HandleEINT8_23EQUIntVTAddress +4*5
HandleCAMEQUIntVTAddress +4*6
HandleBATFLTEQUIntVTAddress +4*7
HandleTICKEQUIntVTAddress +4*8
HandleWDTEQUIntVTAddress +4*9
HandleTIMER0 EQUIntVTAddress +4*10
HandleTIMER1 EQUIntVTAddress +4*11
HandleTIMER2 EQUIntVTAddress +4*12
HandleTIMER3 EQUIntVTAddress +4*13
HandleTIMER4 EQUIntVTAddress +4*14
HandleUART2EQUIntVTAddress +4*15
HandleLCD EQUIntVTAddress +4*16
HandleDMA0EQUIntVTAddress +4*17
HandleDMA1EQUIntVTAddress +4*18
HandleDMA2EQUIntVTAddress +4*19
HandleDMA3EQUIntVTAddress +4*20
HandleMMCEQUIntVTAddress +4*21
HandleSPI0EQUIntVTAddress +4*22
HandleUART1EQUIntVTAddress +4*23
HandleNFCONEQUIntVTAddress +4*24
HandleUSBDEQUIntVTAddress +4*25
HandleUSBHEQUIntVTAddress +4*26
HandleIICEQUIntVTAddress +4*27
HandleUART0 EQUIntVTAddress +4*28
HandleSPI1 EQUIntVTAddress +4*39
HandleRTC EQUIntVTAddress +4*30
HandleADC EQUIntVTAddress +4*31

IRQ_Entry
subsp,sp,#4;reserved for PC
stmfdsp!,{r8-r9}

ldrr9,=INTOFFSET
ldrr9,[r9]
ldrr8,=HandleEINT0
addr8,r8,r9,lsl #2
ldrr8,[r8]
strr8,[sp,#8]
ldmfdsp!,{r8-r9,pc}

兩種方法比較:第二種較第一種在編程時(shí)更靈活;

中斷實(shí)現(xiàn)過程中遇到的問題:

一,中斷函數(shù)里寄存器清零順序要注意從中斷源先開始清零,逐個(gè)順序到最頂層中斷控制,具體參考我的工程實(shí)例“中斷函數(shù)實(shí)現(xiàn)1和2”

二,發(fā)現(xiàn)必須要有去抖操作,否則可能會(huì)多次進(jìn)中斷,而且去抖方法為

1,可以在中斷里只設(shè)置標(biāo)志,然后在主函數(shù)里執(zhí)行服務(wù)函數(shù);

2,可以在清中斷寄存器(必須在最底層寄存器:EINT...清中斷)前面加延時(shí)函數(shù);

本人下一步要研究如何利用MMU來管理中斷向量等有關(guān)知識。




關(guān)鍵詞: keilARM9按鍵中

評論


技術(shù)專區(qū)

關(guān)閉