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
#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;
* 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;
*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);
}
}
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有给所有从核发中断,