This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TCP3d 一个核操作多片TCP3d 可行方案

您好!

目标:已经做到一个core驱动一个tcp3d,需要1600K周期,太长了。目前想用这个核驱动3个tcp3d。(能提供一个像详细的方法么)

困难:1.驱动3个tcp3d意味着需要驱动3个task,这3个task(就是例程那样写的)能够并行操作么,还是执行完了A,再B,再C,和一个tcp3d效率一样?

2.第二个是我目前只能做一个instance,两个开启任何一个都是好的,但是hEDMA这个句柄只有一个,原因EDMA都用的instance 2,一个inst在一个core上只能初始化一次,导致我们无法把3个TCp3d需要的初始化代码都顺利执行,晕倒的现象是:

EDMA channel 34 open (result = 0)
EDMA channel 35 open (result = 0)
EDMA channel 32 open (result = 0)
EDMA channel 33 open (result = 0)
EDMA link channel 400 open (result = 0)
EDMA link channel 401 open (result = 0)
EDMA link channel 402 open (result = 0)
EDMA link channel 403 open (result = 0)
EDMA link channel 404 open (result = 0)
EDMA link channel 405 open (result = 0)
EDMA link channel 406 open (result = 0)
EDMA link channel 407 open (result = 0)
EDMA link channel 408 open (result = 0)
EDMA link channel 409 open (result = 0)
EDMA link channel 410 open (result = 0)
EDMA link channel 411 open (result = 0)
EDMA link channel 412 open (result = 0)
EDMA link channel 413 open (result = 0)
EDMA link channel 414 open (result = 0)
EDMA link channel 415 open (result = 0)
EDMA link channel 416 open (result = 0)
EDMA link channel 417 open (result = 0)
EDMA link channel 418 open (result = 0)
EDMA link channel 419 open (result = 0)
EDMA link channel 420 open (result = 0)
EDMA link channel 421 open (result = 0)

但是开启一个后在开启第二个会出问题(同时开):

Tx FDQ 741 successfully setup with 1 descriptors
EDMA channel 0 open (result = 0)
EDMA channel 1 open (result = 0)
EDMA channel 32 open (result = 0)
EDMA channel 33 open (result = 0)
EDMA link channel 400 open (result = 0)
EDMA link channel 401 open (result = 0)
EDMA link channel 402 open (result = 0)
EDMA link channel 403 open (result = 0)
EDMA link channel 404 open (result = 0)
EDMA link channel 405 open (result = 0)
EDMA link channel 406 open (result = 0)
EDMA link channel 407 open (result = 0)
EDMA link channel 408 open (result = 0)
EDMA link channel 409 open (result = 0)
EDMA link channel 410 open (result = 0)
EDMA link channel 411 open (result = 0)
EDMA link channel 412 open (result = 0)
EDMA link channel 413 open (result = 0)
EDMA link channel 414 open (result = 0)
EDMA link channel 415 open (result = 0)
EDMA link channel 416 open (result = 0)
EDMA link channel 417 open (result = 0)
EDMA link channel 418 open (result = 0)
EDMA link channel 419 open (result = 0)
EDMA link channel 420 open (result = 0)
EDMA link channel 421 open (result = 0)
[C66xx_5] Core 0 fftc time used is 164825
all time consumed is 10076964
[C66xx_4] EDMA channel 34 open (result = -139)
EDMA channel 35 open (result = -139)
EDMA channel 1002 open (result = -139)
EDMA channel 1002 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)

难道必须两个片在一个核控制的条件下无法同时运行?

