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.

doorbel中断响应错误

Other Parts Discussed in Thread: TMS320C6474

测试发消息时,向对方核发送,并使对方核相应对应中断,6474三个DSP,共9个核,现在发现00核向22核发送消息完后,22核中断相应有错,本该中断1相应,结果进了中断0,导致消息解得出错,其他核正常,很费解。。。在doorbell信息的16bit中,Doorbell Reg #  2bit是选择响应的中断,但是在配置时选择的是中断1,却进了0,不知道是什么原因,不知那位大哥遇到过类似问题,请解答一二。。

 

 

  • Hi Xue,

              00核向22核发消息,是指DSP0的核0向DSP2的核2发消息吗?

         出问题的时候,DSP2的DOORBELL相关中断路由寄存器doorbellx_icrr配置的值可否贴一下?

         谢谢!

       Jane

  • Hi Jane,

    00核向22核发消息,是指DSP0的核0向DSP2的核2发消息,关于ICRR寄存器的配置如下:

    REG_SRIO_DB0_ICRR = 0x00000420;

    REG_SRIO_DB1_ICRR = 0x00000531;

    这是讲中断路由到某个INTDST n上,在中断函数中就是从这个寄存器解析,并清除中断,关于doorbellInfo 有16个bit,第5,6比特位可以配置选择哪个中断,具体图可见TMS320C6474 DSPSerial RapidIO (SRIO)User's Guide  第2.3.6       Doorbell Operation  小节。我是这样配置:doorbellInfo = (**)+ 4*(**)+32*(1)];前两个括号是其他配置,不影响这里,32*1是将1左移了5位,按逻辑应该是中断1响应,但结果却是进了中断0,所以错了。按照以上配置,00核给其他核发均正常,所以很费解。

    谢谢!

    Xue

  • Hi Xue,

               给其他核配置的时候,16bit的doorbellInfo是一摸一样的吗?doorbellInfo = (**)+ 4*(**)+32*(1)这个配置是否会有值赋给第4bit(reserved bit)?

         DSP响应doorbell中断时候,doorbell_icsr的第几个bit被置位了?

         谢谢!

       jane

  • Hi Jane,

                 16bit的doorbellinfo不是一模一样的,有不同的配置(**)+ 4*(**)是低0~3bit,4bit(reserved ),32*(1)是5~6bit,这个值可能为0,或1。

            SRC    DST     ICRR                 db0         db1

                      00        00          0                        0             1

                      00        01          1                        2             3

                      00        10          2                        4             5

    上表中 00 及DSP0Core0  ,01及DSP0Core1,根据SRC,DST值配置ICRR也是0~3bit值,具体可参考TMS320C6474 DSPSerial RapidIO (SRIO)User's Guide  第2.3.6       Doorbell Operation  小节。

  • Hi Xue,

                Sorry, 我还是不能从上面的信息中看出出错的原因,还请您能直接写一下00向22发的boorbell 16bit信息值,以及中断产生时doorbell_icsr的信息,多谢!

  • Hi Jane

                     16bit信息值:doorbellInfo = t_uiDstCoreID(2) + 4*g_uiLocalCoreID(0) +32*(1);括号内为相应变量的值。DOORBELL1_ICSR (0210h) = 0x00000004;这些bit位都没有问题,现在中断出错只跟5,6,bit有关系,也就是32*1的值,乘1应该进中断1,现在进的是中断0,就这个出错。

  • Hi Jane

                     16bit信息值:doorbellInfo = t_uiDstCoreID(2) + 4*g_uiLocalCoreID(0) +32*(1);括号内为相应变量的值。DOORBELL1_ICSR (0210h) = 0x00000004;这些bit位都没有问题,现在中断出错只跟5,6,bit有关系,也就是32*1的值,乘1应该进中断1,现在进的是中断0,就这个出错。

  • Hi Xue,

                doorbellInfo= 0b10010, 而DOORBELL1_ICSR (0210h) = 0x00000004, 说明SRIO解析doorbell信息没有问题。 另外0b10010对应了doorbell中断配置应该使用DOORBELL1_ICRR的ICR2位域来路由中断。 这个值您配置为5,也就是说中断路由到INTDST 5上。 按照6474芯片手册,INTDST5对应了72号系统事件,请问EVTFLAG2寄存器相应的比特位是否被置位了? 71号和72号事件分别路由到哪个DSP中断? 您说的中断1是指72号事件对应的中断吗?

         另外,请问ERR_RST_EVNT_ICSR寄存器和ERR_RST_EVNT_ICRRx的值是多少?

         谢谢!

  • Hi Xue,

                doorbellInfo= 0b10010, 而DOORBELL1_ICSR (0210h) = 0x00000004, 说明SRIO解析doorbell信息没有问题。 另外0b10010对应了doorbell中断配置应该使用DOORBELL1_ICRR的ICR2位域来路由中断。 这个值您配置为5,也就是说中断路由到INTDST 5上。 按照6474芯片手册,INTDST5对应了72号系统事件,请问EVTFLAG2寄存器相应的比特位是否被置位了? 71号和72号事件分别路由到哪个DSP中断? 您说的中断1是指72号事件对应的中断吗?

         另外,请问ERR_RST_EVNT_ICSR寄存器和ERR_RST_EVNT_ICRRx的值是多少?

         谢谢!

  • Hi Xue,

                doorbellInfo= 0b10010, 而DOORBELL1_ICSR (0210h) = 0x00000004, 说明SRIO解析doorbell信息没有问题。 另外0b10010对应了doorbell中断配置应该使用DOORBELL1_ICRR的ICR2位域来路由中断。 这个值您配置为5,也就是说中断路由到INTDST 5上。 按照6474芯片手册,INTDST5对应了72号系统事件,请问EVTFLAG2寄存器相应的比特位是否被置位了? 71号和72号事件分别路由到哪个DSP中断? 您说的中断1是指72号事件对应的中断吗?

         另外,请问ERR_RST_EVNT_ICSR寄存器和ERR_RST_EVNT_ICRRx的值是多少?

         谢谢!

  • Hi,Jane,

                     每个DSP都有71,72号这两个中断,我所说的中断0就是71号,中断1就是72,对于你说的EVTFLAG2,ERR_RST_EVNT_ICSR,ERR_RST_EVNT_ICRRx这些寄存器我都没有配置使用。

    谢谢!

  • Hi Xue,

                EVTFLAG2是DSP核的事件状态寄存器,不需要配置。 通过查看它可以检查事件72号有没有生成。 如果72号事件标志已经产生,说明SRIO模块没有问题,问题可能在DSP核的中断路由上面。 如果72号事件没有生成,那么就需要继续查SRIO模块。 ERR_RST_EVNT_ICSR也是状态寄存器,可以查看当前有没有SRIO错误事件。 另外,您还可以查看寄存器INTDSTn_DECODE,了解是否同时有多个SRIO中断事件。