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.

SRIO DSP0 与DSP1数据传输问题



Hi,all:

我想实现2个c6678之间通过SRIO的数据传输。假设DSP0和DSP1,比如,我想把DSP0的

DDR内部的数据,通过SRIO传送给DSP1内部的DDR。如果能够达到以下两个目标,我认为

SRIO传输成功。

1.

看数据是否正确传输。

DSP0和DSP1两端的发送和接收程序运行起来之后,并且在保证数据传输完成之后,看DSP1内部的

DDR里面的数据,是否等于DSP0内部DDR里面发送出来的数据。

2.

看DSP1是否进入中断函数

或者说DSP0在发送数据的同时,有没有成功的中断DSP1,通知DSP1.

以上是我个人对于SRIO传输实验的理解。我用了论坛提供的SRIO例程。具体是SRIO_2DSP_Test函数。

对照例程代码和我自己的目标,有两点不太明确。

1.

DSP0的LSU传输的src和dst地址都在这个结构体中定义

SRIO_Multiple_Test_Config test_2DSP_cfg=
{
    SRIO_PATH_CTL_1xLaneA_1xLaneB_1xLaneC_1xLaneD, /*multiple_port_path*/
    /*packet_type               source                                                   dest                                                size*/
    {{0,                        0,                                                      0,                                                   0},   /*port0 is not availible for this case*/
    {0,                         0,                                                      0,                                                   0},   /*port1 is not availible for this case*/
    {SRIO_PKT_TYPE9_STREAM,     CORE0_LL2_HOST_SIZE1_FDQ,                               DSP1_SRIO_BASE_ID+SRIO_RX_FLOW_CORE1_LL2,            4096},   /*port2*/
    {SRIO_PKT_TYPE_SWRITE,      ((Uint32)&packetBuffer_LL2_Size1[0][0])+0x10000000,     ((Uint32)&packetBuffer_LL2_Size1[1][0])+0x10000000, LL2_PACKET_BUFFER_SIZE1}}    /*port3*/
};

按照理解,DSP0发送数据给DSP1的话,src地址&packetBuffer_LL2_Size1[0][0])+0x10000000应该在DSP0的内存空间,

dst地址&packetBuffer_LL2_Size1[1][0])+0x10000000应该在DSP1内存空间或者是DSP1内存空间的映射。

但是,我看到CMD文件中,似乎这两个都是DSP0本地内存中。这个不合理啊。

2.

关于DSP0给DSP1传数据同时,触发中断问题。

a.

我没看明白代码在哪里触发了DSP1的中断

b.

这个DSP0向DSP1的中断指的是  DoorBeLL中断么?这个DoorBell怎么由DSP0给DSP1触发。

我看到代码里面在LSU传输之前调用了InitLsuDoorbell(&lsuTransfer, transferParam);

具体的是lsuTransfer->doorbellValid= 1;,这个doorbellValid=1,就是触发了DoorBell中断么?

以上几点,不是很明白,希望TI专家帮忙逐一解答谢谢!

  • 1. 两个DSP互传的话,程序应放在DSP0的CORE 0和和DSP1的CORE 1运行;两个DSP的内存空间映射是一样的;

    2. 中断直接通过ASM 挂载,看SRIO_vectors.asm和SRIO_Interrupts.c;

    3. 现在可以在LSU传输完成以后附带一个Doorbell,通过doorbellValid配置,见SRIO手册2.3.5和Table 2-5。

  • Hi,Allen:

    你好,Thanks for your reply.

    1.

    关于你回答第二点,我知道DSP是通过中断向量挂载中断的,我的问题是,如何触发中断,

    比如DSP0发起LSU传输给DSP1,DSP1通过中断向量表挂载中断,但是,DSP0什么时候

    触发了DSP1的中断,是硬件自动触发?只要DSP0发起LSU传输之后,DSP0就自动触发DSP1

    的中断?还是需要DSP0手动写一个寄存器触发DSP1中断?这个才是我想问的。

    2.

    还有一个问题不明白就是,DSP0发起给DSP1的传输之后,DSP0还需要等待一个DSP1传输

    完成的回复。我的问题是,DSP0等待的这个完成码,是DSP1发起的么?是DSP1怎么发起的?

    硬件自动发起还是软件手动写寄存器发起?是不是DSP1收到中断之后,就自动再回复给DSP0一个

    传输完成码,具体细节是什么?

     

    谢谢!

  • 1. 通过DOORBELL 触发,DOORBELL现在可以自动附加在一次LSU传输以后,不需要像以前那样手写触发。当然你还是需要配置LSU里的DOORBELL信息。

    2. 传输完成是通过检测Complete Code,这个不是DSP1发起的,由硬件自动设置,你不需要关注它怎么实现,你需要关注的是每次传输结束的code是多少,来确定这次传输是否有问题。见SRIO手册Table 2-12。

  • 你好,我也在看SRIO中断,有几个问题想问下

    1. 中断函数怎么挂载 的,你说的那个例子在哪里实现的

    2. DSP0触发中断后,是否DSP1直接就跳转到挂载的中断函数了?

    中断的初始化是否就是代码里面写的?需要看那些相关的文档,SRIO user guide中断部分看了至少3,4次了,还是不清楚中断的实现,麻烦能否说的详细点。非常感激。

  • 您好,请问您的DSP0与DSP1通过SRIO进行通信实现了吗?我看到您用的也是DSPC-8681E的板子,我想用TI提供的官方例程,但是总是不成功,请问您是如何解决的。期待您的回复。邮箱:1456931451@qq.com