I've updated my linker file, so that the IVT should be located at 0x2300.
MEMORY
{
m_flash_config (RX) : ORIGIN = 0x000022F0, LENGTH = 0x00000010
m_interrupts (RX) : ORIGIN = 0x00002300, LENGTH = 0x00000100
m_foo_data (RW) : ORIGIN = 0x00002400, LENGTH = 0x00000400
m_bar_data (RW) : ORIGIN = 0x00002800, LENGTH = 0x00000400
m_baz_data (RW) : ORIGIN = 0x00002C00, LENGTH = 0x00000400
m_qux_data (RW) : ORIGIN = 0x00003000, LENGTH = 0x00000400
m_text (RX) : ORIGIN = 0x00003400, LENGTH = 0x0003CC00
m_data (RW) : ORIGIN = 0x1FFFE000, LENGTH = 0x00008000
}
Upon launching the debugger I can see the IVT at 0x2300, as well as the implemented ISR vectors at their respective offsets, in the memory view. My SCB->VTOR value is also set to the expected 0x2300. The only other thing I see, which I can't explain, is that when I inspect __VECTOR_TABLE it's value is still 0x20006000. I'm not sure if that's an issue or not. I have only these four ISRs implemented:
- ADC0_IRQn
- PIT_IRQn
- TPM2_IRQn
- LPUART0_IRQn
Does anyone know what's wrong here?