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.

K1_STK中SRIO例程里Maintenance函数不是每次都运行成功



  TI的工程师们好,

        我在用C6678与SRIO Swtich通信的时候遇到了问题:DSP进行了SRIO模块的初始化后,调用KeyStone_SRIO_match_ACK_ID把链路两端的ACKID匹配成一致的,防止两端不同时复位的情况下通信失败。这个函数有时候能执行成功,C6678可以通过maintenance维护SWITCH,有时候不能执行成功。我调试时发现执行失败时,总会卡死在函数KeyStone_SRIO_Maintenance()里,进一步的,具体是卡在下面的等待LSU传输完成的函数中,while的条件永远满足,永远不能退出循环。

Uint32 KeyStone_SRIO_wait_LSU_completion(Uint32 lsuNum,
Uint32 transactionID, Uint32 contextBit)
{
              Uint32 uiStateIndex= LSU_state_index_table[lsuNum][transactionID];
              Uint32 uiCompletionCode;

              do
             {
                  uiCompletionCode=(gpSRIO_regs->LSU_STAT_REG[uiStateIndex/8]>>
                 ((uiStateIndex&7)*4))&0xF;
             }
             while((uiCompletionCode&1) != contextBit);

            return (uiCompletionCode>>1);
}

另外,在我使用KeyStone_SRIO_Maintenance函数配置Switch时,也容易出现程序卡死在这个KeyStone_SRIO_wait_LSU_completion的情况,归根到底,即使用STK提供的这个KeyStone_SRIO_Maintenance与交换机通信不稳定,时而失败,哪怕是整个板子复位后,这时候按理说链路两端的ACK ID全部都是0了,但是这时候也出现过KeyStone_SRIO_Maintenance执行不成功的情况。

请问,这个函数不能执行成功的原因是什么,能有什么方法去修复这一问题吗,谢谢