专家您好:
我从MSMC中8个核分段读数,分别传送到DDR3的对应地址(无交叠),每个核传送128KB,测试1024次。
每个核单独 跑时都能通过,8个核同时跑或者4个核同时跑时会发生错误,两个核同时跑发生错误率小。
错误现象是组中某些核一直在轮询寄存器IPR,该位的对应bit位已经为0,而清零操作是在轮询之后做的。查找对应TPCC的ERRSTAT,有时为8,有时为9,即MMRAERR问题和BUSERR问题,ERRDET为0x00010301,为读错误。
我的程序基本是按照CCS5安装包下EDMA3例子里的流程来写,手动触发传输的,每个核对应一个region。
请问专家,这种问题是我代码哪里没有配置正确,还是开发板的问题,开发板是EVM的。
多核并发EDMA3传输需要特别注意些什么地方。
Aper Vil:
补充下错误描述:单步调试,8核同步跑,头几次128KB传输一般能通过,连续跑时几个和能通过,有几个核一直停留在“轮询寄存器IPR”,此时有时是已经传输了48次128KB,有时是780次128KB。
Andy Yin1:
您好,
请问8个核是使用同一个channel还是分别不同的8个channel呢?在使用时注意不同的channel所使用的ParamSet资源不要冲突,同时注意对每个ParamSet参数只能以32bit为单位读写。
Aper Vil:
回复 Andy Yin1:
我用的是TPCC1和TPCC2的0,1,2,3通道,八个核的region分别为0~7,ParamSet的ID分别为通道号,我运行时看了下,参数地址是分开的。参数设置是用CSL_EDMA3_OPT_MAKE宏写的,应该能确定TPCC,TC和通道号8个核是分开用的,看不出有冲突,我将EDMA3的源地址设为MSMC,目的地址为DDR3有时能全部跑完1024*128KB,有时不能,若源和目的地址都为DDR3,则总会在中间挂死,就是上面说的情况。
PS:正文中说的L2到DDR3的测试我发现可能是我的问题,我没有将L2地址转换为全局地址。
Aper Vil:
回复 Andy Yin1:
我用的是TPCC1和TPCC2的0,1,2,3通道,八个核的region分别为0~7,ParamSet的ID分别为通道号,我运行时看了下,参数地址是分开的。参数设置是用CSL_EDMA3_OPT_MAKE宏写的,应该能确定TPCC,TC和通道号8个核是分开用的,看不出有冲突,我将EDMA3的源地址设为MSMC,目的地址为DDR3有时能全部跑完1024*128KB,有时不能,若源和目的地址都为DDR3,则总会在中间挂死,就是上面说的情况。
PS:正文中说的L2到DDR3的测试我发现可能是我的问题,我没有将L2地址转换为全局地址。
Andy Yin1:
首先可以肯定的是你这种用法没有问题。所以请在启动EDMA之前确认EDMA paramSet参数配置正确,然后在出错时看看参数的状态,便于分析异常的原因。