请教:
我使用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核未访问这段内存。
请有经验的人给予指导,多谢!