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.

Timer Interrupt?

Guru 15580 points

I have successfully generated an interrupt from the Timer2 (DSP event 25) and can see that EVTFLG0.EF25 is set. I have enabled IER6. But the ISR.IS6 is not set and no interrupt is occurring. What would prevent the interrupt from being serviced if the event flag is triggered?

Thx,

MikeH

 

  • Mike,

        Sounds like the DSP Interrupt Controller is not configured correctly to route the event to the DSP interrupt. You may want to double check the Interrupt Controller Settings.

  • Are you referring to the DSPINTC0DSP.INTMUX1? Here are the values showing that INTSEL6 is set for 0x19 (evt25). Which is reflected by the fact that EVTFLAG0.EF25 = 0x01 which says an interrupt was generated.

    INTMUX1 = 0x07190829

    _RESV_1 = *

    INTSEL7 = 0x7

    _RESV_3 = *

    INTSEL6 = 0x19

    _RESV_5 = *

    INTSEL5 = 0x8

    _RESV_7 = *

    INTSEL4 = 0x29

    Here is the event flag register

    DSPINTC0DSP

    EVTFLAG0 = 0x02001101

    EF31 = 0x0

    EF30 = 0x0

    EF29 = 0x0

    EF28 = 0x0

    EF27 = 0x0

    EF26 = 0x0

    EF25 = 0x1

    EF24 = 0x0

    which shows EF25 is set.

  • Hi Mike,

     

      Actually that just tells us that Event 25 was set, which means that the interrupt has reach the DSPINTC controller - it doesn't mean that the DSP received the interrupt from the controller. In fact the DSP doesn't even have an interrupt #25.

    You need to make sure the interrupt controller actually routes the detected event through the interrupt controller via the Event Selection Logic. You'll have to refer to the DSP MegaModule User's Guide for register specifics.  If the DSP interrupt service table is configured accordingly, you should see the interrupt generated by the CPU.

  • Drew Abuan said:
      Actually that just tells us that Event 25 was set, which means that the interrupt has reach the DSPINTC controller

     

    Wrong choice of words, I should have said that the event has reached the DSPINT controller.

  • Drew,

    Drew Abuan said:
    Actually that just tells us that Event 25 was set, which means that the interrupt has reach the DSPINTC controller - it doesn't mean that the DSP received the interrupt from the controller

    And if you look at my post above you can see that I have set the interrupt mux to send event 0x19 (25) to interrupt selector 6. 

    The real answer to my question is.....the interrupt was actually working all along. There were two issues with my not being able to see it happen.

    1. The BIOS interrupt dispatcher manages the setting and clearing of the DSP interrupts so that looking at the ISR.IS6 may or may not show the interrupt set.

    2. My timer routine did not set EMUMGT bits SOFT and FREE which, if not set, allow the timer to continue to run when emulation stops. Since my timeout value was very short (400 us) the timer timed out before I could see a count occurring, which led me to believe that the timer was not running when it actually was.

    So, my timer and interrupts now set properly and functioning as expected.