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.

[参考译文] TMS320F28377D:使用 Device_bootCPU2功能启动 IPC。

Guru**** 2534680 points
Other Parts Discussed in Thread: C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1076105/tms320f28377d-ipc-boot-using-the-device_bootcpu2-function

部件号:TMS320F28377D
“线程:C2000WARE”中讨论的其它部件

尊敬的 TI 您好,

我正在处理 IPC 外围设备,我对 用于 控制 CPU2启动的 Device_bootCPU2功能有许多疑问。

  1. 我不理解 CPU2的进程启动,CPU2在通电后是否启动?
  2. 在 Device_bootCPU2功能中,我注意到我们在等待 CPU2控制系统启动?  通常,在 CPU1的任何干预之前调用此函数,问题是 CPU1在不知道 CPU2何时启动时应如何等待? 如果 CPU2已启动,为什么不重置 CPU2?
  3.     //
        // Loop until CPU02 control system IPC flags 1 and 32 are available
        //
        while (((HWREG(IPC_BASE + IPC_O_FLG) & IPC_FLG_IPC0)  != 0U) ||
               ((HWREG(IPC_BASE + IPC_O_FLG) & IPC_FLG_IPC31) != 0U))
        {
    
        }
  4. 接收1号和32号两旗意味着什么? CPU2将设置这些标志是因为什么?
  5. 我还能理解为什么 TI 将 IPCSET 寄存器设置为“HWREG(IPC_BASE + IPC_O_SET) =  0x80000001U”?
  6.         //
            //CPU01 to CPU02 IPC Boot Mode Register
            //
            HWREG(IPC_BASE + IPC_O_BOOTMODE) = bootMode;
    
            //
            // CPU01 To CPU02 IPC Command Register
            //
            HWREG(IPC_BASE + IPC_O_SENDCOM) = BROM_IPC_EXECUTE_BOOTMODE_CMD;
    
            //
            // CPU01 to CPU02 IPC flag register
            //
            HWREG(IPC_BASE + IPC_O_SET) = 0x80000001U;

在参考手册中,我正在寻找与 IPCSET 寄存器集相关的信息,但我没有找到任何信息,可以帮助解决这个问题吗?

提前感谢您,

S.Tarik

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    塔里克

    在 TRM 中,IPC 启动流程如下所示:

    https://www.ti.com/lit/ug/spruhm8h/spruhm8h.pdf 

    C2000Ware 中有一个示例。  该示例位于:

    c;/ti/CC2000 /C2000Ware_3_04_00_00/device_support/f2837xd/examples/dual/IPC_GPIO 切换

    对 CPU1使用独立闪存配置,对 CPU2使用闪存配置。

    你已经研究过这个问题了吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Jha,

    我有疑问,我导入了项目,但我不理解以下代码中独立引导和非独立引导之间的区别。

    #ifdef _STANDALONE
    #ifdef _FLASH
        // TODO check to see if this breaks.
        Device_bootCPU2(BOOTMODE_BOOT_TO_FLASH_SECTOR0);
    #else
        // TODO this breaks the RAM build.
        Device_bootCPU2(BOOTMODE_BOOT_TO_M0RAM);
    #endif
    #endif

    此致,

    S.Tarik

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Tarik,

    CPU1_flash_standalone 内部版本配置中,定义了两个符号:_standalone_flash。 使用该代码,CPU2从 Flash Sector0引导。 您可以在 Device_bootCPU2()函数内检查实现的详细信息 。

    不同之处在于它将从 Flash_sector0和 M0RAM 启动。