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.

[参考译文] TMS320F2.8379万D:双核IPC通信

Guru**** 2553450 points
Other Parts Discussed in Thread: CONTROLSUITE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/631119/tms320f28379d-dual-core-ipc-communications

部件号:TMS320F2.8379万D
主题:controlSUITE中讨论的其他部件

您好,

我正在尝试从CPU Core1向CPU Core2发送一些数据/命令。 我不打算使用TI提供的IPC驱动程序和IPC驱动程序实用程序。 但我无法使它发挥作用。 下面是我要使用的方案的一些说明。

1) 在CPU2TOCPU1RAM中创建变量。

2) 将这些相应变量的地址复制到 IpcRegs.IPCSENDADDR。

3) 设置标志。 IpcRegs.IPCSET.bit.IPC11 = 1;

4) 在CPU Core2上,一旦检测到设置了FLAG11,则通过读取IpcRegs.IPCRECVADDR接收地址。

5) 通过读取接收到的地址处的值来读取变量的值。

但这种办法无论如何都不起作用。 以下是项目中CPU 1和CPU 2的代码片段。

CPU 1 -发送要与CPU 2共享的变量的地址。


 

//
//定义
//
#define CPU01_to_CPU02_PASSMSG 0x0003FFF4 // CPU01到CPU02 MSG RAM。 传递地址的偏移
#define CPU02_to_CPU01_PASSGSG 0x0003FBF4 // CPU02到CPU01 MSG RAM。 传递地址unsigned

long TempNumber[3];
unsigned long Commands[3];
long double GenericParameters[3];

#pragma data_section(TempNumber,"CPU1TOCPU2RAM");
#pragma data_section(Commands,"CPU1TOCPU2RAM");
#pragma data_section(GenericParameters,"CPU1TOCPU2RAM");

void DCL_IPC_SendPrimaryAddress (void)
{
unsigned long *PMsgRam;
未签名的长事件标志;

EventFlag = IPC_FLAG11;

TempNumber[0]=6969;
TempNumber[1]=5555;
TempNumber[2]= 1111;

PMsgRam =(void *) CPU01_to_CPU02_PASSMSG;
PMsgRam[0]=(GBL_Types_UINT32)&TempNumber;
PMsgRam[1]=(GBL_Types_UINT32)和命令;
PMsgRam[2]=(GBL_Types_UINT32)&GenericParameters;

IpcRegs.IPCSENDADDR = PMsgRam[0];

IpcRegs.IPCSET.bit.IPC11 = 1; //将IPC11设置为通知CPU1读取地址
。} 

CPU 2-接收要从CPU 1读取的变量的地址。


unsigned long *Address;
unsigned long *ReceiveAddress;

if (IpcRegs.IPCSTS.IPC11 ==1)
{
*ReceiveAddress = IPCRegs.IPCRECVADDR;
IPCRegs.IPCACK.IPC11 = 1;
地址=*ReceiveAddress;
}

printf (“地址0处的值:%ld”,地址[0]);
printf (“地址1处的值:%ld”,地址[1]);
printf (“地址2处的值:%ld”,地址[2]); 

请分享一些想法,强调可能存在的问题以及应修改哪些内容以解决问题。 设置和确认标志的逻辑工作正常,但地址传递逻辑不工作。

最后一个问题是共享双变量的地址。 有可能吗? 我可以发送一个双变量地址并在接收CPU上键入cast to double吗? 这是否可行?

我非常感谢您的时间和努力。

谢谢!

归正

 

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否分享您不想使用TI的IPC驱动程序的原因?

    您是否在开发您的代码的过程中查看过这些示例?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的,因为代码片段太大,无法与我们的应用程序一起存储在内存中。 此外,我们只需要一些基本功能,而不需要太多的交互。

    是的,我已经查看了controlSUITE中提供的所有示例,并将其用作在我们的应用程序项目中实现逻辑的参考,但它似乎不起作用。  

    如果您能提供一些见解来解决此问题,我将不胜感激。

    谢谢!

    归正

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Archit,

    我看不到您的代码有任何明显的问题。 您提到IPC标志和状态标志工作正常。 但是,您没有提到在CPU2.IpcRegs.IPCRECVADDR注册中阅读的内容? 您是否收到了在CPU1.IPCRegs.IPCSENDADDR中编程的内容?

    此外,您是否确保CPU2可以访问TempNumber的地址? 例如:-如果TempNumber变量存储在CPU1.LSxRAM中,CPU2无法访问它。

    此致,

    Manoj

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此问题是否已解决?