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:如何对齐 TMS320F28379D 的2个 CPU 的硬件触发器

Guru**** 2220740 points
Other Parts Discussed in Thread: TMS320F28379D, CONTROLSUITE, C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1020887/tms320f28379d-how-to-align-the-hardware-triggers-from-2-cpus-of-tms320f28379d

器件型号:TMS320F28379D
Thread 中讨论的其他器件: controlSUITEC2000WARE

我已经执行了一个使用 TMS320F28379D 的2个 CPU 的代码、并且创建了一个程序、此程序在 CPU1侧从 ePWM1排列到 ePWM4、并在 CPU2侧从 ePWM5排列到 ePWM8。
我设置为从 ePWM3和 ePWM7输出为第二个事件设置的硬件中断、但每次操作微型计算机时、事件发生都将对齐或移位半个周期。
我想对齐 CPU1和 CPU2的事件、我应该怎么做?

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

    您好、Kunibhide、

    您能不能描述您尝试对齐的触发器类型吗? 为该器件提供一些代码也有助于了解设置方法。

    此致、

    Marlyn

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

    您好 Merlin

    为每个 CPU1和 CPU2创建可执行文件、并生成从 ePWM1同步到 ePWM8并以相同频率运行的 PWM 脉冲。
    然而、ePWM1至 ePWM4和 ePWM5至 ePWM8的相位是固定的并且异相。
    ePWM1和 ePWM2设置 ADC 捕获的触发器、并控制从 ePWM3到 ePWM1到 ePWM4的影子存储器的写入。 类似地、从 ePWM7写入 ePWM5到 ePWM8的影子存储器是受控的。
    这是因为它使用的设置是以一半的 PWM 频率发出硬件中断。
    写入影子存储器由硬件中断控制的原因是、如果硬件中断中计算的结果按原样设置为影子存储器、则反射计时会根据计算负载而更改。
    该相位由 PHS 设置匹配、但每次启动微型计算机时、触发器输出都会同时移动或移动。

    我将 CPU1和 CPU2设置为在 CCS 设置上同时运行、并尝试执行它们、但即使如此、每次启动微型计算机时、硬件中断的中断模式也会发生变化。

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

    您好、Kunibhide、

    [引用 userid="476452 " URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1020887/tms320f28379d-how-to-align-the-hardware-triggers-from-2-cpus-of-tms320f28379d/3774277 #3774277"]我将 CPU1和 CPU2设置为在 CCS 设置上同时运行并尝试执行它们,但即使如此,每次启动微型计算机时硬件中断的中断模式也会发生变化。

    您是否使用 GBCLKSYNC 位而非 TBCLKSYNC 位来同时启动所有 PWM 波形? 如果没有,我强烈建议你这样做。 对于 CPU1和 CPU2、GBCLKSYNC 将启动所有启用的 PWM 模块的时基计数器。

    此致、

    Marlyn

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

    您好、Marlyn

    我找到了技术参考手册中15.4.3.2时基时钟同步(修订版 I)中指出的功能说明。
    我会告诉主管并检查它。

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

    您好、Marlyn

    当我检查 CPU1和 CPU2的初始化代码时、我发现每个模块重复了"15.4.3.2时基时钟同步"过程、结构如下。

    //初始化代码摘录
    EALLOW;
    CpuSysRegs.PCLKCR2.bit.EPWM1 = 1;
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=0;
    EDIS;

    // ePWM1初始化代码

    EALLOW;
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;
    EDIS;

    EALLOW;
    CpuSysRegs.PCLKCR2.bit.EPWM2 = 1;
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=0;
    EDIS;

    // ePWM2初始化代码

    EALLOW;
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;
    EDIS;

    EALLOW;
    CpuSysRegs.PCLKCR2.bit.EPWM3 = 1;
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=0;
    EDIS;

    // ePWM3初始化代码

    EALLOW;
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;
    EDIS;

    EALLOW;
    CpuSysRegs.PCLKCR2.bit.EPWM4= 1;
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=0;
    EDIS;

    // ePWM4 初始化代码

    EALLOW;
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;
    EDIS;

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

    您好、Kunibhide、

    要让 ePWM 模块在不同内核上同时启动、您需要使用 GTBCLKSYNC (全局时基时钟同步)。 该过程如下所示:

    CPU1流程:

    GTBCLKSYNC=0;

    为 CPU1配置 PWM

    waitForCpu2ReadySignal();// 来自 CPU2的 IPC 消息

    GTBCLKSYNC=1;

    CPU2流程:

    为 CPU2配置 PWM

    sendReadySignalToCPU1();//向 CPU1发送 IPC 消息

    此致、

    Marlyn

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

    您好、Marlyn

    它的实现方式与上传的代码的引用如下。
    当我尝试检查它是否可以构建时、"waitForCpu2ReadySignal ()"的路径似乎未通过、并出现错误。
    waitForCpu2ReadySignal 是在什么文件中实现的?
    编译器版本和代码使用以下代码。
    软版本:8.3.1.00004

    编译器版本:TI v16.9.2.LTS
    代码:controlSUITE \ device_support \ F2837xD \ v190
    我尝试实现的代码是:

    EALLOW;

    /*CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=0;*/

    CpuSysRegs.PCLKCR0.bit.GTBCLKSYNC=0;
    CpuSysRegs.PCLKCR2.bit.EPWM1 = 1;
    EDIS;

    // ePWM1初始化代码
    EALLOW;
    CpuSysRegs.PCLKCR2.bit.EPWM2 = 1;
    EDIS;
    // ePWM2初始化代码
    EALLOW;
    CpuSysRegs.PCLKCR2.bit.EPWM3 = 1;
    EDIS;

    // ePWM3初始化代码
    EALLOW;

    CpuSysRegs.PCLKCR2.bit.EPWM4= 1;
    EDIS;

    // ePWM4初始化代码
    waitForCpu2ReadySignal();//来自 CPU2的 IPC 消息

    EALLOW;
    /*CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;*/
    CpuSysRegs.PCLKCR0.bit.GTBCLKSYNC=1;
    EDIS;

    EALLOW;
    CpuSysRegs.PCLKCR2.bit.EPWM5=1;

    EDIS;

    // ePWM5初始化代码
    EALLOW;

    CpuSysRegs.PCLKCR2.bit.EPWM6=1;
    EDIS;

    // ePWM6初始化代码
    EALLOW;

    CpuSysRegs.PCLKCR2.bit.EPWM7=1;
    EDIS;

    // ePWM7初始化 代码
    EALLOW;

    CpuSysRegs.PCLKCR2.bit.EPWM8=1;
    EDIS;

    // ePWM8初始化 代码

    EALLOW;
    CpuSysRegs.PCLKCR2.bit.EPWM9=1;
    EDIS;


    // ePWM9初始化 代码
    sendReadySignalToCPU1();//向 CPU1发送 IPC 消息
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Marlyn

    我制作了一个暂定模型、因为我不知道"waitForCpu2ReadySignal"和"sendReadySignalToCPU1"函数的位置。
    我已经为 CPU 到 CPU 的通信分配了一些通道、因此我输入了一个代码来向空闲通道发送信息。
    但是、即使我在 CPU 之间进行通信后添加了一个代码来设置"GTBCLKSYNC=1 "、由于从 CCS 进行检查、Falg 也没有改变。
    添加的代码如下所示。

    // CPU1侧接收器
    loopCond = true;
    while (loopCond){
    MW_IPC_Receive (CHANNEL3、(uint32_t *)& TestModel.IPCReceive_o1_Channel3、& TestModel.IPCReceive_o2_Channel3、1、5、 0);

    loopCond =! TestModel.IPCReceive_o1_Channel3;


    CpuSysRegs.PCLKCR0.bit.GTBCLKSYNC=1;

    // CPU2侧发送器
    Initial _完成_值= 1;
    MW_IPC_Transmit (CHANNEL3、(uint32_t *)& initial_complete_value、1、5、0);

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

    您好、Kunibhide、

    我很抱歉,我应该说这些职能只是虚假的职能。

    我的意思是类似于以下代码:

    CPU1流程:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    EALLOW;
    CpuSysRegs.PCLKCR0.bit.GTBCLKSYNC = 0;
    // Configure PWMs for CPU1
    while (IpcRegs.IPCSTS.bit.IPC17 == 0); // Wait for CPU2 to configure PWMs
    IpcRegs.IPCACK.bit.IPC17 = 1; // Acknowledge message from CPU2
    CpuSysRegs.PCLKCR0.bit.GTBCLKSYNC = 1; // Set GTBCLKSYNC = 1 to start time base counter for all EPWMs
    EDIS;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    CPU2流程:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    EALLOW;
    // Configure PWMs for CPU2
    IpcRegs.IPCSET.bit.IPC17 = 1; // Let CPU1 know EPWMs have been configured
    EDIS;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    如果您的项目中未包含"F2837xD_IPC_DRIVERS.h"、则需要包含"F2837xD_IPC_DRIVERS.h"。  

    我也建议查看此 IPC 示例:

    C:\ti\c2000\C2000Ware_version\device_support\f2837xd\examples\dual\IPC_GPIO_toggle

    此致、

    Marlyn

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

    Marlyn 上面提到的完全正确。

    全局 TBCLKSYNC 被 CPU1禁用、CPU1上的 ePWM 被初始化。 同时、CPU2在 CPU2上配置 EPWM。 CPU1等待 CPU2完成(IPC 代码)。 所有初始化都被组合后。 CPU1通过启用全局时钟同步来同时启用所有 EPWM。

    NIMA