SPRUGR0B is conflicting when it is describing how interrupts are handled.
I haven't been able to find any other information on this topic.
When booting out of SRAM, the interrupt vectors are set to points in the ROM code:
0x14000, reset entry point into ROM code
0x14004, LDR PC,0x4020FFC8 (part of the internal SRAM) for Undefined Exception
0x14008, LDR PC,0x4020FFCC for SWI
0x1400C, LDR PC,0x4020FFD0 for Prefetch abort
0x14010, LDR PC,0x4020FFD4 for Data abort
0x14014, LDR PC,0x4020FFD8 for Unused (?)
0x14018, LDR PC,0x4020FFDC for IRQ
0x1401C, LDR PC,0x4020FFE0 for FIQ
So if I want to handle one of those interrupts, I would write the address of the handler to one of the addresses in the range 0x4020FFC8-0x4020FFE0.
Great, fine, wonderful, dandy.
What's not clear is how I would handle an IRQ or an FIQ in this mode, because section 8.5.2 says that when INCPS_MIRn and INTCPS_ILRm register are configured to enable and assign priorities to incoming interrupts, the interrupts are processed MUCH differently. NOTE: that doesn't mean ANYTHING for Undefined, SWI, Prefetch/Data abort, etc. What gives? Is this just documented incorrectly? I can't find any explanation for this anywhere. When I look for interrupt or IRQ on the processor wiki, I seem to come up dry.
So if I take an IRQ or FIQ interrupt, whether I'm in SRAM or in SDRAM, what really happens?
MORE IMPORTANTLY, what happens AFTER I'm no longer running from SRAM? Where do I configure the vectors for IRQ and FIQ? The pseudo code says either 0xFFFF0018 or 0x00000018 for IRQ (depending on if high vectors are selected or not), or 0xFFFF001C or 0x0000001C for FIQ.
Finally, since the address map is pretty well fixed, how do I put a value into 0xFFFF0018 or 0x00000018 or 0xFFFF001C or 0x0000001C?
There doesn't appear to be any memory there. The memory map for the part shows that 0x00000000 is part of the GPMC. 0xFFFFxxxx is part of EMIF4/SMS virtual address space 1, which I don't believe I'm using. SDRAM is from 0x80000000 to 0xBFFFFFFF.
Lastly, what's the deal with the locations of the boot ROM code? They're not the same. Section 24 says 0x14000, which conflicts with the GPMC, but the Global Memory Space Mapping says 0x40014000 is the start of the public boot ROM code. The debugger (which STILL isn't working correctly, if anyone but James cares), shows exceptions running from 0x140080 - 0x1401C.
Also, perhaps it's documented elsewhere, but I haven't seen it... this chip does not have a DSP in it, despite what SPRUGR0B says in the GPIO module.