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

C6678多核boot失败

TI工程师您好,我使用的芯片是C6678,目前在做的是SPI NOR Flash烧写,程序烧写进去后,改到spi boot方式,上电之后,SPI clk为590KHz,程序加载完成后,连接JTAG,发现core0-core3有启动,core4-core7没有启动,程序还是运行在RBL中,boot部分程序如下,加在主核初始化后,请问这是什么可能原因?

#include<stdio.h>
#include<stdint.h>
#include<platform.h>
// BOOT and CONFIG dsp system modules Definitions
#define CHIP_LEVEL_REG  0x02620000
// Boot cfg registers
#define KICK0   *(unsigned int*)(CHIP_LEVEL_REG + 0x0038)
#define KICK1   *(unsigned int*)(CHIP_LEVEL_REG + 0x003C)
#define KICK0_UNLOCK (0x83E70B13)
#define KICK1_UNLOCK (0x95A4F1E0)
#define KICK_LOCK    0
/*多核启动流程:
 * 1)RBL从NOR Flash加载代码后自动运行0核
 * 2)0核将其他核的程序入口地址写入MagicAddr
 * 3)触发其他核的核间中断,使其开始运行*/
void IPCBoot_Core1_7()
{
 int i;
 uint32_t *pBootMagicAddr1,*pBootMagicAddr2,*pBootMagicAddr3,*pBootMagicAddr4,*pBootMagicAddr5,*pBootMagicAddr6,*pBootMagicAddr7;
 uint32_t *IPCGR0;
 pBootMagicAddr1 = (uint32_t *)0x1187FFFC;
 pBootMagicAddr2 = (uint32_t *)0x1287FFFC;
 pBootMagicAddr3 = (uint32_t *)0x1387FFFC;
 pBootMagicAddr4 = (uint32_t *)0x1487FFFC;
 pBootMagicAddr5 = (uint32_t *)0x1587FFFC;
 pBootMagicAddr6 = (uint32_t *)0x1687FFFC;
 pBootMagicAddr7 = (uint32_t *)0x1787FFFC;
 /*从核启动运行的入口地址,所有核用同一套代码,故入口地址均相同*/
 *pBootMagicAddr1 = 0x0c266aa0;
 *pBootMagicAddr2 = 0x0c266aa0;
 *pBootMagicAddr3 = 0x0c266aa0;
 *pBootMagicAddr4 = 0x0c266aa0;
 *pBootMagicAddr5 = 0x0c266aa0;
 *pBootMagicAddr6 = 0x0c266aa0;
 *pBootMagicAddr7 = 0x0c266aa0;
 IPCGR0 = (uint32_t *)0x02620240;
 for(i=1;i<8;i++)
 {
  // Unlock Config
  KICK0 = KICK0_UNLOCK;
  KICK1 = KICK1_UNLOCK;
  *(volatile uint32_t *)(IPCGR0+i) |= 1;
  // lock Config
  KICK0 = KICK_LOCK;
  KICK1 = KICK_LOCK;
  platform_delay(80000);
 }
}
Shine:

core4-core7的启动流程和core1~core3一样的。检查一下core0有没有发IPC中断来唤醒core4~core7。

建议先测试core0+core4,看core4能不能起来。

user4683768:

回复 Shine:

shine,我的主核启动从核部分程序就是我题中描述的那样,core1-core7的都是一样的,core0有给所有从核发中断,

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