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 SRIO DSP接收Doorbell中断问题

Other Parts Discussed in Thread: TMS320C6678

在公司自己开发的板卡上调试SRIO

使用的DSP是TMS320C6678,FPGA是K7系列芯片,芯片间通过SRIO连接

C6678使用的开发环境是CCS5.3,编译器版本为C6000_7.4.1,MCSDK版本为2.1.2.6。

在调试过程中,C6678与FPGA互相用nwrite方式写数据均成功。调试Doorbell中断时,C6678向FPGA发送Doorbell没有问题,

但是FPGA向C6678发送Doorbell中断时,C6678最多只能接收999次Doorbell中断,之后就再也不能响应,此时FPGA在ChipScope中还能观察到Doorbell已发送出去。

附上调试用的C6678 SRIO程序,请各位工程师帮我看看程序中哪里配置有问题,导致有这个现象产生

谢谢!

srio_dsp.rar
  • 每次Doorbell中断服务程序中都要清除Doorbell标志,否则后面的Doorbell就不能再触发中断,下面是示例代码:

    //read doorbell. this test only use doorbell reg 0
    doorbell= gpSRIO_regs->DOORBELL_ICSR_ICCR[0].RIO_DOORBELL_ICSR;

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

  • 请问楼主,问题解决了吗?我也遇到了相似的问题,我的C6657接收门铃中断的次数远小于FPGA发送的门铃包数,DSP的门铃中断使用的是intdst16,不存在INTDSTX_Rate_CNTL寄存器设置的问题。

  • 响应时间间隔是多少?程序中有没有其他更高优先级的中断会占用?中断函数处理占用时间是多少?

  • 谢谢 ,问题有了进展,增加了FPGA发送门铃的间隔,DSP就不丢门铃中断了。DSP测试程序然虽然开了几个中断,但只有一个门铃中断会被触发。

    我使用的是FPGA的SRIO IP核,IP核中测试例程会向外发起多个SRIO通信(写、读、门铃、stream等),每种SRIO通信的间隔都很小,我就是把这些SRIO通信都改为门铃,就出现了DSP了丢失门铃中断问题。我现在的困惑是FPGA的SRIO IP核测试例程为什么不增加每种SRIO通信的间隔。

  • DSP门铃中断服务程序只有三行代码,除了下面2行,另外一行就是给一个全局变量置位。

    //read doorbell. this test only use doorbell reg 0
    doorbell= gpSRIO_regs->DOORBELL_ICSR_ICCR[0].RIO_DOORBELL_ICSR;

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

    另外,我们的C6657与FPGA通信不太稳定,经常会出现无法建立连接的问题,也就时等不到port OK。关于这些问题我会在另外的帖子中提问,这个问题基本算有个结论了。谢谢大家。

  • Anni Zhang,

          你好,我们也遇到了doorbell中断只能进一次的问题,并且ICCR好像被锁住了还是怎么样,无法对ICCR进行写操作,这是为什么你知道吗?

  • 只能进一次中断,主要是这两个寄存器设置有问题(6678 DSP):

    3.8.9.2 Interrupt Rate Counter Register(对于映射到INTDST0-INTDST15):

    INTDSTn_RATE_CNTL Interrupt Rate Control Counter 和 INTDST_RATE_DIS Interrupt Pacing Disable (Address Offset 0x0310)这两个寄存器没有设置正确。如果

    在INTDST_RATE_DIS Interrupt Pacing Disable = 0x0000的情况下,不重复写INTDSTn_RATE_CNTL Interrupt Rate Control Counter寄存器的话中断就只能进去一

    次。如果你不想重复写INTDSTn_RATE_CNTL Interrupt Rate Control Counter寄存器,就将INTDST_RATE_DIS Interrupt Pacing Disable = 0xFFFF。

  • 我在调试的过程中发现如果DSP(6678)中断服务程序占用时间较长的话,在Doorbell间隔比较小的情况下会造成doorbell丢包(可以从chipscope看到Doorbell应答消息

    (Hello Format)的错误标志位有时候为1),如果想分析问题,在调试程序时,尽量减少printf这些语句的使用。我觉得应该是中断服务子程序的时间决定doorbell的

    时间间隔。而要及时的触发中断(INTDST0-INTDST15),则可以设置INTDST_RATE_DIS Interrupt Pacing Disable 和 INTDSTn_RATE_CNTL Interrupt Rate Control Counter寄存器。

  • 你好,请问你的那个srio门铃中断程序能共享一份吗?qq1468905840

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