TI论坛
直播中

喻唯

7年用户 196经验值
私信 关注

TMS320C6657 双核加载,请问如何判断core1代码是否加载到了指定位置?

本帖最后由 一只耳朵怪 于 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 initialize, 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();

回帖(5)

王英

2018-6-19 01:16:08
做成启动文件的时候,core0和core1的cmd文件需要使用全局地址编写,不能再使用0x00800000地址,
core 0 用0x10800000, core 1用0x11800000
举报

喻唯

2018-6-19 01:26:02
引用: hdfsf 发表于 2018-6-19 01:16
做成启动文件的时候,core0和core1的cmd文件需要使用全局地址编写,不能再使用0x00800000地址,
core 0 用0x10800000, core 1用0x11800000

确实是这样,多谢了!我想再问一下,使用NDK网络通信,最大数据包只能是3072吗?我仿真调试的时候可以最大传8192,但是程序烧写启动后,传输总是失败.
举报

张忠雨

2018-6-19 01:39:03
*(pBootMagicAddCore0+ (0x01000000*i)/4 ) = (*pBootMagicAddCore0) + 0x01000000 * i;
这里的/4是什么意思,因为我看手册上的各个核的地址感觉不需要/4,求解释?如果加上/4的话,你的多核启动解决了嘛?还有一个问题,我们的生成的.out文件很大,大概是3.7MB,用的是8核,现在摸不清楚该如何多核启动,希望能和您交流下您的资料和启动的具体方法。
举报

喻唯

2018-6-19 01:53:23
引用: dingL 发表于 2018-6-19 01:39
*(pBootMagicAddCore0+ (0x01000000*i)/4 ) = (*pBootMagicAddCore0) + 0x01000000 * i;
这里的/4是什么意思,因为我看手册上的各个核的地址感觉不需要/4,求解释?如果加上/4的话,你的多核启动解决了嘛?还有一个问题,我们的生成的.out文件很大,大概是3.7MB,用的是8核,现在摸不清楚该如何多核启动,希望能和您交流下 ...

参考 http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/8065.aspx striker 大神的回复
举报

更多回帖

发帖
×
20
完善资料,
赚取积分