一向纠结于MDK自带发动文件不能中止,认为文件少了一些装备,网上评论的也是沸反盈天!!!!!!!!
其实不然!!!!!!!!!!!!!!!!!!在一个好意的教师协助及启发下,发现只要把IRQ_Handler当成中止称号就行了,现场维护都是反汇编(即把不是汇编的代码转换成汇编代码)主动保存的!
两种办法完成中止:
一:发动文件的中止向量表里,
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直接改为中止函数称号(如上:key_isr);
二:发动文件里附上
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}
两种办法比较:第二种较第一种在编程时更灵敏;
中止完成过程中遇到的问题:
一,中止函数里寄存器清零次序要注意从中止源先开端清零,逐一次序到最顶层中止操控,详细参阅我的工程实例“中止函数完成1和2”
二,发现有必要要有去抖操作,不然可能会屡次进中止,并且去抖办法为
1,能够在中止里只设置标志,然后在主函数里履行服务函数;
2,能够在清中止寄存器(有必要在最底层寄存器:EINT…清中止)前面加延时函数;
自己下一步要研讨怎么使用MMU来办理中止向量等有关常识。
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/xinnengyuan/255927.html