色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          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)場(chǎng)保護(hù)都是反匯編(即把不是匯編的代碼轉(zhuǎn)換成匯編代碼)自動(dòng)保存的!

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

          本文引用地址:http://cafeforensic.com/article/201611/322694.htm

          一:?jiǎn)?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);

          二:?jiǎn)?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)知識(shí)。




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

          評(píng)論


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

          關(guān)閉