关于TMSC6455的SRIO无限接收doorbell inf为0的中断导致程序锁死问题

关于TMSC6455的SRIO无限接收doorbell inf为0的中断导致程序锁死问题

此问题尚无答案
All Replies
  • 秀才31分

    目前实验室在利用TMSC6455配合FPGA进行SRIO通信调试,在DSP的程序中,我把三个路由到SRIO的中断向量号全部利用了,分别是INDST0,INDST1和INDST4。按照datasheet上面的说法,INDST0~INDST7中只有前述的三个可以利用,其中INDST1和INDST4分别路由到唯一一个doorbell inf,而INDST0可以路由到多个未指定的doorbell inf。

    在DSP的程序中,SRIO既要接收又要发送,在实际调试中,很容易出现不停的接收INDST0中断的情况,此时整个SRIO通信也产生问题,FPGA数据不能正常发送过来,时断时续。我查了下此时SRIO的寄存器,发现这个时候的doorbell inf是00,并不是与FPGA约定好的doorbell inf,所以我怀疑这可能是一种出错信号,但是如果我屏蔽掉INDST0就不会出现这种情况,SRIO数据收发正常。

    所以我想请教下,6455的INDST0是否存在某种特殊的机制需要注意,是否在利用INDST0的时候需要更多的设置

  • 状元114980分

    如果增加FPGA的发送间隔是否会有所改善?中断服务程序占用时间较长吗?尽量减少printf语句的使用。

  • 秀才31分

    FPGA发送的方式是每隔5.3ms开始一次发送操作,每次操作会发出4个SRIO报文+4个doorbell,每个报文长4096bit,这四个报文之间的间隔是1ms,每个doorbell inf分别对应一个独立的TASK(INT和TASK的优先级互相对应)发送时间和发送间隔按照2.5gbps是绝对够的。

    有区别的是,第一个4096bit后面发送的是路由到INTDST1的doorbell inf,后面三个4096bit后面发送的是路由到INTDST0的doorbell inf,这些inf由于没有路由到INTDST1和4,会自动路由到INTDST0。我是在中断服务子程序中用判断语句来区分这三个doorbell inf,从而进入相应的TASK。在正常情况下,后面三个doorbell inf在对应到正确的TASK时能在监视器中观测到正确的inf和计数。一旦出错,就会发现INTDST0所对应的doorbell inf全是0,也就是说一直在接收doorbell inf为0的中断,其数目差不多是每秒十万次左右的数量级递增(通过监视器观测)。

    中断服务程序基本上只有几十us级,不是很占时间

    在程序中并未使用到printf语句,因为改语句会调用外部中断很费时间。