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

6678 QMSS CPPI多核通信

各位好!

        本人最近基于EVM6678开发板在学习6678的编程,之前先基于NDK的client例程改写了一个网络通信的程序,然后基于PDK包中的InfrastructureMCExampleProject学习多核通信。

        目前想将多核通信例程的代码移植到网络通信的代码中,遇到了一些问题想请教各位:

        1. InfrastructureMCExampleProject例程中,core0向其他core发送数据,会触发其他core的中断,从而使其他core接收数据,但是本人合并后的代码(合并网络和核间通信的初始化代码,完全采用了核间通信的代码,同时核间通信在main函数中执行,不和网络通信有交集),core0发送数据后,任何中断都没有产生,不知道这是为什么?

       2. 合并代码的cfg文件是基于NDK的client,增加了 InfrastructureMCExampleProject例程cfg文件包含的内容。本人曾测试,将InfrastructureMCExampleProject例程中的cfg文件采用合并后的cfg文件替换(代码中增加了一些空的task等为了编译时不报错),代码也不能正确运行(和1现象相同)。不知道核间通信还需要特殊配置cfg文件吗?

    困扰好久,希望各位帮忙解答,多谢!

Richard Wu:

问题原因已经找到。

是因为在NDK例程中,.far被分配在了DDR3上,而qmss例程的.far是在L2SRAM。

因此合并工程以后,原来qmss例程中的描述符、中断等在.far字段的内容就跑到了DDR3上,导致程序无法接收到数据。

具体为什么必须不能分配在DDR3上,我还不是很明白,继续请各位释惑。

另外还有一个问题:NDK例程中,网络通信占据的是通道0,而qmss内核通信中,也使用到了通道0,不知道应该如何改变网络通信的通道号或者内核通信的通道号。

谢谢各位!

Andy Yin1:

回复 Richard Wu:

在DDR3上时需要注意cache一致性的维护,可能是qmss代码中某些地方对于存放DDR时需要修改。

至于你说的通道号指的是什么通道,CPPI 通道么?如果是CPPI通道的话,C667x DSP的Netcp与QMSS infrastructure CPPI的通道是独立的,有各自的通道,所以不存在冲突。

Richard Wu:

回复 Andy Yin1:

谢谢Andy的解答!

由于对6678了解欠缺,所以问题描述的比较有问题。

CPPI的通道和Netcp的通道是不冲突的,冲突的地方在这里:

首先我们运行NDK的例程可以发现,它在core 0上注册了eventID 48, vectID 7的中断

而我们的qmss中,在内核通信时也要注册中断:

如果只注册core1-7,此时在core0上的网络通信没有问题,core0向其他core发送数据也没有问题,只是不能接收数据。

但是如果也注册了core0,此时网络通信与内核通信就都有问题了。发现是网络在建立连接时,本来应该进入到NETCP的数据跑到了内核通信的core0中断中。

同时我也尝试了将core0-7内核通信的eventID改到49,但是结果一样不可以。

求解答,谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » 6678 QMSS CPPI多核通信
分享到: 更多 (0)