最近在看TI cortex-m3 芯片bootloader.
export __Vectors
__Vectors
dcd g_pulStack + (_STACK_SIZE * 4) ; Offset 00: Initial stack pointer
dcd Reset_Handler ; Offset 04: Reset handler
dcd NmiSR + 0x20000000 ; Offset 08: NMI handler
dcd FaultISR + 0x20000000 ; Offset 0C: Hard fault handler
dcd IntDefaultHandler + 0x20000000 ; Offset 10: MPU fault handler
dcd IntDefaultHandler + 0x20000000 ; Offset 14: Bus fault handler
dcd IntDefaultHandler + 0x20000000 ; Offset 18: Usage fault handler
dcd 0 ; Offset 1C: Reserved
dcd 0 ; Offset 20: Reserved
dcd 0 ; Offset 24: Reserved
dcd 0 ; Offset 28: Reserved
dcd UpdateHandler ; Offset 2C: SVCall handler
.....
UpdateHandler
;
; Initialize the processor.
;
bl ProcessorInit
;
; Load the stack pointer from the vector table.
;
movs r0, #0x00000000
ldr r0, [r0]
mov sp, r0
;
; Branch to the update handler.
;
if :def:_ENET_ENABLE_UPDATE
b UpdateBOOTP
else
b Updater
endif
通过上面的代码:发现SVCall handler直接升级应用程序的,那么应用程序如何才能执行这个SVC中断呢? |