最近一直在研究启动代码,看了友善的裸机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手册,里面对协处理器的这一位是这么描述的
[24] VE bit Banked Enables the VIC interface to determine interrupt vectors.
See the description of the V bit, bit [13].
0 = Interrupt vectors are fixed, reset value.
1 = Interrupt vectors are defined by the VIC interface.
做了实验,把这三条语句屏蔽掉,在发生IRQ时就可以从RESET入口处(地址0x0处)偏移相应的位置到IRQ入口(地址0x18处)。如果不屏蔽此三条语句,则不会跳到0x18处,而是直接跳到中断处理函数去了。
不知直接跳到中断处理函数,和跳到0x18处的区别是什么?是不是在0x18处可以先做寄存器保存的处理,而后再去中断处理函数?而直接去中断处理函数应该也可以做寄存器保存,但好像没见这么做的。
还请高手们能指点迷津,到底这么设置有什么区别。