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:
好的
TI中文支持网










