目录
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
(相位移量)。
- 检查基地址是否有效:
ASSERT(EPWM_isBaseValid(base))
- 写入
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
。