世俱杯 2025

登录 免费注册 世俱杯 2025 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

关于S3C44B0X的中断向量问题!

作者:lxr89c51 栏目:ARM技术
关于S3C44B0X的中断向量问题!
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
Re
快是快一些, 但是44b0没有MMU功能, 所有代码通常是在FLASH中运行的, 这样你就不能修改ISR的行为了,而原来的代码就可以这样:
pISR_TIME5 = (unsigned)OnPwmTimer5;
随时修改ISR, 改变ISR的行为.

修改ISR的行为还是很有必要的, 比如在启动时使用PWM5测量一下CPU的处理能力, 正常运行后使用PWM5作为Tick中断, RTC的Tick中断太慢了, 满足不了很多系统的要求.

3楼: >>参与讨论
lxr89c51
修改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.




参与讨论
昵称:
讨论内容:
 
 
相关帖子
请大家推荐ARM入门书籍
手抄器方案合作
44b0通过max3232与主机串口通讯时cts、rts脚接于不接有何不同?
7229432;西安ARM技术群,欢迎加入!
请教:下面这段话是什么意思?谢谢!


Copyright © 1998-2006 tgdrjb.cn 浙ICP证030469号