6678 多核启动

6678多核加载启动实现主要是通过0核完成。

具体实现是DSP上电通过I2C, SPI, EMIF等接口将应用程序加载到核心0运行,然后在核心0运行代码里实现另外7个核的启动地址指定和发送IPC中断唤醒其余7核。

启动实现详见如下:

1、寄存器定义

 // CorePac0-7 IPC 触发寄存器(IPCGRx)
#define  IPCGR_0_REGS			(*((volatile unsigned int *)(0x02620240)))
#define  IPCGR_1_REGS			(*((volatile unsigned int *)(0x02620244)))
#define  IPCGR_2_REGS			(*((volatile unsigned int *)(0x02620248)))
#define  IPCGR_3_REGS			(*((volatile unsigned int *)(0x0262024C)))
#define  IPCGR_4_REGS			(*((volatile unsigned int *)(0x02620250)))
#define  IPCGR_5_REGS			(*((volatile unsigned int *)(0x02620254)))
#define  IPCGR_6_REGS			(*((volatile unsigned int *)(0x02620258)))
#define  IPCGR_7_REGS			(*((volatile unsigned int *)(0x0262025C)))

// 核0~核7 魔术地址(L2地址后4字节)
#define CORE_0_MAGIC_ADDR  		(*((volatile unsigned int *)(0X1087FFFC)))
#define CORE_1_MAGIC_ADDR   	(*((volatile unsigned int *)(0X1187FFFC)))
#define CORE_2_MAGIC_ADDR  		(*((volatile unsigned int *)(0X1287FFFC)))
#define CORE_3_MAGIC_ADDR  		(*((volatile unsigned int *)(0X1387FFFC)))
#define CORE_4_MAGIC_ADDR  		(*((volatile unsigned int *)(0X1487FFFC)))
#define CORE_5_MAGIC_ADDR  		(*((volatile unsigned int *)(0X1587FFFC)))
#define CORE_6_MAGIC_ADDR  		(*((volatile unsigned int *)(0X1687FFFC)))
#define CORE_7_MAGIC_ADDR  		(*((volatile unsigned int *)(0X1787FFFC)))

// 寄存器锁
#define KICK0   (*((volatile unsigned int *)(0x02620038)))
#define KICK1   (*((volatile unsigned int *)(0x0262003C)))

#define KICK0_UNLOCK 	(0x83E70B13)
#define KICK1_UNLOCK 	(0x95A4F1E0)
#define KICK_LOCK 			(0x1)

2、获取入口地址
该实例实现多核启动用的是一个公用工程,所以启动入口地址只有一个。若是多个工程,则各核启动入口地址不同,具体是看自己如何定义内存分配。

如口地址如何获取?在编译后工程Debug目录下。**.map文件有指定,如下图
在这里插入图片描述
官方指定启动入口地址为 _c_int00 ,也可自定义指定地址,具体实现在工程里新建一个 **.cmd文件,内容如下:

-heap  0x8000
-stack 0x20000

MEMORY
{

}

SECTIONS
{
	//.text:_c_int00  >    DDR3    START(BootMagic)
	.text:_c_int00  >    0x80000000    START(BootMagic)
}

3、加载各核启动地址,并发送IPC中断

//指定起始地址,在.cmd文件内定义
extern unsigned int  _c_int00(void);
extern unsigned int far BootMagic;

void Load_Core_app_Start()
{
	// 解锁寄存器
	KICK0 = KICK0_UNLOCK;
	KICK1 = KICK1_UNLOCK;

	//加载核1~核7魔术地址
	CORE_1_MAGIC_ADDR  = (unsigned int )_c_int00;
	CORE_2_MAGIC_ADDR  = (unsigned int )_c_int00;
	CORE_3_MAGIC_ADDR  = (unsigned int )_c_int00;
	CORE_4_MAGIC_ADDR  = (unsigned int )&BootMagic;
	CORE_5_MAGIC_ADDR  = (unsigned int )&BootMagic;
	CORE_6_MAGIC_ADDR  = (unsigned int )&BootMagic;
	CORE_7_MAGIC_ADDR  = (unsigned int )&BootMagic;

	// 向核1~核7发送IPC启动运行中断
	IPCGR_1_REGS  = 0x01;
	IPCGR_2_REGS = 0x01;
	IPCGR_3_REGS = 0x01;
	IPCGR_4_REGS = 0x01;
	IPCGR_5_REGS = 0x01;
	IPCGR_6_REGS = 0x01;
	IPCGR_7_REGS = 0x01;

	// 上锁寄存器
	KICK0 = KICK_LOCK;
	KICK1 = KICK_LOCK;

	my_Delay(1000);
}