谢谢大家!

  • 这个函数过了还是收不了中断  之前第一个inst还可以收中断 现在第一个instance也收不到了

    Tx FDQ 741 successfully setup with 1 descriptors
    EDMA channel 0 open (result = 0)
    EDMA channel 1 open (result = 0)
    EDMA channel 32 open (result = 0)
    EDMA channel 33 open (result = 0)
    EDMA link channel 400 open (result = 0)
    EDMA link channel 401 open (result = 0)
    EDMA link channel 402 open (result = 0)
    EDMA link channel 403 open (result = 0)
    EDMA link channel 404 open (result = 0)
    EDMA link channel 405 open (result = 0)
    EDMA link channel 406 open (result = 0)
    EDMA link channel 407 open (result = 0)
    EDMA link channel 408 open (result = 0)
    EDMA link channel 409 open (result = 0)
    EDMA link channel 410 open (result = 0)
    EDMA link channel 411 open (result = 0)
    EDMA link channel 412 open (result = 0)
    EDMA link channel 413 open (result = 0)
    EDMA link channel 414 open (result = 0)
    EDMA link channel 415 open (result = 0)
    EDMA link channel 416 open (result = 0)
    EDMA link channel 417 open (result = 0)
    EDMA link channel 418 open (result = 0)
    EDMA link channel 419 open (result = 0)
    EDMA link channel 420 open (result = 0)
    EDMA link channel 421 open (result = 0)
    EDMA channel 34 open (result = 0)
    EDMA channel 35 open (result = 0)
    EDMA channel 50 open (result = 0)
    EDMA channel 51 open (result = 0)
    EDMA link channel 422 open (result = 0)
    EDMA link channel 423 open (result = 0)
    EDMA link channel 424 open (result = 0)
    EDMA link channel 425 open (result = 0)
    EDMA link channel 426 open (result = 0)
    EDMA link channel 427 open (result = 0)
    EDMA link channel 428 open (result = 0)
    EDMA link channel 429 open (result = 0)
    EDMA link channel 430 open (result = 0)
    EDMA link channel 431 open (result = 0)
    EDMA link channel 432 open (result = 0)
    EDMA link channel 433 open (result = 0)
    EDMA link channel 434 open (result = 0)
    EDMA link channel 435 open (result = 0)
    EDMA link channel 436 open (result = 0)
    EDMA link channel 437 open (result = 0)
    EDMA link channel 438 open (result = 0)
    EDMA link channel 439 open (result = 0)
    EDMA link channel 440 open (result = 0)
    EDMA link channel 441 open (result = 0)
    EDMA link channel 442 open (result = 0)
    EDMA link channel 443 open (result = 0)

  • 这么久还是没人回答,Ti工程师能帮帮忙么?

  • 发现国外的论坛提供这样一个帖子 http://e2e.ti.com/support/dsp/c6000_multi-core_dsps/f/639/t/322217.aspx

    但是依然没有给出一个具体的方法。

    目前我把EDMA instance 2创建了, 但是

    /* Open the Driver Instance */
    hEdma = EDMA3_DRV_open (edma3Id, (void *) &initCfg, &edma3Result);

    依然不能成功。

    现在的首要目的是让一个核控制三个TCP3d跑起来,其次才是尽量解放core在decoding的过程中还能去做其他的计算。

    继续等待TI工程师或者论坛上有经验工程师的解答和帮助!

    谢谢!

  • 新的一周,继续等待。。。。。。。。。。。。。。其实也看了很久 感觉是不是MCSDK的例程就根本没法改成我现在的需求  要改的地方略多  而且现在的问题才开始出现在EDMA中  TCP3d后面还有很多要改的

    (Andy写的例程是大端, 我就仍然按照MCSDK的例程小端进行修改 不然工作量太大)

    我把进展和目前的问题在叙述一遍:

    1. TCP3d开始工作之前要进行一次初始化 例程中使用了allinit() API, 在这个函数里面,首先要EDMA_init() 其中先EDMA3_DRV_create,然后EDMA3_DRV_open。

    如果是一个core在一个时刻只控制一个tcp3d,这个流程没问题。但是如果要控制两个tcp3d,我个人觉得儿就会申请两次EDMA。第一次仍按照上述流程,但是第二次由于EDMA3_DRV_create一般指creat一次(如果对同一个instance creat两次,openEdmaChannels()中的EDMA3_DRV_requestChannel就会报错),所以第二次初始化直接EDMA3_DRV_create,但是失败,返回的错误代码是-165,根本就不在.h文件的错误代码种类中,所以我也不知道是什么报错。 看了EDMA3_DRV_create的源文件,也不深明白哪儿错了。

    虽然知道后面还要修改很多地方,但是在这里就别卡死了。 

    发帖块一周多了,希望得到解答啊!附件是国外论坛的一个设计例子,虽然看出他使用高个不同的ECC是不可能的,但是总体目标是一致的,就是一个core控制3个tcp3d,以达到加快解码速度为目的,尽可能释放DSP对硬核的维护。

    谢谢大家!

    Design - TCP3D.pdf
  • 目前看了一下K_1和MCSDK的而来那个TCP3d例程。

    EDMA不能重复申请的问题还没想好解决方法,然后又遇见了新问题:(在此仅作记录,自己可以通过代码验证后在明确一下)

    TCP3d decode完毕后会出发EDMA传数据到memory上,也就是传说中的revt0和revt1,MCSDK的程序中写的是还需要发送semaphore,重新TCP3d_start来触发下一个块的EDMA传输到TCP3d中。请问,我理解对了么?(如果是自动促发,waitTCP3d处理那个模块while中的TCP3d_start可以去掉么)

    我看K_1的例程,其中revt0和revt1压根就没提到还需要中断,相当于就是Chain链接触发了,是么?  然后处理完所有blocks后通过polling来判断。

    继续等待好心人点播可行方案。

    晚上修改:目前经过测试,MCSDK的例程确实是通过revt0和revt1发出的semaphore,然后通过TCP3d_start函数来触法EDMA传输下一个传输块的额

    另外K_1的例程也修改了一下,还是无法实现一个core控制两个TCP3d,问题也是出现在EDMA的CHannel上,第一个Keystone_TCP3D_PollFree就过不了。

    又是一天过去了,期待解答!我在想能去问TI的FAE么?????

  • 试试今天你是否能有进展!

  • 刚才测试了一下,因为手册中说所有block处理完后在发两次ISR中断就好,但是我在MCSDK的例程中注释掉了REVT0和REVT1仍然不行?

    TI工程师能解释一下为什么么?

  • STK中的TCP3D例程是大端,但是对于小端而言,修改的工作量不大,只需要把其中对于bit字段的定义在一个word内进行翻转重新定义即可,内部的代码不需要修改。另外使用该例程,在一个core上同时使用多个tcp3d,只需要分别对每个tcp3d进行初始化配置即可,各自申请得到一个handle。

    http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/47664.aspx

  • 估计工程师是太忙了,没有看完整个帖子。

    1.大小端问题在另外一个帖子已经解决了。

    2.MCSDK的例程目前可以用,但是都是单instance。

    3.我也测试过您链接中的例程,貌似同时申请两个handle是不行的,也就是两个instances同时开启使用也无法输出结果。

    周末在看看吧,估计您下次回帖要下周了。

  • 我发的STK TCP3D是可以在同一个core上同时使用多个TCP,注意每个TCP3D都需要独立的handle及输入资源参数,我们已经有客户在使用这个STK同时控制多个TCP3D。