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 SIR: 同时开SRIO Doorbell中断和IPC中断

最近将两个核的工程连起来调试,遇到了一些问题,在此请教一下。
 
现在的状态是:core0 跑接口工程,开IPC中断,指向INT4。core1跑应用工程,使用SRIO与FPGA通信,开SRIO中断,使用专用中断INTDST_17,同时开IPC中断,分别指向INT4 INT5.
 
现象是,两核的Ipc通信正常,但是doorbell中断不正常。运行时,只能触发第一个doorbell中断,此后的doorbell无法触发,但是查看相应的ICSR寄存器,其中的doorbell信息均正确。关掉IPC中断后,doorbell中断恢复正常。
 
为什么会产生这样的现象?为什么后面的doorbell中断无法触发?
  • 1.有没有可能是IPC中断处理时间太长,全局中断关的时间比较久,导致Doorbell中断丢失。

    2.您用的IPC是IPC local还是用QMSS实现的IPC。

  • Zhan Xiang,

    很感谢您的回复。

    对于第一个回复:在等待Doorbell中断时,没有触发IPC中断,是否还存在这种可能?

    对于第二个回复:怎样区分是Ipc local还是QMSS?好像在做的时候没有关注过这个问题,您能解释一下吗?

  • 1. 你是说当core1中断配置完成后,不触发IPC中断,doorbell可以正常响应,一旦开始触发IPC中断doorbell就工作不正常了,还是说只要配置完成后,不管IPC有没有触发,doorbell都不能正常响应,只有把IPC中断配置去除后,doorbell才能正常响应。

    2. IPC Local是每个core通过寄存器来触发其他core的中断,而QMSS是通过往队列里push 描述符来通知其他core,如果是QMSS并且使用cic映射了event,这时后中断的处理需要关中断和重新使能中断的要求。

  • 情况是这样的,

    1.只要配置完成后,不管IPC有没有触发,doorbell都不能正常响应,只有把IPC中断配置去除后,doorbell才能正常响应。

    2.使用的是IPC Local.

  • 看起来像是中断的mux 寄存器配置不对,能查一下吗。

  • 我在中断初始化函数中写了如下语句,

    CGEM_regs->INTMUX1=(CSL_GEM_INTDST_N_PLUS_16<<CSL_CGEM_INTMUX1_INTSEL4_SHIFT);

    CGEM_regs->INTMUX1=(CSL_GEM_IPC_LOCAL<<CSL_CGEM_INTMUX1_INTSEL5_SHIFT);

    ...

    IER=3 | (3<<4);

    还有,需要说明的是,Doorbell第一次正常,后面不正常。

  • CGEM_regs->INTMUX1=(CSL_GEM_INTDST_N_PLUS_16<<CSL_CGEM_INTMUX1_INTSEL4_SHIFT);

    CGEM_regs->INTMUX1 |=(CSL_GEM_IPC_LOCAL<<CSL_CGEM_INTMUX1_INTSEL5_SHIFT);


    第二个语句应该用或,不能直接赋值的。我用红色标明了。

  • 看来还是理解不到位呀。问题已经解决,非常感谢!

x 出现错误。请重试或与管理员联系。