TI中文支持网
TI专业的中文技术问题搜集分享网站

c6678 boot rom 怎么编译呢?

下载了源码, 不知道怎么编译,我需要从反汇编分析多核启动的过程。

BootROM_c6678_PG2.0

JinMing Hu:

回复 Shine:

core0~7上电都会执行这个Bootloader程序吗?

Shine:

回复 JinMing Hu:

只有core0会去执行,建议先看一下bootloader文档。
www.ti.com/…/sprugy5c.pdf

JinMing Hu:

回复 Shine:

我没有找到有关core1~core7相关更加详细的信息。

在多核启动中,首先由core0根据sw3~sw6的配置来确定使用什么方式启动。假设使用spi nor flash这种方式,那么bootloader会从flash读取core0的代码到Local L2 SRAM里面,并且开始执行core0的用户代码。core0就开始负责从flash搬运core1~core7的代码到各自的Local L2 SRAM里面,并且设置其它各核的BOOT_MAGIC_ADDRESS,然后发送一个IPC中断启动其它核开始执行。

我又了解到,core1~core7从一开始就默认执行IDLE指令,当它们接收到IPC中断时会跳出这个IDLE指令, 并且读取BOOT_MAGIC_ADDRESS,开始开始执行自己的用户代码。

下面是我从bootloader中看到的启动代码,不知道我的理解对不对?

所以我认为core0~core7上电的时候应该是这样的,所有的核一开始的PC地址指向0x20B00000 (bootloaderde 的启动代码), 并且开始执行bootloader的代码。

bootloader根据各核的dnum来区别core0与其他核, 如果是core0则完成上面所述的启动流程;如果是core1~core7的话, 那么就设置并使能IPC中断,并且进入IDLE指令,等待中断core0的IPC中断,当接收到core0的IPC中断后,读取BOOT_MAGIC_ADDRESS,开始执行BOOT_MAGIC_ADDRESS指向的代码,就是c_init00()。

然后多核启动完成。

/***************************************************************************************** FUNCTION PURPOSE: Boot for non-zero cores***************************************************************************************** DESCRIPTION: Secondary cores simply clear their boot address register and idle.*Once woken they branch to the address in their boot address register****************************************************************************************/
#pragma FUNC_NEVER_RETURNS(nysh_sec_core_boot)
void nysh_sec_core_boot (void)
{void (*fp)(void);UINT32i;magicAddr = 0;/* The ROM disabled the cache, but it can become enabled during* the boot process, so flush and invalidate are used */hwFlushCache ();do{nysh_sleep ();// core1 ~ core7 设置并使能IPC中断,并且进入IDLE指令,等待中断hwInvalidateCache ((UINT32) &magicAddr); // 读取BOOT_MAGIC_ADDRESS} while (magicAddr == 0);fp = (void (*)())magicAddr;i = 0;do{chipKickUnlock();DEVICE_REG_BOOT_COMPLETE= (1 << DNUM);/* Boot complete bit */chipKickLock();i += 1;} while ((i < DEVICE_MAX_BC_RETRY) && ((DEVICE_REG_BOOT_COMPLETE & (1 << DNUM)) == 0));/**//**/(*fp)();// 开始执行各核的代码, _c_int00();} /* nysh_sec_core_boot */
赞(0)
未经允许不得转载:TI中文支持网 » c6678 boot rom 怎么编译呢?
分享到: 更多 (0)