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.

[参考译文] TMS320F28379D:独立 CPU2 引导过程

Guru**** 2798555 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1622176/tms320f28379d-standalone-cpu2-boot-procedure

部件号: TMS320F28379D
主题: C2000WARE 中讨论的其他器件

我有一个工程使用 CPU1、CPU2 和两个关联的 CLA。 通过调试器、我使工程按预期运行。 我一直在尝试让 CPU2 中的代码独立运行、但我遇到了一些问题。

我查看了一些示例、并尝试使用 IPCBootCPU2 (C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH) 函数。 我通读了代码、并注意到该函数正在 在 BOOTSTS 寄存器中查找 C2_BootROM_BOOTSTS_SYSTEM_READY 的值。 我在 CPU2 可执行文件中放置了相应的代码行、以适当地在寄存器中设置值。 接下来、该函数会返回 IPC_FLAG0 和 IPC_FLAG31 的 IPCLtoRFlagBusy 函数、以返回值 0。  

我的第一个问题是、我是否需要以编程方式清除第二个 CPU 中的这些标志、或者是否应该自动发生? 我没有在 CPU2 工程中看到任何显式说明的示例工程。  

我注意到、如果可以超出 CPU1 中代码的这一点、则 IPCBOOTMODE、IPCSENDCOM 和 IPCSET 寄存器将使用特定的值进行设置。 根据 IPCSET 值、CPU2 似乎需要确认标志 0 和 31。 是这样吗? 是否必须在 CPU2 程序中以编程方式执行任何其他操作来响应 IPCSENDCOM 和 IPCBOOTMODE 寄存器值? 我是否还需要让 CPU2 等待 CPU1 以将标志 0 和 31 向前设置? 一个功能齐全的独立示例将会大有帮助。

我也对 InitIpc 函数有疑问。 我计划在两个 CPU 中运行任何 IPC 引导函数之前添加 InitIpc、以便清除所有标志以干净地处理微控制器中的复位、我认为没有任何缺点、除非它可能导致其他问题。 我不确定是否缺少干净可靠的独立启动过程所需的任何其他信息。 请提供任何建议。

 

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

    尊敬的 Lance:

    我已邀请引导专家也提供他们对此的意见、但我相信:

    CPU2 引导 ROM 会自动清除标志 0 - 31、在启动期间 CPU2 无需其他任何操作即可响应 IPCSENDCOM 和 IPCBOOTMODE  

    此外、我建议在引导后添加 InitIPC 功能

    此致、
    Aj Favela.  

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

    尊敬的 Lance:

    ]我查看了一些示例、并尝试使用了 IPCBootCPU2 (C1C2_Brom_BOOTMODE BOOTMODE_BOOT_FROM_FLASH) 函数。 我通读了代码、并注意到该函数正在 在 BOOTSTS 寄存器中查找 C2_BootROM_BOOTSTS_SYSTEM_READY 的值。 我在 CPU2 可执行文件中放置了相应的代码行、以适当地在寄存器中设置值。 接下来、该函数会返回 IPC_FLAG0 和 IPC_FLAG31 的 IPCLtoRFlagBusy 函数、以返回值 0。  [/报价]

    连接调试器时不应调用 IPCBootCPU2()、因为它会导致系统挂起。 解决方案是使用预处理器指令、仅针对独立编译有条件地编译 IPC 引导功能、同时让 CCS 在调试会话期间处理 CPU2 引导。  

    出现独立启动问题的根本原因就是这样 连接调试器时、不能调用 IPCBootCPU2 () 函数 [1]。 使用 Code Composer Studio (CCS) 进行调试时、调试器会自动处理 CPU2 的引导、使手动 IPC 引导调用冗余、并且直接导致系统挂起[1]。

    以下是可用于封装此功能的代码。  _STANDALONE宏应该只在独立编译配置中定义、而不是在调试配置中定义。 请参阅 C2000Ware 中提供的多核 LED 示例。 [1]

    #ifdef _STANDALONE
    IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH);
    #endif

    关于 IPC 标志的清除、  您无需在 CPU2 中手动清除这些标志 -引导 ROM 和 IPC 机制自动处理此问题。  

    当 IPCBootCPU2 () 成功执行时、它会使用特定值设置 IPCBOOTMODE、IPCSENDCOM 和 IPCSET 寄存器。 根据 IPCSET 值、CPU2 确实需要确认标志 0 和 31。此确认由 CPU2 引导 ROM 代码处理。

    关于 InitIPC()、在 IPC 操作之前在 CPU1 和 CPU2 中调用它对于干净的复位处理很有用。  InitIpc () 函数可用于清除所有 IPC 标志、以便在微控制器中干净地处理复位、这对于独立的启动过程很有用

    指向其他参考的链接:

    [1]  TMS320F28379D:双核调试会话引导问题 

    希望这些帮助。

    此致、

    Ozino