主题: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吗? 这是否可行?
我非常感谢您的时间和努力。
谢谢!
归正