This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

28377D CPU2上电不运行问题

Other Parts Discussed in Thread: CONTROLSUITE

TI工程师,您好,关该问题,我按照论坛里的指导,把以下代码加入程序并编译通过后,烧写程序上电运行后,两个CPU工作均异常了,具体表现为IO口频繁动作,失控的样子。

另外,我不加入以下代码情况下,CPU1是可以正常运行的,请指导,谢谢!

#define FLASH 1

#ifdef _STANDALONE
#ifdef _FLASH
// Send boot command to allow the CPU2 application to begin execution
IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH);
#else
// Send boot command to allow the CPU2 application to begin execution
IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_RAM);
#endif
#endif

  • 你好,方便说明一下你是使用的TI例程吗?具体哪个例程?你参考的是哪个论坛指导?
    你可以先试一下C:\ti\controlSUITE\device_support\F2837xD\v210\F2837xD_examples_Dual\blinky_dc的例程。例程中包含了3种运行模式,你可以依次测试一下。
  • 你好,按照你的指导,用例程的话两个Cpu2均可以运行,现在还有两个疑问(因为要解决我的工程问题,所以做如下对比):
    1)疑问1:用例程,当我打开IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH),在仿真模式下程序一直停留在
    do
    {
    bootStatus = IPCGetBootStatus() & 0x0000000F;
    } while ((bootStatus != C2_BOOTROM_BOOTSTS_SYSTEM_READY));
    我看了下,那是因为 IPCGetBootStatus()返回的值一直是0,我想问下IPCGetBootStatus (void)
    {
    return(IpcRegs.IPCBOOTSTS);
    }这里面IpcRegs.IPCBOOTSTS的值是在哪里更新的,软件里全局搜索没找到。
    2)疑问2:用我自己的工程,当当我打开IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH),在仿真模式下,单步执行的话程序会先跳到 returnStatus = STATUS_FAIL,然后就会到以下代码的最后一行,然后再单步的话会返回到IPCBootCPU2,就这样一直在最后一句与第一句之间跳转。
    IPCBootCPU2(uint32_t ulBootMode)
    {
    uint32_t bootStatus;
    uint16_t pin;
    uint16_t returnStatus = STATUS_PASS;

    //
    // If CPU2 has already booted, return a fail to let the application
    // know that something is out of the ordinary.
    //
    bootStatus = IPCGetBootStatus() & 0x0000000F;

    if(bootStatus == C2_BOOTROM_BOOTSTS_C2TOC1_BOOT_CMD_ACK)
    {
    returnStatus = STATUS_FAIL;

    return returnStatus;
    }

    //
    // Wait until CPU02 control system boot ROM is ready to receive
    // CPU01 to CPU02 INT1 interrupts.
    //
    do
    {
    bootStatus = IPCGetBootStatus() & 0x0000000F;
    } while ((bootStatus != C2_BOOTROM_BOOTSTS_SYSTEM_READY));

    //
    // Loop until CPU02 control system IPC flags 1 and 32 are available
    //
    while ((IPCLtoRFlagBusy(IPC_FLAG0) == 1) ||
    (IPCLtoRFlagBusy(IPC_FLAG31) == 1))
    {

    }

    if (ulBootMode >= C1C2_BROM_BOOTMODE_BOOT_COMMAND_MAX_SUPPORT_VALUE)
    {
    returnStatus = STATUS_FAIL;
    }
    else
    {
    //
    // Based on boot mode, enable pull-ups on peripheral pins and
    // give GPIO pin control to CPU02 control system.
    //
    switch (ulBootMode)
    {
    case C1C2_BROM_BOOTMODE_BOOT_FROM_SCI:

    EALLOW;

    //
    //SCIA connected to CPU02
    //
    DevCfgRegs.CPUSEL5.bit.SCI_A = 1;


    好迷茫,求指点,谢谢!
  • 新建双核工程时是不是哪里设置的不对 下载一下controlsuite里面的例程
    运行一下双核的工程看看效果 对比一下工程属性下的相关设置和配置
  • 你好,感谢你的指导,参考例程,我对比了下工程属性配置,未发现异常,我现在问题的大体情况是这样:工程1、2在仿真模式下均可以正常运行,工程1CPU1单机可以正常运行,CPU2无法正常运行,然后我在CPU1里面加入IPCBootCPU2后,两个程序均不能正常运行,另外您说的工程属性配置主要看那些配置项目?

  • flash运行的时候CPU2需要从CPU控制启动,所以你说的“工程1CPU1单机可以正常运行,CPU2无法正常运行”应该是正常情况。但正常情况下,只要在CPU1中加入IPCBootCPU2语句就可以了。你说的两个程序均不能正常运行的情况下会出现什么类似错误提示之类的问题吗?
  • 您好,感谢您的指导,有两个疑问:
    1)疑问1:仿真模式下CPU1加入IPCBootCPU2后是不是就不能正常运行了?因为我理解是仿真模式下因为两个CPU不能同时运行,如果只运行CPU1的话,相当于没有接收到CPU2运行的反馈信息,那么CPU1程序会一直停留在IPCBootCPU2,如果我的理解正确的话,那么问题就来了,我的工程与例程的现象不一样,正如我5与25日发的问题,这是为什么呢。
    2)疑问2:我的程序是在一个加入二次引导的模板上修改过来的,因为我之前发现CMD里 BEGIN 地址有更改,导致CPU1单机模式下都不能运行,后来参考例程把BEGIN修改后,CPU1就可以单机运行了,现在CPU2无法单机无法运行是不是与二次引导有关?