您好,Ti的专家
我现在在进行6657双核BOOT的工作,遇到了一些问题不清楚,想咨询一下:
目前状态:单核 SPI BOOT完全OK,冷板启动加载正常。双核加载不正确,Debug调试正常,固化程序后不能正常加载起来,核0写了个小程序,主要初始化PLL,DDR3,发送IPC中断,写核1的boot magic地址;核1跑应用程序。
问题:
1. IPC中断手册上说IPCGR寄存器第一位写1就触发中断,我写了1,但是通过memory view查看地址0x02620244 最低位是0?
2. 调试程序我区分了LL2段使用了0x10xxxxxx,0x11xxxxxx来区分全局地址,Bootmagic地址分别是0x108FFFFC和0x118FFFFC。我的理解是:核0 main函数初始化PLL,DDR3,然后向核1的boot maigic地址(0x118FFFFC)写核1程序的_c_int00地址;最后向IPCGR1发送中断,结果不成功。
map文件查看核1应用程序_c_int00 enter point symbol地址:0x0c05e020
核0 main函数如下:
#define BOOT_MAGIC_ADDRESS 0x8FFFFC // for C6657
#define BOOT_ENTRY_ADDRESS 0x0c05e020 //理解写入int00地址
#define IPC_INTERRUPT_CORE0 0x02620240
/*convert local address to global address for EDMA on multi-core DSP*/
#define GLOBAL_ADDR(addr,corenumber) (unsigned int)addr<0x1000000?\
(unsignedint
)addr+(0x10000000+corenumber*0x1000000):\
(unsignedint
)addr
void
main(void
)
{
unsignedint
coreNumber;
unsignedint
*bootMagicAddr;
unsignedint
bootEntryAddr;
unsignedint
*IPCCore;
Init6657(); //初始化DSP
CSL_BootCfgUnlockKicker();
for
(coreNumber=1;coreNumber<2;coreNumber++)
{
bootMagicAddr = (unsignedint
*)(GLOBAL_ADDR(BOOT_MAGIC_ADDRESS,coreNumber));
bootEntryAddr = GLOBAL_ADDR(BOOT_ENTRY_ADDRESS,coreNumber);
*bootMagicAddr = bootEntryAddr;
CSL_IPC_genGEMInterrupt(coreNumber,0);
//start cores..
}
CSL_BootCfgLockKicker();
}
Ryan BL:
使用的TI哥的MAD工具?
貌似那套对多核的LL2支持的不是很好,镜像好像都是在主核加载的,这样的话你从核的本地内存数据实际意外覆盖了主核的L2SRAM;
建议完全使用全局地址尝试之,或尝试从核自行加载自己的镜像。