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.

[参考译文] TMS320F28P650SK:链接 XLOAD 寄存器

Guru**** 2756805 points

Other Parts Discussed in Thread: SYSCONFIG, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1612982/tms320f28p650sk-linking-xload-register

器件型号: TMS320F28P650SK
Thread 中讨论的其他器件: SysConfigC2000WARE

您好 TI 专家、
 
我 在 F28P65x 上交叉链接 ePWM XLOAD 寄存器时遇到一些问题。
 
我有 F29H85x 器件的工作代码。 在这里、我配置与的交叉链接
 
SysCtl_enableEPWMXLINK(
SYSCTL_EPWM1_XLINK | SYSCTL_EPWM2_XLINK | SYSCTL_EPWM3_XLINK | SYSCTL_EPWM4_XLINK | SYSCTL_EPWM5_XLINK |SYSCTL_EPWM6_XLINK);
 
然后致电  
 
EPWM_enableXLoad(EPWM1XLINK_BASE);
 
 STARTLD为所有 ePWM 单元同时设置该位。
 
这很有效。

在 F28P65x 器件上、我尝试按如下方式交叉链接:
 
EPWM_setupEPWMLinks(EPWM2_BASE,  EPWM_LINK_WITH_EPWM_1, EPWM_LINK_XLOAD);
EPWM_setupEPWMLinks(EPWM3_BASE,  EPWM_LINK_WITH_EPWM_1, EPWM_LINK_XLOAD);
EPWM_setupEPWMLinks(EPWM4_BASE,  EPWM_LINK_WITH_EPWM_1, EPWM_LINK_XLOAD);
EPWM_setupEPWMLinks(EPWM5_BASE,  EPWM_LINK_WITH_EPWM_1, EPWM_LINK_XLOAD);
EPWM_setupEPWMLinks(EPWM6_BASE,  EPWM_LINK_WITH_EPWM_1, EPWM_LINK_XLOAD);
 
预期以下操作会 STARTLD为所有 ePWM 单元设置位:

EPWM_enableXLoad(EPWM1_BASE);
 
但是、这仅设置 STARTLD EPWM1 的位。
 
另一方面、
 
EPWM_enableXLoad(EPWM1_BASE);
EPWM_enableXLoad(EPWM2_BASE);
EPWM_enableXLoad(EPWM3_BASE);
EPWM_enableXLoad(EPWM4_BASE);
EPWM_enableXLoad(EPWM5_BASE);
 
STARTLD在所有 ePWM 单元上设置、但不是同步、这是我的应用中需要的。
 
因此、我想问、我的做法是否根本正确、以及是否有任何特别的考虑、我应该知道。 例如、在 ePWM 初始化过程中的哪个时间点EPWM_setupEPWMLinks进行调用是否至关重要?

提前感谢您。
Beat Arnet

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

    您好、

    EPWMXLINK 功能在这两种器件中略有不同。

    请参阅下面来自 TRM 的 XLINKXLOAD 寄存器说明、因此如果 epwm1 链接到 epwm2 XLINKXLOAD 寄存器中的 epwm2、则在 epwm1 中写入 XLOAD 寄存器应该会导致 epwm2 寄存器写入。

    在写入 epwm1 xload 寄存器之前、您能否在初始化后确认寄存器配置是否正确?

    谢谢

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

    你好 Prarthan!

    感谢您的答复。

    是的、根据上面的代码片段、并再次粘贴在此处、我认为我已将 EPWM2-6 的 XLOAD 正确链接到 EPWM1。

    EPWM_setupEPWMLinks(EPWM2_BASE,  EPWM_LINK_WITH_EPWM_1, EPWM_LINK_XLOAD);
    EPWM_setupEPWMLinks(EPWM3_BASE,  EPWM_LINK_WITH_EPWM_1, EPWM_LINK_XLOAD);
    EPWM_setupEPWMLinks(EPWM4_BASE,  EPWM_LINK_WITH_EPWM_1, EPWM_LINK_XLOAD);
    EPWM_setupEPWMLinks(EPWM5_BASE,  EPWM_LINK_WITH_EPWM_1, EPWM_LINK_XLOAD);
    EPWM_setupEPWMLinks(EPWM6_BASE,  EPWM_LINK_WITH_EPWM_1, EPWM_LINK_XLOAD);

    此初始化会在 EPWM1 对 XLOAD 的第一次写入发生之前进行。

    是否有其他细微差别或特殊性,我应该知道? 或者您能分享一个有效的例子吗?

    再次感谢、

    节拍

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

    您好、

    我尝试了 F28P65 LaunchPad 上的 XLOAD、只需将 SHDW1 编程为一组值、并将活动寄存器编程为不同的一组值。

    例如、I 有 CMP 活动值 — 0,500,1000。 初始化时、从 c2000ware 运行 EPWM_EX15。 我使用 SysConfig 在 loadonce 模式下将 shdw1 启用为活动 Shdw 指针。 请注意、在这里我将 XLINKXLOAD 更改为 0、因为 0 用于链接到 EPWM1。

    现在、在这里、当我写入 EPWM1 XLOAD 时、它应该会 XLink 并写入 EPWM2、并将 SHDW1 加载为有效状态、这会告诉我 XLINKXLOAD 正在工作。

    将 STARTLD 写入 EPWM1 之前的图像:

    写入后的图像:  

    写入 EPWM1 的 STARTLD 后的 EPWM1 XCMP 寄存器

    写入 EPWM1 的 STARTLD 后的 EPWM2 XCMP 寄存器

    EPWM2 的活动寄存器现在也匹配 SHDW1 集、因此我可以得出结论:它可以正常工作。

    谢谢。

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

    你好 Prarthan、

    感谢您的额外测试和确认。

    我认为我找到了问题的根源:

    实现 ePWM_setupEPWMLink  driverlib 函数有一个错误。

    拨打电话时:

    EPWM_setupEPWMLinks(EPWM2_BASE, EPWM_LINK_WITH_EPWM_1, EPWM_LINK_XLOAD);

    根据计算寄存器地址  

    EPWM2_BASE + EPWM_O_XLINKXLOAD = 0x00003200 + 0x000E = 0x0000320E

    什么时候才是真正应该的

    EPWM2_base +  
    EPWM_O_XCMP EPWM_O_XLINKXLOAD = 0x00003200 + 0x0100 + 0x000E = 0x0000330E

    谢谢、此致、

    节拍

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

    嗨、Beat、

    是的对于 XLINKXLOAD、基本地址偏移需要加法、我将提请我们的软件团队注意。 同时、您可以创建自己的 driverlib 函数并继续。

    谢谢