BBB Setting up the Interrupt Vector Table

Update!

I’ve solved my own problem and thought I’d share for any lost soul in the future who seeks these answers.

If you look at the technical reference manual for the am355x section 26-3 it shows an interrupt vector table which exists wildly far away from your application entrypoint. Upon closer inspection, I realized some entries are listed twice. This is because the interrupt vector table is actually a bunch of indirection.

If you want to set the IRQ branch address you specify the address at location 0x4030_CE38
If you want to set the pre-fetch abort address you specify the address at location 0x4030_CE2C

Example code:
// Set the IRQ handler to the entrypoint of the application + 24 bytes

*(0x4030_CE38 as *mut u32) = 0x402F_0400 + 0x18;

I assumed I needed to write an actual branch instruction to those locations. Which is where my confusion started. So if you are building a low-level kernel and are working with interrupts, just remember that the vector table can be updated by simply writing the correct address to your handler based on the vector table in the reference manual (not an actual branch instruction).