您好,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?\ (unsigned int)addr+(0x10000000+corenumber*0x1000000):\ (unsigned int)addr void main(void) { unsigned int coreNumber; unsigned int *bootMagicAddr; unsigned int bootEntryAddr; unsigned int *IPCCore; Init6657(); //初始化DSP
CSL_BootCfgUnlockKicker(); for(coreNumber=1;coreNumber<2;coreNumber++) { bootMagicAddr = (unsigned int *)(GLOBAL_ADDR(BOOT_MAGIC_ADDRESS,coreNumber)); bootEntryAddr = GLOBAL_ADDR(BOOT_ENTRY_ADDRESS,coreNumber); *bootMagicAddr = bootEntryAddr; CSL_IPC_genGEMInterrupt(coreNumber,0);//start cores.. } CSL_BootCfgLockKicker(); }