pBootMagicAddCore0 = (int*)0x1087FFFC;
(*pBootMagicAddCore0)+= 0x10000000;// translate to global address
for(i = 1;i < CORE_NUM_6678; i++)//write the other cores' boot magic address
{
*(pBootMagicAddCore0+ (0x01000000*i)/4 ) = (*pBootMagicAddCore0) + 0x01000000 * i;
}
这里为什么要除以4,还有采用C6678,8个核共享一份代码,cmd里的
.myboot
{
*.*<boot.obj>(.text)
} > BOOT_CORE0
字段,如何能用一个工程和一个cmd文件兼容所有8个核的加载
Andy Yin1:
代码哪来的,没看懂,参考下面EMAC multicore boot例子中emac_boot_mc中的core0_start_others.c中的代码。
http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/10240.aspx
可以做到多个core使用同一个工程同一个cmd,但是需要注意在将多个boot table合成时,需要注意遇到LL2地址段时需要区分core,这需要自己写一个boot table解析的工具,所以一般建议为方便可以使用同一个工程,但是使用不同的cmd。
Feng Jin:
回复 Andy Yin1:
你好Andy,
关于C6670的多核Boot我也有些疑问.
1. 我下载了http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/10240.aspx下的multi_core_EMAC_boot.zip文件
其中main函数
#define BOOT_MAGIC_ADDRESS 0x87FFFC // for TCI6608 #define BOOT_ENTRY_ADDRESS 0x810000 #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;CSL_BootCfgUnlockKicker();for(coreNumber=1;coreNumber<8;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();}其中
bootEntryAddr = GLOBAL_ADDR(BOOT_ENTRY_ADDRESS,coreNumber);这一句,应该是要写_c_int00地址的吧?
map文件中显示的为ENTRY POINT SYMBOL: "_c_int00" address: 00801680
但是代码中BOOT_ENTRY_ADDRESS为固定的值0x1n810000,是不是有误?
*******************************************************************************************************************************
2. 我做的是C6670 SPI Master Boot。具体情况是:FPGA模拟SPI FLASH,bin文件交给FPGA,C6670上电SPI Boot,通过SPI接口从FPGA读取各种boot table等等。
目前基本调试成功。但是,随着代码增大,一部分全局变量(甚至.text)只能load到DDR3上。
想问的是,如果要实现带DDR3初始化的SPI Boot,需要怎么做?
我在这个帖子中http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/10240.aspx,看到您说要初始化DDR3,则一定要二次Boot。把DDR3初始化的参数列表放到EEPROM上。
如果要load .text到DDR3,一定要二次Boot吗?直接在SPI Boot所需的bin文件里附上DDR3的初始化参数列表,不行吗?
*******************************************************************************************************************************
3. 目前,我把C6670所需的4个.text都load到了MSMCSRAM中的同一块上,即4个Core的各自的.text的物理地址一样。再做Boot时,总是会出现一些问题。
请问,能否将4个Core各自的.text load到MSMCSRAM上同一个物理存储块上,且4个Core代码执行时不冲突?
zhaoheng li:
回复 Feng Jin:
你们好:
我也遇到同样的问题:
1. 是不是即使8个核同样的代码,用一个工程,也要有8个cmd或者platform,然后把每个核的.text指定到不同的地址上,8个cmd还好说,8个platform是不是就对应这8个.out文件,这样又变成多核多镜像了!
2. 现在只找到一个多核产生8个 .out文件的例子,有没有8个核生成一个.out的例子 ,哪怕很简单的功能就行。