Ti-DSP-F280039C/49C—EPWM-Phase Shift Control

目录

 EPWM_enablePhaseShiftLoad(DAB_PRIM_LEG2_PWM_BASE);

EPWM_setPhaseShift(DAB_PRIM_LEG2_PWM_BASE,2);

EPWM_disablePhaseShiftLoad(DAB_PRIM_LEG1_PWM_BASE); 

   EPWM_enableSyncOutPulseSource(DAB_PRIM_LEG1_PWM_BASE, EPWM_SYNC_OUT_PULSE_ON_CNTR_ZERO);

  EPWM_setCountModeAfterSync(DAB_SEC_LEG1_PWM_BASE,EPWM_COUNT_MODE_DOWN_AFTER_SYNC);

    EPWM_setSyncInPulseSource(DAB_SEC_LEG2_PWM_BASE EPWM_SYNC_IN_PULSE_SRC_SYNCOUT_EPWM1);


 EPWM_enablePhaseShiftLoad(DAB_PRIM_LEG2_PWM_BASE);
EPWM_enablePhaseShiftLoad(uint32_t base)
{
    //
    // Check the arguments
    //
    ASSERT(EPWM_isBaseValid(base));

    //
    // Set PHSEN bit
    //
    HWREGH(base + EPWM_O_TBCTL) |= EPWM_TBCTL_PHSEN;
}

EPWM_enablePhaseShiftLoad 函数用于启用指定 ePWM 模块的相位移加载功能。该函数接受一个参数 base,表示 ePWM 模块的基地址。

首先,函数通过调用 ASSERT(EPWM_isBaseValid(base)) 来检查传入的基地址是否有效。这是一个断言,用于确保基地址是一个有效的 ePWM 模块地址。如果基地址无效,程序将触发断言失败,通常会导致程序中断或输出错误信息。

接下来,函数设置 TBCTL 寄存器中的 PHSEN 位。具体来说,函数通过读取 TBCTL 寄存器的当前值,并使用按位或操作将 PHSEN 位(由 EPWM_TBCTL_PHSEN 指定)设置为 1,从而启用相位移加载功能。

通过这种方式,EPWM_enablePhaseShiftLoad 函数能够启用 ePWM 模块的相位移加载功能,使得相位移设置能够生效。这对于需要精确控制 PWM 信号相位的应用非常重要,尤其是在多相 PWM 系统中

EPWM_setPhaseShift(DAB_PRIM_LEG2_PWM_BASE,2);
EPWM_setPhaseShift(uint32_t base, uint16_t phaseCount)
{
    //
    // Check the arguments
    //
    ASSERT(EPWM_isBaseValid(base));

    //
    // Write to TBPHS bit
    //
    HWREG(base + EPWM_O_TBPHS) =
                   ((HWREG(base + EPWM_O_TBPHS) &
                    ~((uint32_t)EPWM_TBPHS_TBPHS_M)) |
                    ((uint32_t)phaseCount << EPWM_TBPHS_TBPHS_S));
}

EPWM_setPhaseShift 函数设置 ePWM 模块的相位移。它接受两个参数:base(ePWM 模块基地址)和 phaseCount(相位移量)。

  1. 检查基地址是否有效:ASSERT(EPWM_isBaseValid(base))
  2. 写入 TBPHS 寄存器:
    • 清除相位移相关位:HWREG(base + EPWM_O_TBPHS) & ~((uint32_t)EPWM_TBPHS_TBPHS_M)
    • 设置相位移量:(uint32_t)phaseCount << EPWM_TBPHS_TBPHS_S
    • 更新寄存器值:HWREG(base + EPWM_O_TBPHS) = ..

EPWM_disablePhaseShiftLoad(DAB_PRIM_LEG1_PWM_BASE); 
EPWM_disablePhaseShiftLoad(uint32_t base)
{
    //
    // Check the arguments
    //
    ASSERT(EPWM_isBaseValid(base));

    //
    // Clear PHSEN bit
    //
    HWREGH(base + EPWM_O_TBCTL) &= ~EPWM_TBCTL_PHSEN;
}

EPWM_disablePhaseShiftLoad 函数用于禁用指定 ePWM 模块的相位移加载功能。该函数接受一个参数 base,表示 ePWM 模块的基地址。

首先,函数通过调用 ASSERT(EPWM_isBaseValid(base)) 来检查传入的基地址是否有效。这是一个断言,用于确保基地址是一个有效的 ePWM 模块地址。如果基地址无效,程序将触发断言失败,通常会导致程序中断或输出错误信息。

接下来,函数清除 TBCTL 寄存器中的 PHSEN 位。具体来说,函数通过读取 TBCTL 寄存器的当前值,并使用按位与操作将 PHSEN 位(由 EPWM_TBCTL_PHSEN 指定)清零,从而禁用相位移加载功能。

