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

TMS320C6678: 【TMDXEVM667LE】GE 地址与discriptor如何建立关系

Part Number:TMS320C6678

您好,我想问下在GE例程里,源地址/目的地址怎么和discriptor建立起关系的?

Uint32 message_src_dest[][2]=
{
{DDR_HOST_SIZE1_FDQ, GE_RX_FLOW_DDR }, /*DDR->DDR*/
{DDR_HOST_SIZE1_FDQ, GE_RX_FLOW_SL2 }, /*DDR->SL2*/
{SL2_HOST_SIZE1_FDQ, GE_RX_FLOW_DDR }, /*SL2->DDR*/
{SL2_HOST_SIZE1_FDQ, GE_RX_FLOW_SL2 } /*SL2->SL2*/
};

#define DDR_HOST_SIZE1_FDQ          (TEST_QUEUE_BASE+11)

#define GE_RX_FLOW_DDR 0

#pragma DATA_SECTION(hostDescriptor_DDR,"QMSS_Data.Descriptor_DDR")
#pragma DATA_ALIGN (hostDescriptor_DDR, 128)
Uint8 hostDescriptor_DDR[DDR_HOST_DESCRIPTOR_NUM][GE_DESCRIPTOR_SIZE];

#pragma DATA_SECTION(packetBuffer_DDR_Size0,"PacketData.buffer_DDR")
#pragma DATA_SECTION(packetBuffer_DDR_Size1,"PacketData.buffer_DDR")
Uint8 packetBuffer_DDR_Size0[DDR_SIZE0_PKT_BUF_NUM][DDR_PACKET_BUFFER_SIZE0];
Uint8 packetBuffer_DDR_Size1[DDR_SIZE1_PKT_BUF_NUM][DDR_PACKET_BUFFER_SIZE1];

Qmss_DescMemRegionCfg descMemRegionsCfg[]=
{ /*The base address of descriptor region Size of each descriptor Number of descriptors 16*n,1<=n<=8192 2^(5+n), 0<=n<=15*/
{(Uint32)hostDescriptor_SL2, GE_DESCRIPTOR_SIZE, SL2_HOST_DESC_LINK_ENTRY_NUM},/*host descriptor in SL2*/
{((Uint32)hostDescriptor_LL2)+0x10000000, GE_DESCRIPTOR_SIZE, LL2_HOST_DESC_LINK_ENTRY_NUM},/*host descriptor in Core0 LL2*/
{((Uint32)hostDescriptor_LL2)+0x11000000, GE_DESCRIPTOR_SIZE, LL2_HOST_DESC_LINK_ENTRY_NUM},/*host descriptor in Core1 LL2*/
{((Uint32)hostDescriptor_LL2)+0x12000000, GE_DESCRIPTOR_SIZE, LL2_HOST_DESC_LINK_ENTRY_NUM},/*host descriptor in Core2 LL2*/
{((Uint32)hostDescriptor_LL2)+0x13000000, GE_DESCRIPTOR_SIZE, LL2_HOST_DESC_LINK_ENTRY_NUM},/*host descriptor in Core3 LL2*/
{(Uint32)hostDescriptor_DDR, GE_DESCRIPTOR_SIZE, DDR_HOST_DESC_LINK_ENTRY_NUM}/*host descriptor in DDR*/
};

在cmd文件中看到PacketData.buffer_DDR分配的空间是0x82000000,为什么在测试的时候是

[C66xx_0] GE transfer from 0x820c0000 to 0x820c2800, 1 packets x 64 bytes, 7281 cycles, 70 Mbps
[C66xx_0] GE transfer from 0x820c2800 to 0x820c5000, 1 packets x 128 bytes, 9261 cycles, 110 Mbps
[C66xx_0] GE transfer from 0x820c5000 to 0x820c7800, 1 packets x 256 bytes, 12534 cycles, 163 Mbps
[C66xx_0] GE transfer from 0x820c7800 to 0x820ca000, 1 packets x 512 bytes, 19558 cycles, 209 Mbps
[C66xx_0] GE transfer from 0x820ca000 to 0x820cc800, 1 packets x 1024 bytes, 31484 cycles, 260 Mbps
[C66xx_0] GE transfer from 0x820cc800 to 0x820cf000, 1 packets x 2048 bytes, 57306 cycles, 285 Mbps
[C66xx_0] GE transfer from 0x820cf000 to 0x820d1800, 1 packets x 4096 bytes, 107728 cycles, 304 Mbps
[C66xx_0] GE transfer from 0x820d1800 to 0x820d4000, 1 packets x 8192 bytes, 208948 cycles, 313 Mbps

