Other Parts Discussed in Thread: CCSTUDIO
Hi, I am a software developer using TMS320 DM6446 EVM with an Emulator through JTAG, and I am using Windows CCStudio 5.3.
My task is to test the interrupt function of the 6446. Specifically Timer Interrupt. I have read through the DMSoC ARM Subsystem document, and set the corresponding registers to enable the interrupt. I created the vector table intvecs.asm according to the C Compiler guide (spnu151j). I believe I have done everything to make the interrupt work; yet program never jumps to the interrupt when the timer period is over.
Things I have done:
- Enabled the interrupts through the registers EINT0 & EINT1
- Modified the control register INTCTL
- Set the priority registers INTPRIx
- Cleared all the interrupt flags
- Wrote the interrupt function according to the guideline:
#pragma INTERRUPT (func, IRQ)
__interrupt void func (void) { printf("Interrupt!"); }
- Wrote the intvecs.asm according to the guideline, and mapped the interrupt function to the intvecs, at the precise location where the timer interrupt should go to (using IRQENTRY = (EABASE + 32 + 1)*SIZE)
- Tried to "initialize" the interrupt by:
CSL_intcInit();
CSL_intcDispatcherInit();
In the debug mode, from the Memory Map, I saw that all the Interrupt Registers are correct, and Timer Interrupt flag is asserted (last bit of IRQ1 is 0), and the IRQENTRY = 0x84 ( = 132 = (32+1)*4 = timer interrupt routine). But it never jumps to the interrupt routine (setting breakpoint at the routine and the program never stops there). The Assembly code shows that the vector table is entered correctly, i.e. a branching operation at the address 0x84. EABASE = 0.
Seems like the interrupt is masked in some way. I saw a PSC interrupt in the ARM document, but I don't think it matters. Is there anything that I have missed? Or did I not correctly initialized the interrupt controller? Any help will be greatly appreciated.
Regards,
AL