依韵 发表于 2012-5-2 17:26:05

关于6410的中断向量的问题

最近一直在6410研究启动代码,看了友善的裸机startup.s,里面有三条语句:
;------------------------------------
;   Enable VIC Port @Andrew Huang
;------------------------------------
mrc p15,0,r0,c1,c0,0
orr r0,r0,#(1<<24)
mcr p15,0,r0,c1,c0,0
查了ARM1176手册,里面对协处理器的这一位是这么描述的
          VE bit       Banked      Enables the VIC interface to determine interrupt vectors.
See the description of the V bit, bit .
0 = Interrupt vectors are fixed, reset value.
1 = Interrupt vectors are defined by the VIC interface.
做了实验,把这三条语句屏蔽掉,在发生IRQ时就可以从RESET入口处(地址0x0处)偏移相应的位置到IRQ入口(地址0x18处)。如果不屏蔽此三条语句,则不会跳到0x18处,而是直接跳到中断处理函数去了。
不知直接跳到中断处理函数,和跳到0x18处的区别是什么?是不是在0x18处可以先做寄存器保存的处理,而后再去中断处理函数?而直接去中断处理函数应该也可以做寄存器保存,但友善的裸机程序好像没见这么做的(有可能就是凑合一下)
还请高手们能指点迷津,到底什么时候需要这么设置,或者这么设置的具体用途是什么....

依韵 发表于 2012-5-7 10:15:07

难道没人研究6410吗……{:sad:}

snic_k 发表于 2012-5-7 23:36:49

那三条语句是ENABLE VIC中断模式。意思是直接跳转到具体的中断服务程序,而不经过中断向量表。因6410的IRQ及FIQ中断向量表是共用的,即所有的IRQ及FIQ中断都是跳到中断向量表取中断服务入口地址,再然后在中断服务程序中进行判断是哪个具体的IRQ或FIQ引发的中断。而采用VIC模式则可以跳过以上这一步,加快中断响应速度。

依韵 发表于 2012-5-8 14:35:40

snic_k 发表于 2012-5-7 23:36 static/image/common/back.gif
那三条语句是ENABLE VIC中断模式。意思是直接跳转到具体的中断服务程序,而不经过中断向量表。因6410的IRQ ...

那是否这种直接跳转到中断处理函数的做法只适用于裸机程序呢,如果有操作系统的话,当发生中断嵌套时系统岂不会乱.....

snic_k 发表于 2012-5-8 17:29:24

对于你的这个问题,我还真没法问答。。因为我也才学6410没多长时间。。还在BOOTLOAD阶段徘徊。。。
页: [1]
查看完整版本: 关于6410的中断向量的问题