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 的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;
CpuSysRegs.PCLKCR2.bit.EPWM4= 1;
EDIS;
EALLOW;
CpuSysRegs.PCLKCR2.bit.EPWM5=1;
EDIS;
CpuSysRegs.PCLKCR2.bit.EPWM6=1;
EDIS;
CpuSysRegs.PCLKCR2.bit.EPWM7=1;
EDIS;
CpuSysRegs.PCLKCR2.bit.EPWM8=1;
EDIS;
EALLOW;
CpuSysRegs.PCLKCR2.bit.EPWM9=1;
EDIS;
您好、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流程:
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;
CPU2流程:
EALLOW; // Configure PWMs for CPU2 IpcRegs.IPCSET.bit.IPC17 = 1; // Let CPU1 know EPWMs have been configured EDIS;
如果您的项目中未包含"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