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.
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.
我在中断初始化函数中写了如下语句,
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);
第二个语句应该用或,不能直接赋值的。我用红色标明了。