I am trying to enable ARM Interrupts in the "Boot Images" example http://processors.wiki.ti.com/index.php/Boot_Images_for_OMAP-L137. Since the original ARM linker script did not have anything for the interrupts I added missing lines as:
.svcstack > SHAREDRAM /* Supervisor Mode Stack */
.irqstack > SHAREDRAM /* IRQ Interrupt Stack */
.fiqstack > SHAREDRAM /* FIQ Interrupt Stack */
.sysmem > SHAREDRAM /* Dynamic Memory Allocation Area */
.cio > SHAREDRAM /* C I/O Buffer */
.intvecs > ARMRAM /* Interrupt Vectors */
.data > SHAREDRAM
I also pasted the three required asm files (ARM9_handler.asm, ARM9_initstack.asm and ARM9_intvecs.asm) in the ARM project directory. After the arm project is compiled I update the entry point address DEVICE_ARM_UBL_LOAD_ADDR in the DSP code and expect it to run with the interrupts supported. The interrupts I tried are CHIP_SIG2 and Timer1. Both run perfectly if the code is run through a debugger. But if I try to run from flash the ARM code crashes immediately after the first interrupt happens. With interrupts disabled (enable_IRQ() commented out) the ARM runs perfectly even from the flash memory (LEDs blink, a record in shared RAM is updated continuously). The ARM is in the supervisor mode (switched in boot.asm, CPSR mode bits are 10011).
So, the question is how can I make the ARM interrupts work? On the DSP side everything is fine, the interrupts and everything else are fully functional.