TI论坛
登录
直播中
杨晓健
7年用户
176经验值
私信
关注
[问答]
请教关于TMS320C6472EVM上多核通信IPC方法的问题
tms320c6472
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, "star
ti
ng 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()为何没有被调用。
从代码看,应该使用了BIOS。如果利用BIOS调度中断,CSL的中断相关函数不应该使用。从现象看需要先查核0的sendIPCmsgPRD()为何没有被调用。
举报
更多回帖
rotate(-90deg);
回复
相关帖子
tms320c6472
IPC
TMS320C6472
功耗摘要
0
TMS320C6472
应用指南
7
TMS320C
6678无法连接?看看
多核
通信
方式TI-
IPC
和OpenMP
多核
编程
3399
TMS320C6472
/
TMS320
TCI6486的吞吐量应用程序报告
0
tms320c6472
电源参考设计,12的VIN
2
TMS320C6472
DSP Silicon Errata
9
TMS320C6472
-700,pdf(Fixed-Poin
15
TMS320C6472
/
TMS320
TCI6486 DSP smc用户指南
2
TMS320C6472
/
TMS320
TCI6486 ddr2实施指南
7
TMS320C6472
/
TMS320
TCI6486吞吐量
5
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分