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.

6678的门铃中断响应时间



FPGA通过SRIO的门铃通知6678进行中断处理,出现的问题是:如果相邻门铃之间的时间间隔较大,则6678能够进入门铃中断,如果相邻门铃之间的时间时间较小(大约600us),则6678不能进入门铃中断。请问,门铃间隔不变的前提下(大约600us),如何让6678能够响应门铃中断?

  • 请问中断函数处理占用时间是多少?中断断服务程序占用时间较长的话,在Doorbell间隔比较小的情况下会造成doorbell丢包。避免在中断服务程序用用printf这些打印语句。
  • 中断处理函数的就是清除中断标志,其他什么都没有做。我用INTST_16--23,没有用0-15
  • 利用论坛中提供的例程K1_STK_v1.1,实现FPGA发送门铃给6678。如果门铃的间隔为600us,则6678不能够进入门铃中断,如果间隔为50ms,6678能够进入门铃中断。门铃中断服务程序中,只进行了清门铃中断标志。

    doorbell= gpSRIO_regs->DOORBELL_ICSR_ICCR[1].RIO_DOORBELL_ICSR;

    //clear doorbell interrupt
    gpSRIO_regs->DOORBELL_ICSR_ICCR[1].RIO_DOORBELL_ICCR= doorbell;

    后来发现一个文章说可以设置RIO_INTDST_RATE_CNT,我在程序中修改了RIO_INTDST_RATE使能寄存器和RIO_INTDST_RATE_CNT=0,

    /*enable interrupt rate control*/
    gpSRIO_regs->RIO_INTDST_RATE_DIS= 0x0;
    for(i= 0; i< 16; i++)
    {
    gpSRIO_regs->RIO_INTDST_RATE_CNT[i]= 0;
    },

    并且在中断服务程序中也对RIO_INTDST_RATE_CNT进行重新赋值,现象还是同上。

    求助大家帮忙分析一下。

  • 利用论坛中提供的例程K1_STK_v1.1,实现FPGA发送门铃给6678。如果门铃的间隔为600us,则6678不能够进入门铃中断,如果间隔为50ms,6678能够进入门铃中断。门铃中断服务程序中,只进行了清门铃中断标志。

    doorbell= gpSRIO_regs->DOORBELL_ICSR_ICCR[1].RIO_DOORBELL_ICSR;

    //clear doorbell interrupt
    gpSRIO_regs->DOORBELL_ICSR_ICCR[1].RIO_DOORBELL_ICCR= doorbell;

    后来发现一个文章说可以设置RIO_INTDST_RATE_CNT,我在程序中修改了RIO_INTDST_RATE使能寄存器和RIO_INTDST_RATE_CNT=0,

    /*enable interrupt rate control*/
    gpSRIO_regs->RIO_INTDST_RATE_DIS= 0x0;
    for(i= 0; i< 16; i++)
    {
    gpSRIO_regs->RIO_INTDST_RATE_CNT[i]= 0;
    },

    并且在中断服务程序中也对RIO_INTDST_RATE_CNT进行重新赋值,现象还是同上。

    求助大家帮忙分析一下。