|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
关于S3C44B0X的中断向量问题! |
作者:lxr89c51 栏目:ARM技术 |
S3C44B0X有中断向量和非中断向量,两种模式;在例程中,非中断向量的调用,多了一段:IsrIRQ程序,用来判断是第几号中断,并读取相应的地址.然后跳转到中断程序入口.这段程序执行时间长. 而采用中断向量,则PC指针会直接跳到中断向量表,并从中断向量表(0X20开始)读取地址.而例程中则会执行一段宏替换: MACRO $HandlerLabel HANDLER $HandleLabel $HandlerLabel sub sp,sp,#4 ;decrement sp(to store jump address) stmfd sp!,{r0} ;PUSH the work register to stack(lr does not PUSH because it return to original address) ldr r0,=$HandleLabel ;load the address of HandleXXX to r0 ldr r0,[r0] ;load the contents(service routine start address) of HandleXXX str r0,[sp,#4] ;store the contents(ISR) of HandleXXX to stack ldmfd sp!,{r0,pc} ;POP the work register and pc(jump to ISR) MEND 从宏中,可以看出.1:保存了R0的值.2:并读取中断程序地址 ,然后再跳到相应的地址执行. 现在的问题: 1:采用中断向量的目的是缩短中断响应的时间,但加入了这段宏,时间变长. 2:用必要保存R0吗? 3:在中断向量表中直接,添加中断程序地址,跳开宏的执行.可以吗? 原表: VECTOR_BRANCH ldr pc,=HandlerEINT0 ;mGA H/W interrupt vector table ldr pc,=HandlerEINT1 ; ldr pc,=HandlerEINT2 ; ldr pc,=HandlerEINT3 ; ldr pc,=HandlerEINT4567 ; Eint4567 ; ldr pc,=HandlerTICK ;mGA 新表: VECTOR_BRANCH ldr pc,=HandleEINT0 ;mGA H/W interrupt vector table ldr pc,=HandleEINT1 ; ldr pc,=HandleEINT2 ; ldr pc,=HandleEINT3 ; ldr pc,=HandleEINT4567 ; Eint4567 ; ldr pc,=HandleTICK ;mGA HandleEINT4567 # 4 HandleEINT3 # 4 HandleEINT2 # 4 HandleEINT1 # 4 HandleEINT0 # 4 在程序中将 HandleEINT4567 .... 空间的添加好中断程序地址. 这样执行速度会变快! 希望大家发表意见...... |
2楼: | >>参与讨论 |
作者: rockos 于 2006/6/9 15:28:00 发布:
Re 快是快一些, 但是44b0没有MMU功能, 所有代码通常是在FLASH中运行的, 这样你就不能修改ISR的行为了,而原来的代码就可以这样: pISR_TIME5 = (unsigned)OnPwmTimer5; 随时修改ISR, 改变ISR的行为. 修改ISR的行为还是很有必要的, 比如在启动时使用PWM5测量一下CPU的处理能力, 正常运行后使用PWM5作为Tick中断, RTC的Tick中断太慢了, 满足不了很多系统的要求. |
3楼: | >>参与讨论 |
作者: lxr89c51 于 2006/6/9 18:49:00 发布:
修改ISR的行为可以实施! 新表: VECTOR_BRANCH ldr pc,=HandleEINT0 ;mGA H/W interrupt vector table ldr pc,=HandleEINT1 ; ldr pc,=HandleEINT2 ; ldr pc,=HandleEINT3 ; ldr pc,=HandleEINT4567 ; Eint4567 ; ldr pc,=HandleTICK ;mGA ^ RAM_ADDER ;初始化添入! HandleEINT4567 # 4 HandleEINT3 # 4 HandleEINT2 # 4 HandleEINT1 # 4 HandleEINT0 # 4 可以修改ISR:(在程序中!) pISR_TIME5 = (unsigned)OnPwmTimer5; 请仔细看: 是:HandleEINT4567 不是:HandlerEINT4567 中间少一个r. |
|
|
Copyright © 1998-2006 tgdrjb.cn 浙ICP证030469号 |