4、各核启动后向指定地址写入数据,便于查看各核是否已经启动。你也可以通过串口打印实现。

#define UIREG(x)  (*((volatile unsigned int *)(x)))

void Load_Core_start_Test(unsigned char coreNum)
{
	  switch( coreNum )
	  {
	    case 1:		UIREG(0x0C000000) = 0x11111111; 	break;
	    case 2:		UIREG(0x0C000004) = 0x22222222;		break;
	    case 3:		UIREG(0x0C000008) = 0x33333333;		break;
	    case 4:		UIREG(0x0C00000C) = 0x44444444; 	break;
	    case 5:		UIREG(0x0C000010) = 0x55555555;		break;
	    case 6:		UIREG(0x0C000014) = 0x66666666;		break;
	    case 7:		UIREG(0x0C000018) = 0x77777777;		break;
	    default:	break;
	  }
}

5、主程序入口

int main()
{ 
    if (0 == DNUM)
    {
    	// 通过核0启动 其它7核
    	Load_Core_app_Start();
    }
    else
	{
		// 其余核启动后向指定地址写数据
    	 Load_Core_start_Test(DNUM);
    }
    
    BIOS_start();    /* does not return */
    return(0);
}

6、通过仿真器加载初始化0核,并将工程加载到0核
6.1、初始化核0如下图

在这里插入图片描述
6.2、加载工程到核0如下图
在这里插入图片描述
7、运行工程
7.1、运行工程之前写地址为初始化后随机默认数据,如下图
在这里插入图片描述
7.2、运行后为各个核启动后向指定地址所写数据,如下图
在这里插入图片描述
7.3、查看各核停靠地址
通过仿真器查看各核运行停靠地址,也可以知道各核是否启动。
在这里插入图片描述

  • 5
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
冃录 11录 ...............................................................3 C6678多核运行Dem o详解.......................................... 7 1 ・ intc_b「oadcast_ 1 ...................................................................................................... 7 I」功能描述........................................................7 1.2变最定义及使用空间分配.........................................7 1.3实现流程........................................................7 1.4注意事项........................................................9 2. D D R 3......................................................................................................................10 2 .1 功能描述....................................................... 10 2.2变量定义及使用空间分配........................................ 10 2.3实现流程....................................................... 10 2.4注意事项....................................................... 11 3. ipc一 navigator.......................................................................................................... 12 3」功能描述....................................................... 12 3.2变最定义及使用空间分配........................................ 12 V 3 .3 实现流程....................................................... 12 3.4注意事项....................................................... 14 4. emif_nandflash....................................................................................................... 14 4 J 功能描述....................................................... 14 4.2变量定义及使用空间分配........................................ 14 4 .3 实现流程....................................................... 14 4.4注意事项....................................................... 15 5. emif_norflash......................................................................................................... 16 5」功能描述....................................................... 16 5.2变最定义及使用空间分配........................................ 16 5.3实现流程....................................................... 16 5.4注意事项....................................................... 17 6. hyperlink................................................................................................................ 17 6」功能描述....................................................17 6.2变量定义及使用空间分配......................................17 6 .3 实现流程....................................................17 6.4注意事项.................................................... 18 7. i2c_eeprom............................................................................................................. 19 7」功能描述.....................................................19 7.2变最定义及使用空间分配......................................19 7.3实现流程.................................................... 19 7.4注意事项....................................................20 8. i2c_srioswitch........................................................................................................20 & 1功能描述....................................................20 8.2变量定义及使用空间分配......................................20 8.3实现流税.........:............................. =21 8.4注意事项....................................................21 9. sem 2....................................................................................................................... 21 9」功能描述.................................................... 21 9.2变虽定义及使用空间分配......................................22 9.3实现流程....................................................22 9.4注意事项....................................................23 1(). srio...........................................................................................................................24 10」功能描述...................................................24 10.2变暈定义及使用空间分配.....................................24 10.3实现流程...................................................24 10.4注意事项...................................................27 11. tim er....................................................................................................................... 28 11」功能描述...................................................28 11.2变最定义及使用空间分配.....................................28 11.3实现流程...................................................2911.4注意爭项......................................................30 12. SPI_FPGA.............................................................................................................. 30 12」功能描述......................................................30 12.2变量定义及使用空间分配.......................................30 12.3实现流程......................................................30 12.4注意爭项......................................................31 13. SPI_nortlash...........................................................................................................31 13」功能描述......................................................31 13.2变量定义及使用空间分配.......................................31 13.3实现流程......................................................31 13.4注意爭项......................................

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值