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:如何安全地在 CPU1 和 CPU2 之间传输 EMIF1 主器件?

Guru**** 2695575 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1591133/tms320f28377d-how-to-transfer-the-emif1-master-between-cpu1-and-cpu2-in-a-safe-way

器件型号: TMS320F28377D
主题: C2000WARE 中讨论的其他器件

您好的团队、

有 2 个芯片通过 EMIF1 与 28377 板连接、我想使用 CPU1 和 CPU2 单独写入。 因此、EMIF1 的主器件必须在两个 CPU 之间传输。 我的问题是、如何以安全的方式转移主设备? 我指出、如果 CPU2 保持了 EMIF1 的主器件、则会忽略 CPU1 的写入操作。

我在 C2000Ware_5_05_00_00\driverlib\f2837xd\examples\dual\emif 中找到了双核写入 EMIF1 示例。 但我认为这不是一种安全的方法。  

// in cpu1's main.c         
       while(HWREGH(EMIF1CONFIG_BASE + MEMCFG_O_EMIF1MSEL) !=
                                                           EMIF_MASTER_CPU1_G)
        {
            EMIF_selectMaster(EMIF1CONFIG_BASE, EMIF_MASTER_CPU1_G);
        }

// what if CPU2 grab the master when CPU1 running in this function??
        errCountLocal = readWriteMemCPU1(ASRAM_CS2_START_ADDR_CPU1,
                                         ASRAM_CS2_SIZE);
        errCountGlobalCPU1 = errCountGlobalCPU1 + errCountLocal;

// in cpu2's main.c
        while(HWREGH(EMIF1CONFIG_BASE + MEMCFG_O_EMIF1MSEL) !=
                                                       EMIF_MASTER_CPU2_G)
        {
            EMIF_selectMaster(EMIF1CONFIG_BASE, EMIF_MASTER_CPU2_G);
        }

每个 CPU 都会执行一个 while 循环来检查它是否成功获取主器件。 如果 CPU1 首次抓取主器件、则 CPU2 仍可以在 CPU1 执行写入操作时抓取主器件。 我是否理解正确、以及如何安全地在 CPU1 和 CPU2 之间传输主器件?

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

    嗨、道远、

    当 MSEL_EMIF1=0x1 时、CPU1 拥有 EMIF1、CPU2 无法获取主器件所有权。 CPU1 完成 EMIF1 操作后、它应将 MSEL_EMIF1 的值更改为 0x0、以便 CPU2 可以将 MSEL_EMIF1 的值更改为 0x2。 CPU2 完成 EMIF1 操作后、CPU2 需要释放所有权并将 MSEL_EMIF 的值更改为 0x00

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

    因此、当 MSEL_EMIF1=0x1 时、CPU2 将等待 while 循环 、直到 CPU1 设置 MSEL_EMIF1=0x0、我是否正确?

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

    是的、您回答正确。