完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如题,我想实现基本的多核之间的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 个讨论
|
|
只有小组成员才能发言,加入小组>>
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
697 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
607 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1069 浏览 1 评论
765 浏览 0 评论
普中科技F28335开发板每次上电复位后数码管都会显示,如何熄灭它?
532 浏览 1 评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
175浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
136浏览 14评论
在使用3254进行录音的时候出现一个奇怪的现象,右声道有吱吱声,请教一下,是否是什么寄存器设置存在问题?
131浏览 13评论
TLV320芯片内部自带数字滤波功能,请问linein进来的模拟信号是否是先经过ADC的超采样?
126浏览 12评论
GD32F303RCT6配置PA4 ADC引脚,将PA2代替key功能,PA2连接时无法实现预期功能,为什么?
75浏览 10评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-1 14:20 , Processed in 0.762775 second(s), Total 45, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号