这个地址是怎么设置的?为什么是src是0x820c0000而不是0x820000000 dst为什么是0x820c2800? 

Shine:

看到cmd文件里QMSS_Data:Descriptor_DDR 也是分配到DDR3的,可以看一下map文件,各个段的分配情况。QMSS_Data:Descriptor_DDR > DDR3_RW_DATA PacketData:buffer_DDR > DDR3_RW_DATA

,

Zahir Wang:

map文件也没有看到是从0x820c0000开始的

DDR3_R_DATA 81000000 01000000 00000000 01000000 RWIX DDR3_RW_DATA 82000000 06000000 00346000 05cba000 RWIX

82000000 82000000 00340000 00000000 rw- PacketData.buffer_DDR 82340000 82340000 00006000 00000000 rw- QMSS_Data.Descriptor_DDR

,

Zahir Wang:

1.src为0x820c0000是因为message_src_dest为DDR_SIZE1_FDQ,而packetBuffer_DDR_Size0[DDR_SIZE0_PKT_BUF_NUM][DDR_PACKET_BUFFER_SIZE0];该数组占用空间为1536*512*1B=0xc0000,所以packetBuffer_DDR_Size1的第一个地址就是0x820c0000

2.dst为0x820c2800是因为DDR_PACKET_BUFFER_SIZE1 (10*1024) 即0x2800B,

/*check the last packet in the accumulation list*/ hostDescriptor= (HostPacketDescriptor *) (uiaDescriptorAccumulationList[((uiAccPingPong-1)&1)*(uiAccPageSize+1)+uiTotalNumPackets]&0xFFFFFFF0);

/*invalid cache before read descriptor RAM*/ InvalidCache((void *)hostDescriptor, 64);

/*get the destination buffer*/ ucpDst= (Uint8 *)hostDescriptor->buffer_ptr;

所以dst就是0x820c2800

但我有一个问题为什么uiPayloadNumBytes要大于46小于9216?

,

Shine:

感谢分享!这是以太网规定的,以太网帧数据域部分最小为46字节,最大不超过9216,1.5k~9k属于巨型帧。

,

Zahir Wang:

我想问下 对于dst怎么进行修改?或者说怎么进行人为的设置?

,

Shine:

请问需要对dst修改什么?是要指定到DDR3具体地址?

,

Zahir Wang:

改到ddr上的某个具体空间

,

Zahir Wang:

在我测试dsp-pc的时候 pc给dsp发包 请问dsp这边的buffer_ptr是在哪里可以进行设置的?我在调试的时候发现buffer_ptr的地址是在sl2上 如果我想把收到的数据包放在ddr上 那么我应该怎么设置?

,

Shine:

用#pragma DATA_SECTION伪指令,在cmd文件定义一段DDR3的地址,把变量分配到这段指定DDR3地址。

,

Zahir Wang:

我知道cmd文件可以进行设置,但是程序中的dst是读出来的,所以我就在想这个dst怎么进行根据自己的需要进行修改。

Zahir Wang 说:在我测试dsp-pc的时候 pc给dsp发包 请问dsp这边的buffer_ptr是在哪里可以进行设置的?我在调试的时候发现buffer_ptr的地址是在sl2上 如果我想把收到的数据包放在ddr上 那么我应该怎么设置?

另外 收包的时候 包放在sl2上,请问这在程序里的哪个地方设置的?通过读accumulationlist得到的descriptor,但是为什么这个buffer是在sl2上而不是在其他空间?

赞(0)
未经允许不得转载:TI中文支持网 » TMS320C6678: 【TMDXEVM667LE】GE 地址与discriptor如何建立关系
分享到: 更多 (0)