本帖最后由 一只耳朵怪 于 2018-6-19 15:17 编辑
你们好:
我在调试C6657 SPI BOOT 双核启动的时候遇到了一些问题,代码烧写到了NOR FLASH,core0 启动成功,core1没有启动,使用
仿真器监控发现core0入口地址正确,core1的入口地址使用core0的程序写入了,也给了IPC中断,但是core1没有启动,我不知道怎么判断core1代码是否加载到了指定位置?两个核的程序使用的是一个工程编译的,L2的地址0x800000没有改变,能指导一下吗?先行谢过!下面是程序main函数代码,附近时使用工具链生成的双核.dat
文件
void main()
[
platform_init_flags init_flags;
platform_init_config init_config;
int *pBootMagicAddCore0;
int *IpcGr0;
int *KICK0 = (int*)UPP_KICK0;
int *KICK1 = (int*)UPP_KICK1;
int coreId = 0;
int i = 0;
/* Set default values */
memset(&init_flags, 0, sizeof(platform_init_flags));
memset(&init_config, 0, sizeof(platform_init_config));
init_flags.pll = 1;
init_flags.ddr = 1;
init_flags.tcsl = 1;
init_flags.phy = 1;
init_flags.ecc = 1;
init_config.pllm = 0;
coreId = platform_get_coreid ();
if(coreId == 0)
[
if (platform_init(&init_flags, &init_config) != Platform_EOK)
[
System_printf("Platform failed to ini
tialize, errno = 0x%x n", platform_errno);
]
else
[
platform_uart_init();
platform_uart_set_baudrate(115200);
if(Sock_init() < 0)
[
printf("Sock_init failed.n");
]
pBootMagicAddCore0 = (int*)0x108FFFFC;
(*pBootMagicAddCore0) += 0x10000000;// translate to global address
for(i = 1;i < CORE_NUM_6657; i++)//write the other cores' boot magic address
[
*(pBootMagicAddCore0+ (0x01000000*i)/4 ) = (*pBootMagicAddCore0) + 0x01000000 * i;
]
*KICK0 = 0x83E70B13;
*KICK1 = 0x95A4F1E0;
platform_delay(500);
IpcGr0 = (int*)0x02620240;
/*warning:when running on no-boot mode,core0~core7 must all be connected to the target*/
for(i = 1;i < CORE_NUM_6657; i++)//core0 sent ipc interrupt to
[
*(IpcGr0+i) = (*(IpcGr0+i)) | 0x00000001;
]
test_uart(1);
]
]
if(Buff_init() < 0)
[
printf("Buff_init failed.n");
]
BIOS_start();