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

6678 IPC多核触发启动疑惑?

各位大侠,

     最近在调试6678 的IPC,从core0触发core1.在调试过程中,需要将core0和core1两个核group后才能在run的时候,core0会触发core1.

      如果我没有group后两个核是单独的,运行core0后,它不会将core1触发。

      请问,有没有其他方式,不用group方式从core0触发core1,并使core1运行?我看了手册里里面写到一句话:

Group, connect the target, load and run the project on Core 0~7 simultaneously。

      如果没有其他方式的话,在release版本中,脱离CCS平台和仿真器,core0是如何触发core1的呢?

 

 

Thomas Yang1:

Hi chunlei gan

group的目的是让core0或者core1同步运行,避免出现core0运行了,而core1还没有初始化的情况

对于实际release版本,你可以用代码的形式保证2core 同步运行,方法比较多,比如采用共享全局变量作为旗语来让2者同步

chunlei gan:

回复 Thomas Yang1:

Hi Thomas Yang

    刚刚看bootlaoder手册,boot通过core0的BOOT_MAGIC ADDRESS来触发core0,这部分代码写在ROM里面,用户无法查看,那么想必在core1里面也有BOOT_MAGIC ADDRESS这样的一个相关地址用来使core0触发core1.想问下,我的理解正确么?

    您刚刚所说用全局变量的方式保持2core同步可以这样理解么:

    在core0触发后,给一个全局变量旗语置1,当core1发现全局变量旗语置1后启动?

    但是问题来了,那时候core1还没有初始化吧?如何知道全局变量旗语已经置1了呢?

                                                                                                             谢谢。

Andy Yin:

回复 chunlei gan:

您好,

每个core都有相应magic address;都是由core0写该地址并通过IPC触发其他核。

Thomas Yang1:

回复 chunlei gan:

Hi  chunlei gan

在core0和core1都正常启动,跳到main函数后,用软件的方法来同步2个core

应用代码查到core0和core1的启动标志(软件定义的全局变量,core0_init = ok, core1_init =ok)后,才能继续向下执行,否则需要等待

chunlei gan:

回复 Thomas Yang1:

Hi Thomas Yang

1 .您说在core0和core1都正常启动?想问下在做main函数之前,所有的8个核都已经起来了?这块是在c_int00里面做的吧?(对c_int00这块不大了解 ),core0已经启动后,其他core都进入idle状态,然后等待core0去用IPC触发其他核么?

2. 您说的全局变量可以这样理解么,在除core0以外的所有核都进入idle状态后,就将每个核的全局变量置成OK,而此时还没有进入main函数,应该在c_int00里面么?然后每个核在main去判断全局变量的值?

不好意思,我现在对多核的一个流程有些模糊,或者有相应的资料我去看下。谢谢

chunlei gan:

回复 Thomas Yang1:

Hi Thomas Yang ,

用软件同步2个core还是不大明白,能否说的详细点呢?谢谢

chunlei gan:

回复 Andy Yin:

Hi Andy Yin:

        我在core0里面写了相应的magic address,并通过IPC也触发了其他核,如下:

if(coreID == 0)

       {

       ….

        core0_init = OK_INIT;

/* Writing the entry address to other cores */

for (core = 1; core < 8; core++)

{

printf("core %d writing the entry address to other cores,core %d.\n",coreID,core);

DEVICE_REG32_W(BOOT_MAGIC_ADDR(core), (uint32_t)&_c_int00);

/* Delay 1us sec */

for (i=0; i<1000; i++)

asm (" NOP 5");

}

for (core = 1; core < 8; core++)

{

/* IPC interrupt other cores */

DEVICE_REG32_W(IPCGR(core), 1);

for (i=0; i<1000; i++)

asm (" NOP 5");

}

       ….

       }

       else if((coreID == 1)&&(core0_init == OK_INIT))

       {…

        }

这样,core0应该就可以把其他核触发了,在group多核的情况下,所有的核都可以跑起来;但是,如果不设置成group的话,在参考Thomas Yang 的方式设置了全局变量core0_init,其他核还是不会跑起来的。请问还有什么需要注意的地方呢?谢谢

gao shilin:

回复 chunlei gan:

Hi chunlei gan

我最近也在学习IPC中断启动其他核。但是我遇到了一点问题。

当我从0核的L2P SRAM利用memcpy搬移其中的代码内存到其他核的SRAM 的时候,总是提示我出现错误:A memery access has been pending for 10000 cpu cycles。要搬移的内存块有0x60000这么大。

不知道问题出在什么地方,能不能帮我分析下??

能不能把您的源代码发给我一份,感激不尽。我是初学者,看了一周文档和程序都没进展。

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