- Startup中断向量表
;*******************************************************************************
; Exception vectors
;*******************************************************************************
LDR PC, Reset_Addr ; 地址为0x8000 0000
LDR PC, Undefined_Addr
LDR PC, SWI_Addr
LDR PC, Prefetch_Addr
LDR PC, Abort_Addr
NOP ; Reserved vector
LDR PC, IRQ_Addr
LDR PC, FIQ_Addr
; *******************************************************************************
; Exception handlers address table
;*******************************************************************************
Reset_Addr DCD __program_start ;地址为0x8000 0020
Undefined_Addr DCD UndefinedHandler
SWI_Addr DCD SWIHandler
Prefetch_Addr DCD PrefetchAbortHandler
Abort_Addr DCD DataAbortHandler
DCD 0 ; Reserved vector
IRQ_Addr DCD IRQHandler
FIQ_Addr DCD FIQHandler
;*******************************************************************************
; Peripherals IRQ handlers address table
;*******************************************************************************
PRCCUCMU_Addr DCD PRCCUCMUIRQHandler ;地址为0x8000 0040
对于嵌入式系统来说,一般将上面产生的代码放在flash中,地址0x8000 0000(该sector同时remap到0x0000 0000)。将__program_start,UndefinedHandler等地址放到指令缓冲池中。从而可以实现全局范围内跳转。根据ARM指令长度可知,上述__program_start的地址存放的物理地址是0x8000 0020,根据ARM流水线的情况,LDR PC, Reset_Addr产生汇编语言指令为LDR PC, [PC, #24]。
当IRQ中断发生时,程序跳转到IRQHandler处。
- IRQHandler
IRQHandler