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.

srio的doorbell中断数过多



    A板卡向B板卡发送doorbell中断时,B板卡不使能其他中断,能够接收150k/s左右的中断频率,发送doorbell数和接收doorbell数相同。

    但是在B板卡使能并接收一个4k频率的gpio中断,且A板卡向B板卡发送doorbell中断的频率仅为4K左右时,b板卡接收到的中断个数比a板卡发送的中断个数多,发几万个doorbell会多收到几十个doorbell中断,会多一些DOORBELL_ICSR没有置标志位的中断,这个可以不考虑,当成超时,但是还多了些DOORBELL_ICSR中断标志位有值的中断,且未报错误中断,中断处理函数代码如下,

void rapidioUsrIsr(INT32 arg)

{

  *((UINT32 *)(DOORBELL_RATE0))=1000;

  state=*((UINT32 *)(RIO_ERR_RST_EVNT_ICSR));
  if(state!=0)
  {
  *((UINT32 *)(RIO_ERR_RST_EVNT_ICCR))=state;//iccr
  }

  state=*((UINT32 *)(DOORBELL_ICSR0));

  if(state!=4)
  {
  err0++;
  }

  state=*((UINT32 *)(DOORBELL_ICSR1));
  state=*((UINT32 *)(DOORBELL_ICSR2));
  state=*((UINT32 *)(DOORBELL_ICSR3));

  *((UINT32 *)(DOORBELL_ICCR0))=0xffff;//iccr
  *((UINT32 *)(DOORBELL_ICCR1))=0xffff;//iccr
  *((UINT32 *)(DOORBELL_ICCR2))=0xffff;//iccr
  *((UINT32 *)(DOORBELL_ICCR3))=0xffff;//iccr
  rapidio_i++;

}中断只使用中断寄存器0,即只会发送到DOORBELL_ICSR0,rapidio_i的值会比实际发送的数量多,因为我们流程是发送一个数据包,发送一个中断,中断多了就相当于数据包多了,有问题,感觉像是在有其它中断运行的情况下,打断了srio对中断的接收,导致发方重发了doorbell包,请问应该怎么处理呢?中断服务函数内部第一行做了关全局中断,退出时开全局中断,效果一样,请问应该怎么处理呢?