网上找的看看 具体demo没有
想自己验证一下6472多核引导的过程,谁知道一直没有成功,下面把思路和操作描述一下,请大神们帮忙看看哪个环节有问题
平台:EVMC6472
引导方式:boot mode配的0b'0010,即下图红色框中的引导方式
我是用“evm6472\bootloader_package\EEPROM_flash_image_gen”里边的工具把使用EMULATOR在0核上调试OK的.out转成IIC EEPROM
烧写文件之后,使用I2C_EEPROM_writer工程将文件烧写到IIC ROM中去执行的,烧写是成功的,开发板上电之后,0核执行也是没问题的。
我的疑问是:我在0核上通过软件将0核L2 SRAM中的程序copy到其他5个核的L2 SRAM上去,代码如下:
/* 为1、2、3、4、5核复制代码 */
for(uiIndex = 1; uiIndex < 5; uiIndex++)
{
memcpy((void *)(CORE0_L2SRAM_IN_OTHER_CORES + uiIndex * 0x1000000), (void *)CORE0_L2SRAM, 608 * 1024);
}
然后将其他5个核对应的引导地址寄存器DSP_BOOT_ADDRx配置为“main”,代码如下:
*DSP1_BOOT_ADDR = (UINT32)main;
*DSP2_BOOT_ADDR = (UINT32)main;
*DSP3_BOOT_ADDR = (UINT32)main;
*DSP4_BOOT_ADDR = (UINT32)main;
*DSP5_BOOT_ADDR = (UINT32)main;
这些配置完之后,通过0核将其他5个核的BOOT_COMPLETE_STAT对应位域置位,使其他5个核开始引导启动。
这样,应该6个核都能跑起来的吧,但是我在程序里边加了点LED的代码,发现只有0核点了0核对应的LED,其他5个核没有点亮LED
结论:这个过程中其他5个核的引导过程存在问题,导致其他5个核没有正常跑到main函数里边去,所以没有点亮其他5个核对应的LED
问题:这个过程中,除了0核外,其他5个核的引导过程,应该是这样的:0核置位其他5个核的BOOT_COMPLETE_STAT对应位域后,
其他5个核就开始从各自DSP_BOOT_ADDRx寄存器中配置的地址开始执行!关于这点,是我理解的有问题么?如果没问题,那其他5个核应该直接就从main开始运行了,但是通过点LED观察,发现,其他5个核没有运行main里边的函数
有两点意见你可以参考: 1)引导的地址不应该是main,而是_c_int00函数,main函数是无法直接启动的; 2)确定你所有的有效代码是在L2中,而且都是0x008*****的地址空间; 如果这样还不行,那么就加JTAG看看其余Core的PC指针在什么位置,如果不在ROM空间,那么肯定就是启动成功了,只是代码有些问题;如果还在ROM的地址空间,那么就去查各个核的BOOT_ADDR地址是否写入了有效值,并且确定从核的引导方式是否正确。
|