TI中文支持网
TI专业的中文技术问题搜集分享网站

问多核编程EDMA3中EDMA3_DRV_LINK_CHANNEL冲突如何最好的解决

您好:

目前我使用到了core0和core1,两者分别控制协处理器TCP3e和TCP3d,单核调试时均调通了,但是多核运行时两个核跑部分程序后就不跑了,停止的核停在了接收rcv event上,即接收不到应该接受的event而一直在等待…

我比较了一下两个核使用到的模块,感觉问题出在EDMA3上了,两个核初始化时均使用到了同一个EDMA3_DRV_LINK_CHANNEL,Core0先进行了初始化打开了EDMA3_DRV_LINK_CHANNEL,然后Core1进行初始化同样打开了EDMA3_DRV_LINK_CHANNEL,这时Core0与EDMA3_DRV_LINK_CHANNEL的连接不正常了,无法正常接收到EDMA发来的event 信息,而程序不能继续。

想问一下我对这个问题的分析对不对?

目前我想到的一个解决方案是:两个核不在同一时刻使用tcp3d和tcp3e,应该交替使用,即Core0使用完tcp3e后Core1才能用tcp3d,Core1使用完成tcp3d后再用Core0的tcp3e,并且每次都要调用tcp3e或tcp3d前都要初始化。

但是初始化占用的cycle数较多,感觉是重复浪费,其次,这样使用没能把tcp3e和tcp3d真正的并行起来。

想问问大家有没有更好的办法解决这个问题?

谢谢了,对EDMA的event还不是很熟悉,谢谢解答啦^_^

Andy Yin1:

您好,

首先肯定TCP3E与TCP3D是可以并行通过EDMA触发的。

TCP3e与TCP3d的输入可以软件配置使用不同的EDMA channel驱动,输出会产生不同的事件驱动不同的EDMA channel完成数据的输出,只是需要注意的是如果驱动的是同一个EDMACC的channel,则有可能同时产生输出中断,所以对于中断响应,则需要根据EDMA手册中关于中断服务函数的响应说明执行,否则可能会产生中断丢失。

赞(0)
未经允许不得转载:TI中文支持网 » 问多核编程EDMA3中EDMA3_DRV_LINK_CHANNEL冲突如何最好的解决
分享到: 更多 (0)