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

TCI6638K2K pcie boot 问题

请高手指导:

      因为我们的代码要在DDR中运行,上电后,通过PCIe向6638的L2中写入了DDR3的初始化代码,成功后又向6638中写入正式运行的代码,之后将PC指针强制跳转到代码运行地址,代码没有运行起来。

   DDR3初始化代码中做了一个无线循环,下面是代码

    DEVICE_REG32_W(MAGIC_ADDR, 0);
    void (*exit)();
    UINT32 i, entry_addr;

    DEVICE_REG32_W(MAGIC_ADDR, 0);
 
    while(1)
    {
        entry_addr = DEVICE_REG32_R(MAGIC_ADDR);
        if (entry_addr != 0)
        {
             exit = (void (*)())entry_addr;
            (*exit)();
        }
        for (i=0; i < 100; i++)
            asm("nop");
 }

RC端代码:

 PushData(ddr_init,0,&boot_entry_addr0);

 WDC_WriteAddr32(hDev,1,0xffffc,boot_entry_addr0);

  while (1) {
       WDC_ReadAddr32(hDev, 3, 0, &tempReg);                                                                                                                                                                                                         if (tempReg == 0)  break;
       for (i = 0; i < 1000; i++) i++;
  }

PushData(core0_code,0,&boot_entry_addr0);

 WDC_WriteAddr32(hDev,1,0xffffc,boot_entry_addr0);

Feng Lin6:

请高手指导:

      因为我们的代码要在DDR中运行,上电后,通过PCIe向6638的L2中写入了DDR3的初始化代码,成功后又向6638中写入正式运行的代码,之后将PC指针强制跳转到代码运行地址,代码没有运行起来。

   DDR3初始化代码中做了一个无线循环,下面是代码

    DEVICE_REG32_W(MAGIC_ADDR, 0);    void (*exit)();    UINT32 i, entry_addr;

    DEVICE_REG32_W(MAGIC_ADDR, 0);     while(1)    {        entry_addr = DEVICE_REG32_R(MAGIC_ADDR);        if (entry_addr != 0)        {             exit = (void (*)())entry_addr;            (*exit)();        }        for (i=0; i < 100; i++)            asm("nop"); }

RC端代码:

 PushData(ddr_init,0,&boot_entry_addr0);//向6638L2中写入代码,并提取运行首地址

 WDC_WriteAddr32(hDev,1,0xffffc,boot_entry_addr0);//将运行首地址写入BOOT MAGIC地址

WDC_WriteAddr32(hDev,0,0×54,0x0);//向6638发送MSI中断

  while (1) {       WDC_ReadAddr32(hDev, 3, 0, &tempReg);                                                                                                                                                                                                         if (tempReg == 0)  break;       for (i = 0; i < 1000; i++) i++;  }

PushData(core0_code,0,&boot_entry_addr0);//向6638中写入正式运行代码并提取首地址

 WDC_WriteAddr32(hDev,1,0xffffc,boot_entry_addr0);//将运行首地址写入BOOT MAGIC地址

Feng Lin6:

回复 Andy Yin1:

谢谢你的回复!问题已解决,由于在等待代码跳转部分做了一个设置标志位的操作,导致代码跳转不正确,删除后已能正常启动!

赞(0)
未经允许不得转载:TI中文支持网 » TCI6638K2K pcie boot 问题
分享到: 更多 (0)