平台:C6678
板子:公司做的板子。
问题描述:
我们的ccs工程,将数据段和堆栈段放在L2中,使用I2C的方式启动CORE0,然后我再core0的L2中的内容拷贝到其他core的L2中,然后在其他core的magic_addr中写入_c_int0的地址,然后发送ipc给core1~core7。按照这个流程,core1~core7应该从magic_addr指定的入口开始运行,但是发现core1~core7还是在0x20B0000的地址里面运行,并没有进入_c_int0入口。
请问上述的流程是不是有什么问题?
我的代码是这样的:
void mdspMulticoreBoot()
{
unsigned int *IPCGr0;
int i;
int coreID = 0;
char hello_total[50];
int len = 0;
/* 获取core ID */
coreID = platform_get_coreid();
if(coreID == 0)
{
/* 写其他core的BootMagic地址 */
for(i = 1;i < CORE_NUM_6678;i++)
{
memcpy((void*)(0x10800000 + 0x01000000 * i),(const void*)0x800000,0x7FFFC);
*(unsigned int *)(0x1087FFFC + 0x01000000 * i) = (unsigned int)_c_int00;
}
IPCGr0 = (unsigned int *)0x02620240;
/* core0 向其他core发送IPC中断 */
for(i = 1;i < CORE_NUM_6678;i++)
{
*(IPCGr0 + i) = (*(IPCGr0 + i)) | 0x00000001;
}
}
}
查看每个core的L2的内容,已经magic_addr的内容,都是正确的。