通过这种方式,EPWM_disablePhaseShiftLoad 函数能够禁用 ePWM 模块的相位移加载功能,使得相位移设置不再生效。这对于需要停止相位移调整或恢复默认操作模式的应用非常重要

   EPWM_enableSyncOutPulseSource(DAB_PRIM_LEG1_PWM_BASE, EPWM_SYNC_OUT_PULSE_ON_CNTR_ZERO);

 #define EPWM_SYNC_OUT_PULSE_ON_CNTR_ZERO        EPWM_SYNCOUTEN_ZEROEN

#define EPWM_SYNCOUTEN_ZEROEN      0x2U    // EPWMxSYNCO Zero Count Event Enable 

static inline void
EPWM_enableSyncOutPulseSource(uint32_t base, uint16_t source)
{
    //
    // Check the arguments
    //
    ASSERT(EPWM_isBaseValid(base));
    ASSERT(source <= EPWM_SYNC_OUT_SOURCE_M);

    //
    // Enable selected EPWM Sync-Out Sources.
    //
    HWREGH(base + EPWM_O_SYNCOUTEN) = HWREGH(base + EPWM_O_SYNCOUTEN) |
                                      (uint16_t)source;
}

EPWM_enableSyncOutPulseSource 函数用于启用指定 ePWM 模块的同步输出脉冲源。该函数接受两个参数:base 表示 ePWM 模块的基地址,source 表示要启用的同步输出脉冲源。

首先,函数通过调用 ASSERT(EPWM_isBaseValid(base)) 来检查传入的基地址是否有效。这是一个断言,用于确保基地址是一个有效的 ePWM 模块地址。如果基地址无效,程序将触发断言失败,通常会导致程序中断或输出错误信息。

接着,函数通过调用 ASSERT(source <= EPWM_SYNC_OUT_SOURCE_M) 来检查传入的同步输出源是否在有效范围内。这是另一个断言,用于确保 source 参数的值不超过定义的最大值 EPWM_SYNC_OUT_SOURCE_M

然后,函数启用选定的 ePWM 同步输出源。具体来说,函数读取 SYNCOUTEN 寄存器的当前值,并使用按位或操作将 source 参数指定的位设置为 1,从而启用相应的同步输出源。

通过这种方式,EPWM_enableSyncOutPulseSource 函数能够启用 ePWM 模块的特定同步输出脉冲源,使其在指定条件下生成同步脉冲。这对于需要多个 ePWM 模块同步操作的应用非常重要。

  EPWM_setCountModeAfterSync(DAB_SEC_LEG1_PWM_BASE,EPWM_COUNT_MODE_DOWN_AFTER_SYNC);
typedef enum
{
   EPWM_COUNT_MODE_DOWN_AFTER_SYNC = 0, //!< Count down after sync event
   EPWM_COUNT_MODE_UP_AFTER_SYNC = 1    //!< Count up after sync event
} EPWM_SyncCountMode;

EPWM_COUNT_MODE_DOWN_AFTER_SYNC:其值为 0,表示在同步事件发生后,ePWM 模块将进入向下计数模式。这意味着计数器将在同步事件后从当前值开始递减。

EPWM_COUNT_MODE_UP_AFTER_SYNC:其值为 1,表示在同步事件发生后,ePWM 模块将进入向上计数模式。这意味着计数器将在同步事件后从当前值开始递增
EPWM_setCountModeAfterSync(uint32_t base, EPWM_SyncCountMode mode)
{
    //
    // Check the arguments
    //
    ASSERT(EPWM_isBaseValid(base));

    if(mode == EPWM_COUNT_MODE_UP_AFTER_SYNC)
    {
        //
        // Set PHSDIR bit
        //
        HWREGH(base + EPWM_O_TBCTL) |= EPWM_TBCTL_PHSDIR;
    }
    else
    {
        //
        // Clear PHSDIR bit
        //
        HWREGH(base + EPWM_O_TBCTL) &= ~EPWM_TBCTL_PHSDIR;
    }
}

EPWM_setCountModeAfterSync 函数用于设置指定 ePWM 模块在同步事件后的计数模式。该函数接受两个参数:base 表示 ePWM 模块的基地址,mode 表示同步事件后的计数模式,类型为 EPWM_SyncCountMode

    EPWM_setSyncInPulseSource(DAB_SEC_LEG2_PWM_BASE EPWM_SYNC_IN_PULSE_SRC_SYNCOUT_EPWM1);
EPWM_setSyncInPulseSource(uint32_t base, EPWM_SyncInPulseSource source)
{
    //
    // Check the arguments
    //
    ASSERT(EPWM_isBaseValid(base));

    //
    // Set EPWM Sync-In Source Mode.
    //
    HWREGH(base + EPWM_O_SYNCINSEL) =
            (HWREGH(base + EPWM_O_SYNCINSEL) & (~EPWM_SYNCINSEL_SEL_M)) |
            ((uint16_t)source & EPWM_SYNCINSEL_SEL_M);
}

EPWM_setSyncInPulseSource 函数用于设置指定 ePWM 模块的同步输入脉冲源。该函数接受两个参数:base 表示 ePWM 模块的基地址,source 表示要设置的同步输入脉冲源,类型为 EPWM_SyncInPulseSource

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Erick.ShaWn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值