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.

C6678 ISR problem: using SRIO Doorbell and IPC at the same time

Hi,

I came across a very confusing phenomenon when using two ISRs on C6678 at the same time: one is for SRIO Doorbell and another one is for IPC.

 The condition is as follows: The program is running on CORE1. Doorbell interrupt come from FPGA and IPC interrupt come from CORE0, which connected to INT4 and INT5 respectively.

 Phenomenon: When using both ISRs, only the first Doorbell Interrupt can be triggered. The fact is there should be several Doorbells afterward. The strange thing is, when checking the Doorbel_ICSR register, we got the correct Doorbell info.When IPC is shut down, Doorbell ISR works normally.

 What cause the problem? Why can’t receive all the Doorbells when using both ISRs?

I' looking forward to your reply. Thanks a lot!

  • A couple things to check...

    1) Are you saying you can correctly receive and handle multiple Doorbell interrupts if IPC is not used?  If so, this means that you are correctly handling the clearing of the doorbell interrupt via the ICCR, and that you are correctly writing the pacing register.  Unless using SRIO INTDST16-23, you must write the pacing register for the DSP to receive each interrupt. Can you confirm?

    2) Are you getting doorbell retry responses in the FPGA?  The way the DSP handles doorbells is that if a doorbell comes in and attempts to set a doorbell ICSR bit that is already set, then the DSP sends a doorbell retry back to the sender.  It is the responsibility of the producer to resend the doorbell.  So, having said this, if the FPGA is sending doorbells faster than you are handling both the doorbell and IPC ISR, then you could be getting these retries and missing interrupts.

    Regards,

    Travis