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.

[参考译文] CCS/TMS320F28335:TMDSDOCK28335

Guru**** 2506295 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/774847/ccs-tms320f28335-tmdsdock28335

器件型号:TMS320F28335

工具/软件:Code Composer Studio

 中"半"的含义是什么

EPwm1Regs.TBPRD = 37500;

EPwm1Regs.CMPA.half.CMPA = EPwm1Regs.TBPRD/2

EPwm1Regs.CMPB = EPwm1Regs.TBPRD/4;

为什么不使用 CMPB ??

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

    Sandeep、

    上面引用的代码行中的"半"是一个助记符、允许您访问结构。

    EPWM1Regs 是 ePWM_Regs 类型的结构:

    ePWM_regs 是结构:

    ePWM_reg 结构中的一个联合体的类型为"cmpa_HRPWM_Group"(在上面突出显示)。 该联合体包含一个"cmpa_HRPWM_REG"类型的结构、该结构别名为助记符"half"、这是您在上面询问的问题。

    您可以看到此处定义的'Half-':  

    只是一个助记符、可以是任何东西。 之所以选择'half-'字、是因为"cmpa_HRPWM_regs"结构中的两个 uint16变量是 整个寄存器的一半。

    CMPB 没有相同的联合体、它只是一个 UINT16... CMPA.half 具有"CMPA"和"CMPAHR"。


    此致、
    Cody  

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

    请清晰地取消。 找不到你。 为什么一半不 是用 CMPA 写入"// ePWM 模块1配置"中,而是用  "// ePWM 模块2配置 "写入?

    // ePWM 模块1配置
    EPwm1Regs.TBPRD = 1200;//周期= 1201 TBCLK 计数
    EPwm1Regs.CMPA = 600;//为 EPWM1A 设置50%固定占空比
    EPwm1Regs.TBPHS.Half.TBPHS = 0;//将相位寄存器设置为零
    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//非对称模式
    EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;//主机模块
    EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;
    EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;//同步下流模块
    EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
    EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
    EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;// CTR 上的负载=零
    EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;// CTR 上的负载=零
    EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;//设置 EPWM1A 的操作
    EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;
    EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE;//启用死区模块
    EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;//活动高电平互补
    EPwm1Regs.DBFED = 50;// FED = 50 TBCLK
    EPwm1Regs.DBRED = 70;//最初为70 TBCLK

    // ePWM 模块2配置
    EPwm2Regs.TBPRD = 1200;//周期= 1201 TBCLK 计数
    EPwm2Regs.CMPA.half.CMPA = 600;//设置50%固定占空比 EPWM2A
    EPwm2Regs.TBPHS.Half.TBPHS = 0;//最初将相位寄存器设置为零
    EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//非对称模式
    EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE;//从机模块
    EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;
    EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;//同步直通
    EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
    EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
    EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;// CTR 上的负载=零
    EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;// CTR 上的负载=零
    EPwm2Regs.AQCTLA.bit.ZRO = AQ_SET;//设置 EPWM2A 的操作
    EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR;
    EPwm2Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE;//启用死区模块
    EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;//活动高电平互补
    EPwm2Regs.DBFED = 30;// FED = 30 TBCLK
    EPwm2Regs.DBRED = 40;//最初红色= 40 TBCLK

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Sandeep、
    位字段是这样完成的、因为"CMPA"也有一些仅与模块的 HR 部分相关的位。 之所以选择"半字"、是因为位字段恰好是寄存器总大小的一半。

    这些名称只是头文件中定义的助记符。 如果您修改结构、您可以将"half-"修改为您希望的任何字符串、甚至将其全部删除。

    此致、
    Cody