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

多核启动

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的例子 ,哪怕很简单的功能就行。

赞(0)
未经允许不得转载:TI中文支持网 » 多核启动
分享到: 更多 (0)