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

TMDXEVM6678LE用0核引导多核核问题

我在TMDXEVM6678LE上做用0和控制引导1核的试验,程序如下  

#define IPCGR_REG  ((volatile unsigned int*)0x02620240)
unsigned int magic=0x1187fffc;
    if(0 == corenum)
    {
     memcpy((void*)(0x11800000), (void*)0x00800000, 512*1024);

        // 0x1186d800 is the address of _c_int00 for core1 in .map
        *((volatile unsigned int*)magic) = 0x1186d800 ;
        // Initialize main Platform lib
  memset(&init_config, 0, sizeof(platform_init_config));
  memset(&init_flags, 1, sizeof(platform_init_flags));
  if (platform_init(&init_flags, &init_config) != Platform_EOK)
  {
   printf ("Platform init failed!\n");
   print_platform_errno();
   return;
  }
  platform_uart_init();
  platform_uart_set_baudrate(BOOT_UART_BAUDRATE);
     /* sent IPC interrupt to core1 */
        IPCGR_REG[1] = 1;
  while(1)
  {
   for (i=0; i< 100000000; i++) ;
   write_uart(core_msg0);
  }
    }
    else if(1 == corenum)
    {
     while(1)
  {
   for (i=0; i< 100000000; i++) ;
   write_uart(core_msg1);
  }
    }


现在遇到的问题是把程序用CCS通过仿真器加载到0核后0核能够运行,1核不能运行。如果把程加载到1核,1核能够运行。
(1)程序中的0x1186d800是我从.map文件中读出来的_c_int00的地址加上1核的物理地址偏移。复制到1核心L2 sram中地址就是0x1186d800,我把这个地址写入magic address对吗?
(2)当我把程序通过CCS加载运行,0核跑起来,能够通过串口打印出正确的信息,我通过0核1核除外的核去看1核的内存,发现代码已经复制到1核。
(3)0核跑起来当我通过CCS用2核去看自己的内存时,会出现如图所示的提示。是不是说明我的1核心已经被IPC触发了呢?
(4)0核跑起来我去看IPCGR_REG[1]的值时,内容是0,IPC触发过程是直接将IPCGR_REG[1]置1后,内部马上自己清零吗?
(5)没有触发1核的可能原因有那些呢?

Jane Lu:

Hi Leeen,

              在您的这个测试中,DSP配置成了哪种boot 模式?

              IPC REG置1后应该不会自动清0。 但不排除core1 处于运行状态并对其清0了。

               另外,是否core1 每次都会出现上述错误? 如果能连接上,请尝试一下方法:

               1     CCS只连接core0, 其他核没有connect

                2     download *.out to core0, then run it

                 3    连接core1, 看看PC指针值是多少?

 

               Jane

赞(0)
未经允许不得转载:TI中文支持网 » TMDXEVM6678LE用0核引导多核核问题
分享到: 更多 (0)