Part Number:TMS320C6657
我发现ti/csl/example/edma下面的例程里跑通了EDMA在MSMC之间的数据传输。
但是我需要的是配置EMIF16和L2之间的数据传输,一旦我改变源地址src或者目的地址dst,就会出现无法正常传输的情况,原代码的打印显示verify false!
我想知道为什么会出现这种情况?难道是EDMA只能在MSMC里面配置字段跑EDMA的例程吗?这牵扯到哪些部分呢?
Nina Liu:
我遇到的传输结果是这样的:
,
Shine:
可能是cache一致性问题引起的,写数据之后刷cache,然后在读数据之前invalid cache。请看下面的文档和帖子。 https://e2echina.ti.com/support/processors/f/processors-forum/107105/c6678-cache https://www.ti.com.cn/general/cn/docs/gencontent.tsp?contentId=64183
,
Nina Liu:
也不是一致性的问题,因为例程里的verify函数在校验源地址和目的地址数据的时候已经把对应的cache一致性考虑进去了,在读数据之前将L1d和L2进行了invalid无效化。
即使是这样,我的问题也解决了,虽然有点玄学,但我断电之后重启开发板,重新编译和debug,配置在不同字段之间的源地址和目的地址之间的数据就可以通过传输了。还希望shine你有想法也可以解释下这个原因。
,
Shine:
Nina Liu 说:配置在不同字段之间的源地址和目的地址之间的数据就可以通过传输了
能否具体说明一下“配置在不同字段”?
,
Nina Liu:
你好:
我在cmd文件里配置字段:
EdmaTestSRC > L2SRAM EdmaTestDST > DDR3
然后在代码里分配源地址和目的地址在以上两个字段里:
__attribute__((section("EdmaTestSRC"))) Uint8 srcBuff1[2];__attribute__((section("EdmaTestDST"))) Uint8 dstBuff1[2];
这就是我所指出的“配置在不同字段”。且如此配置之后,直接改变srcBuff1的数据,dstBuff1的数据读出并不准确。
,
Shine:
Nina Liu 说:直接改变srcBuff1的数据,dstBuff1的数据读出并不准确。
直接改变是指什么?不是通过EDMA去srcbuff1读取数据吗?