TI论坛
直播中

杨晓健

7年用户 176经验值
私信 关注
[问答]

请教关于TMS320C6472EVM上多核通信IPC方法的问题

如题,我想实现基本的多核之间的IPC通信,考虑一种简单的通信方式,
利用IPCGR和IPCAR寄存器实现IPC
比如核0周期性地将消息message发给核1,核1将收到的消息进行简单处理(如简单的加法),再发给核2接收.
一下是3个project的代码
核0:
#include
#include
#include
#include "ipccfg.h"
#include "cslr_intgen.h"
#include
CSL_IntgenRegs *ipcRegsPtr = (CSL_IntgenRegs*)(0x02A80540);
main()
[
LOG_printf(&trace, "starting IPC on core %dn",DNUM);
// enable IPC interrupt
C64_enableIER(1<<4);  
]
unsigned long received_message;
unsigned long send_message = 0;
void sendIPCmsgPRD(unsigned long send_message)
[
  LOG_printf(&trace, "send message %d to core 1 on core 0",send_message);
  ipcRegsPtr->IPCGR1 = (send_message & 0xFFFFFFF) << 4;
  // generate interrupt
  ipcRegsPtr->IPCGR1 |= 1;
  send_message++;
]
核1:
#include
#include
#include
#include "ipccfg.h"
#include "cslr_intgen.h"
#include
CSL_IntgenRegs *ipcRegsPtr = (CSL_IntgenRegs*)(0x02A80540);
main()
[
LOG_printf(&trace, "starting IPC on core %dn",DNUM);
// enable IPC interrupt
C64_enableIER(1<<4);  
]
unsigned long received_message;
unsigned long send_message;
void IPCisr(void)
[
received_message = (ipcRegsPtr->IPCGR1 >> 4) & 0xFFFFFFF;
LOG_printf(&trace,"receive message %d from core 0 on core 1", received_message);
// clear IPCAR
ipcRegsPtr->IPCAR1 = 0xFFFFFFFF;
send_message = received_message + 10;
LOG_printf(&trace, "send message %d to core 2 on core 1",send_message);
ipcRegsPtr->IPCGR2 = (send_message & 0xFFFFFFF) << 4;
// generate interrupt
ipcRegsPtr->IPCGR2 |= 1;
]
核2:
#include
#include
#include
#include "ipccfg.h"
#include "cslr_intgen.h"
#include
CSL_IntgenRegs *ipcRegsPtr = (CSL_IntgenRegs*)(0x02A80540);
main()
[
LOG_printf(&trace, "starting IPC on core %dn",DNUM);
// enable IPC interrupt
C64_enableIER(1<<4);  
]
unsigned long received_message;
unsigned long send_message;
void IPCisr(void)
[
received_message = (ipcRegsPtr->IPCGR2 >> 4) & 0xFFFFFFF;
LOG_printf(&trace,"receive message %d from core 1 on core 2", received_message);
// clear IPCAR
ipcRegsPtr->IPCAR2 = 0xFFFFFFFF;
]
但是debug的时候,在trace里面发现3个核上都只执行到main函数的 LOG_printf(&trace, "starting IPC on core %dn",DNUM);这一句,
后面的周期函数void sendIPCmsgPRD和中断函数IPCisr都没有执行,不知道怎么回事,请教一下各位。

回帖(1)

李桂花

2018-8-7 07:30:49
从代码看,应该使用了BIOS。如果利用BIOS调度中断,CSL的中断相关函数不应该使用。从现象看需要先查核0的sendIPCmsgPRD()为何没有被调用。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分