This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Global Interrupt Enable Flag? Need help with interrupts...



Hi,

can anybody explain to me what the following function of the EXDSP_AudioFilter example does:

void SYS_GlobalIntEnable(void)
{
    asm(" BIT (ST1, #ST1_INTM) = #0");
}

Is there some global interrupt enable flag on the C5505 that has to be set? If yes, can it be accessed somehow else? I am still having the issue that my interrupt service routines are not executed. The flags in the IFR0 register are set properly, that means the interrupts happen, but the isrs are not executed.

When I try to use the cited GlobalIntEnable-function in my project, the code seems to jump into nirwana. I assume this is due to some compiler option that I am not using in the same way....

Regards,

Raphael

  •  

    Ok, in the meantime I found the TMS320C55x v3.x CPU Reference Guide, where the whole thing with the interrupt enable bit  is explained. The code still doesn't work, but I am setting the whole thing up using the Chip Support Library (CSL), which makes a lot of things much easier. Just to provide a hint in case someone has similar problems while getting started...

    Regards,

    Raphael

  • A couple of tips about getting interrupt to work on ezUSB:

    1. To set or reset the global interrupt mask, use

    asm(" BCLR INTM") // Enable interrupts

    asm(" BSET INTM") // Mask all

    Now make sure you use that SPACE before the B - took me a while to figure out why the assembler didn't like it.

     

    2. The setting for IVPD register which points to your interrupt vectors is set wrong in the GEL file i.e. the GEL file that sets this doesn't agree with the vectors created by the linker (Can't remember offhand the name of the linker file that does this). So if you want to use their vector space, you must set IVPD = 0x04FE (Again, working from memory so double check this, but you can find this by looking at your .map file and seeing where the interrupt vectors are being placed. IVPD provdes the upper 3 bytes of the base address for that space.)

     

    3. You have to really search the documentation for each interrupt you want to use. It usually takes twiddling the bits in the interrupt registers for the peripheral you're using PLUS twiddling bits in the IERx registers. So make sure you've got the entire pathway of enable bits set up. Oh, and some interrupt bits are cleared by writing a 1 to them, not a 0 - gets tricky.

     

    4. Interrupt vectors are created in the vectors.asm file. Look for a prototype copy provided by TI and modify to place your own vectors in there.

     

    Apologies for any vagueness, but just wanted to give SOME guidance so others don't have to spend the hours and hours it took me find all these pesky details.