我在TMDXEVM6678LE上做用0和控制引导1核的试验,程序如下
#define IPCGR_REG ((volatile unsigned int*)0x02620240)
unsigned int magic=0x1187fffc;
if(0 == corenum)
{
memcpy((void*)(0x11800000), (void*)0x00800000, 512*1024);
// 0x1186d800 is the address of _c_int00 for core1 in .map
*((volatile unsigned int*)magic) = 0x1186d800 ;
// Initialize main Platform lib
memset(&init_config, 0, sizeof(platform_init_config));
memset(&init_flags, 1, sizeof(platform_init_flags));
if (platform_init(&init_flags, &init_config) != Platform_EOK)
{
printf ("Platform init failed!\n");
print_platform_errno();
return;
}
platform_uart_init();
platform_uart_set_baudrate(BOOT_UART_BAUDRATE);
/* sent IPC interrupt to core1 */
IPCGR_REG[1] = 1;
while(1)
{
for (i=0; i< 100000000; i++) ;
write_uart(core_msg0);
}
}
else if(1 == corenum)
{
while(1)
{
for (i=0; i< 100000000; i++) ;
write_uart(core_msg1);
}
}

现在遇到的问题是把程序用CCS通过仿真器加载到0核后0核能够运行,1核不能运行。如果把程加载到1核,1核能够运行。
(1)程序中的0x1186d800是我从.map文件中读出来的_c_int00的地址加上1核的物理地址偏移。复制到1核心L2 sram中地址就是0x1186d800,我把这个地址写入magic address对吗?
(2)当我把程序通过CCS加载运行,0核跑起来,能够通过串口打印出正确的信息,我通过0核1核除外的核去看1核的内存,发现代码已经复制到1核。
(3)0核跑起来当我通过CCS用2核去看自己的内存时,会出现如图所示的提示。是不是说明我的1核心已经被IPC触发了呢?
(4)0核跑起来我去看IPCGR_REG[1]的值时,内容是0,IPC触发过程是直接将IPCGR_REG[1]置1后,内部马上自己清零吗?
(5)没有触发1核的可能原因有那些呢?