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

RE: TMDSCNCD28388D: C2000 ETHERNET

Other Parts Discussed in Thread:C2000WARE

好的,感谢

还有个问题想请教一下,IPC通信没能成功。

我想从CPU1发送数据给CM4核,但是我在例程enet_lwip中加入了IPC(IPC程序来自于ethernet_ipc_ex1_basic_cm例程)(运行在CM4核),同时,也在ethernet_c28x_config例程中加入了IPC程序(ipc程序来自于ethernet_ipc_ex1_basic_c28x1例程中)(运行在CPU1核中)。

现在的现象是:

IPC_sendCommand(IPC_CPU1_L_CM_R, IPC_FLAG0, IPC_ADDR_CORRECTION_ENABLE,IPC_CMD_READ_MEM, (uint32_t)packetData, PACKET_LENGTH);中的PACKET_LENGTH是可以在enet_lwip中观察到变化的。

但是packetData却始终没有改变。(我思考的是,有可能是我没有改对IPC数据包的位置和数据)

ethernet_c28x_config.rarenet_CM_lwip.rar

这是我修改后的例程。还请帮忙看一下,什么原因,导致CPU1的数据发送不到CM4核中呢?

特来请教

谢谢

Susan Yang:

我会拿板子测试后回复关于IPC的问题。但是ethernet的相关问题建议您发帖至英文论坛,谢谢

,

Susan Yang:

@vince 说:也在ethernet_c28x_config例程中加入了IPC程序

能否也给出该工程?

,

Susan Yang:

另外请您参考E2E上的相关讨论

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/863942/tms320f28388d-tms320f28388d-ipc-communication 

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/908839/ccs-tms320f28388d-how-do-i-do-simple-data-sharing-between-cpu1-and-cm-using-the-message-rams 

,

@vince:

7824.ethernet_c28x_config.rar

5353.enet_CM_lwip.rar

ethernet_ipc_ex1_basic_c28x1.rar

ethernet_ipc_ex1_basic_cm.rar

我是在ethernet_c28x_config工程中加入了ethernet_ipc_ex1_basic_c28x1工程中的IPC程序

在enet_CM_lwip工程(enet_CM_lwip工程也就是C2000ware中的enet_lwip例程,我把例程名称改了一下)中加入了ethernet_ipc_ex1_basic_cm工程中的IPC程序

感谢

,

@vince:

正在研究中,感谢

,

@vince:

我使用enet_CM_lwip例程和ethernet_c28x_config例程,测试了一下pass的返回值,等于1.

这应该可以说明,这两个例程之间的IPC通道已经建立起来。

但是数据的话,在CPU1端该怎么存到CPITOCMRAM中呢?

(我分析的是,在下面这个语句中,可以实现数据存到CPITOCMRAM中。#pragma DATA_SECTION(packetData, "MSGRAM_CPU_TO_CM"),只需要将语句中的packetData换成我自己的数据数组,我的数据是存在send_buf[i]数组中,是从CAN通道接收后,转存到send_buf[i]中的),如果我分析的没错话,改成#pragma DATA_SECTION(send_buf, "MSGRAM_CPU_TO_CM"),就可以实现将CPU1的数据存到CPITOCMRAM中。

我的send_buf[i]数组中有150个字符,利用#pragma DATA_SECTION(send_buf, "MSGRAM_CPU_TO_CM"),语句的作用,可以直接将150个字符存入CPITOCMRAM中了吗?

另一个问题是,在enet_CM_lwip中的中断函数void IPC_ISR0(),里面有IPC_readCommand(IPC_CM_L_CPU1_R, IPC_FLAG0, IPC_ADDR_CORRECTION_ENABLE,&command, &addr, &data);

我的理解是,这个语句可以接收CPU1通过IPC_sendCommand(IPC_CPU1_L_CM_R, IPC_FLAG0, IPC_ADDR_CORRECTION_ENABLE,IPC_CMD_READ_MEM, (uint32_t)packetData, PACKET_LENGTH);语句,发送的数组packetData[PACKET_LENGTH]中的数据。

但是如何将接收到的数据显示出来呢?

我分析的是,通过IPC_readCommand接收到的数据存到了上图蓝色箭头所指的数组中。

但,当我运行程序,观察这个数组的时候,发现 pktDesc.dataBuffer一直为0。(现象如下图)

是因为,我没有在程序中正确的给packetData[PACKET_LENGTH]数组赋值吗?

特来请教

感谢

,

@vince:

好像找出原因了,

并且已经能够实现CPU1将数据写入到CPU1TOCMRAM,而且观察变量的值,也是能够在CM4核中的pktDesc.dataBuffer数组中显示出来了。

后面想要将数据,发送出去的话,直接通过别的函数,将pktDesc.dataBuffer数组数组发出去就行了吧

特来请教

谢谢

,

@vince:

这一段程序,应该是以太网的数据帧格式打包的过程

,

Susan Yang:

@vince 说:

好像找出原因了,

并且已经能够实现CPU1将数据写入到CPU1TOCMRAM,而且观察变量的值,也是能够在CM4核中的pktDesc.dataBuffer数组中显示出来了。

很高兴您能解决问题。

@vince 说:后面想要将数据,发送出去的话,直接通过别的函数,将pktDesc.dataBuffer数组数组发出去就行了吧

是的,您的理解是正确的

,

@vince:

感谢

,

Susan Yang:

不客气,后续由其他问题欢迎随时发帖

,

@vince:

好的

,

Susan Yang:

ok

,

@vince:

这个现象,是否能说明,CPU1与CM4核的数据通信已经完成,可以实现将CPU1的数据发送到CM4核中了?

特来请教

感谢

,

Susan Yang:

看起来是的

,

@vince:

您之前跑我给发的例程,有发现两个例程的IPC通信上,存在什么问题吗?

,

Susan Yang:

我只是大体跑了一下,暂时没有发现什么问题

,

@vince:

对于这个for循环,packetData[PACKET_LENGTH]的长度是132,那么应该循环33次。但是从第二张图的结果来看,pktDesc.dataBuffer中最后一位是2,说明只循环了3次。

这是什么原因呢?

,

@vince:

HWREG((uint32_t *)packetData +i) = i;

上面这个语句的含义,有点不太明了。查资料说是对寄存器(uint32_t *)packetData +i里面的数据进行访问。

特来请教一下,访问的目的和访问之后,数据去了哪里呢?

谢谢

,

Susan Yang:

该问题已经拆分为新帖

https://e2echina.ti.com/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/203981/tmdscncd28388d-c2000-ethernet 

,

@vince:

好的

赞(0)
未经允许不得转载:TI中文支持网 » RE: TMDSCNCD28388D: C2000 ETHERNET
分享到: 更多 (0)