请教:
我使用Keystone的程序尝试发送位于DSP 核心0L2上的一段数据,发送方式为NWRITE。但很奇怪的是,填写LSU发送之后,从LSU stat寄存器中读回的completion code总是5。而且发送也未能正确完成。这个现象只在发送L2数据时出现,发送MSMC和DDR就没有这样的现象。
我已经确保了填入LSU的地址是全局地址。后来仔细调试之后,发现我如果对待发送的L2地址进行一些数据访问(直接用赋值方式写那段内存)。再用SRIO NWRITE去发送就正常了。
代码如下:
1、
……
lsuTransfer.localDspAddress = 0x10820000;
KeyStone_SRIO_LSU_transfer(&lsuTransfer);
uiCompletionCode= KeyStone_SRIO_wait_LSU_completion(j,
lsuTransfer.transactionID, lsuTransfer.contextBit);
结果:uiCompletionCode = 5,发送失败
2、
memset( (int*)0x10820000,0, 1024*64));
……
lsuTransfer.localDspAddress = 0x10820000;
KeyStone_SRIO_LSU_transfer(&lsuTransfer);
uiCompletionCode= KeyStone_SRIO_wait_LSU_completion(j,
lsuTransfer.transactionID, lsuTransfer.contextBit);
结果:uiCompletionCode = 0,发送成功。
这令我很不解,为什么核不访问一下内存,这段内存数据就不能被SRIO发送出去呢?是有什么机制在起作用吗?
顺便说一下,我的应用是让这段内存接收一段外设来的数据,然后将其用SRIO对外转发,所以DSP核未访问这段内存。
请有经验的人给予指导,多谢!
Thomas Yang1:
建议用置顶帖里STK代码先在TI EVM板上做LOOPBACK测试。目标地址是哪里呢?
YUCHAO WANG:
回复 Thomas Yang1:
我的应用是2个C6678通过SRIO互联,目标地址可以是L2也可以是MSMC/DDR,都试过了,没有什么区别。只要源地址是L2,就会出现这样的问题。
我可以试一下LOOPBACK,但是目前没有EVM板。这个问题之前没有人遇到过是吗?
Thomas Yang1:
回复 YUCHAO WANG:
把L2的地址在L2内调整一下,有没有试过?
YUCHAO WANG:
回复 Thomas Yang1:
您的意思是什么?如何调整?
Thomas Yang1:
回复 YUCHAO WANG:
就是在L2内部挪动一下,换个地址