Hi Kiran,
This is probably the just misunderstanding.
The command VECTOR ADDRESS 0xFE90D0 _Startup will store _Startup code address into position 0xFE90D0.
If you want to start your code at address 0xFE90D0 after reset, please use linker command VECTOR 0 0xFE90D0. This will store 0xFE90D0 number into reset vector (at address 0xFFFFFC).
The reset vector cannot by moved to any different address – it will be always at address 0xFFFFFC. The interrupt vectors may be relocated inside Flash/RAM by change IVBR register (content is set to default during reset). The vector base is a 24-bit address which is accumulated from the contents of the interrupt vector base register (IVBR, used as the upper 15 bits of the address) and 0x000 (used as the lower 9 bits of the address).
So, you could place vector table into any available aligned 512byte area in the memory map.
Default IVBR is 0xFFFE which specifies vectors located at 0xFFFE00–0xFFFFFF. The next IVBR value smaller than default is 0xFFFC (vectors located at 0xFFFC00–0xFFFDFF). The LSB bit in IVBR register is log0.
The vector order is fixed and cannot be modified, therefore, the related vector must be at appropriate address (e.g. vector base+0xF4 for Port AD interrupt). So, relocated vector have to be at address for example 0xFFFCF4 with IVBR=0xFFFC.
I hope it helps you.
Have a great day,
Radek
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------