OK. Me too. I initialise the vectors this way in the crt.S:
__Vectors: LDR PC,Reset_Addr
LDR PC,Undef_Addr
LDR PC,SWI_Addr
LDR PC,PAbt_Addr
LDR PC,DAbt_Addr
NOP /* Reserved Vector */
LDR PC,IRQ_Wrapper_Addr
LDR PC,FIQ_Addr
/* Post-link processing stuffs a flash check(crc or checksum) value here.
This variable must be located at this address(0x20). */
.global flash_check
flash_check: .space 4
Reset_Addr: .word Reset_Handler
Undef_Addr: .word Undef_Handler
SWI_Addr: .word SWI_Handler
PAbt_Addr: .word PAbt_Handler
DAbt_Addr: .word DAbt_Handler
.word 0 /* Reserved Address */
IRQ_Wrapper_Addr: .word __IRQ_Wrapper
FIQ_Addr: .word FIQ_Handler
Undef_Handler: B Undef_Handler
SWI_Handler: B SWI_Handler
PAbt_Handler: B PAbt_Handler
DAbt_Handler: B DAbt_Handler
.size __Vectors, . - __Vectors
And i have the routines “Reset Handler”," __IRQ_Wrapper" and “FIQ_handler” in the same crt.S.
But the problem I guess, it’s that when there is an interrupt, the micro goes to adresses 0x00 - 0x20. But in these adresses, we find the interrupt vectors of the bootloader, but not the interrupt vectors of my application, which are at the start of ROM defined in 0x10000. So, in the bootloader, there shouldn’t be a copy of the IVT at this address 0x10000.
Uau! Sorry for such a long post…