- 代码片段
\内部
/ / !检查ePWM基址。
/ / !
/ / !\param base指定ePWM模块基址。
/ / !
/ / !此函数确定ePWM模块的基址是否有效。
/ / !
/ / !\return如果基址有效则返回\b true,而\b false
/ / !否则
#ifdef DEBUG
static inline bool EPWM_isBaseValid(uint32_t base)
{
return(
(base == EPWM1_BASE) ||
(base == EPWM2_BASE) ||
(base == EPWM3_BASE) ||
(base == EPWM4_BASE) ||
(base == EPWM5_BASE) ||
(base == EPWM6_BASE) ||
(base == EPWM7_BASE) ||
(base == EPWM8_BASE)
);
}
#endif
/ !设置时间基数计数
/ / !
/ / !\param base是EPWM模块的基址。
/ / !\param count是时间基础计数值。
/ / !
/ / !该函数设置时基计数器的16位计数器值。
/ / !
/ / !\返回None。
static inline void
EPWM_setTimeBaseCounter(uint32_t base, uint16_t count)
{
//
// Check the arguments
//
ASSERT(EPWM_isBaseValid(base));
//
// Write to TBCTR register
//
HWREGH(base + EPWM_O_TBCTR) = count;
}
/ / !设置移相同步后的计数模式
/ / !
/ / !\param base是EPWM模块的基址。
/ / !\param模式是计数模式。
/ / !
/ / !此函数将时间基础计数设置为在新操作后向上或向下计数
/ / !epwm_setphasshift()设置的相位值。计数方向为
/ / !由变量模式决定。mode的有效输入是:
/ / !—EPWM_COUNT_MODE_UP_AFTER_SYNC—同步完成后计数
/ / !—EPWM_COUNT_MODE_DOWN_AFTER_SYNC—同步完成后倒计时
/ / !
/ / !\返回None。
static inline void
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;
}
}
设置时间基准时钟和高速时间基准时钟计数预刻度
/ / !
/ / !\param base是EPWM模块的基址。
/ / !\param预刻度是时间基数计数预刻度值。
/ / !\param highspeedprecaler是高速时基计数预刻度
/ / !价值。
/ / !
/ / !这个函数设置基准时钟的预刻度(分频器)值
/ / !计数器和高速基准时钟计数器。
/ / !prescaler和highSpeedPrescaler的有效值是EPWM_CLOCK_DIVIDER_X,
/ / !其中X为1,2,4,8,16,32,64或128。
/ / !这些宏的实际数值表示值0,1…7。
/ / !输出时钟的方程为:
/ / !TBCLK = EPWMCLK/(highspeedprecaler * prescaler)
/ / !
/ / !\b注:EPWMCLK是SYSCLK的缩放版本。复位时EPWMCLK为一半
/ / !SYSCLK。
/ / !
/ / !\返回None。
static inline void
EPWM_setClockPrescaler(uint32_t base, EPWM_ClockDivider prescaler,
EPWM_HSClockDivider highSpeedPrescaler)
{
//
// Check the arguments
//
ASSERT(EPWM_isBaseValid(base));
//
// Write to CLKDIV and HSPCLKDIV bit
//
HWREGH(base + EPWM_O_TBCTL) =
((HWREGH(base + EPWM_O_TBCTL) &
~(EPWM_TBCTL_CLKDIV_M | EPWM_TBCTL_HSPCLKDIV_M)) |
(((uint16_t)prescaler << EPWM_TBCTL_CLKDIV_S) |
((uint16_t)highSpeedPrescaler << EPWM_TBCTL_HSPCLKDIV_S)));
}
! 强制软件同步脉冲
/ / !
/ / !\param base是EPWM模块的基址。
/ / !
/ / !该功能导致单个软件启动同步脉冲。确保
/ / !在使用此函数之前,使用EPWM_setupSyncOutputMode()选择合适的模式。
/ / !
/ / !\返回None。
static inline void
EPWM_forceSyncPulse(uint32_t base)
{
//
// Check the arguments
//
ASSERT(EPWM_isBaseValid(base));
//
// Set SWFSYNC bit
//
HWREGH(base + EPWM_O_TBCTL) |= EPWM_TBCTL_SWFSYNC;
}
/ !设置同步输出脉冲事件
/ / !
/ / !\param base是EPWM模块的基址。
/ / !\param模式是同步输出模式。
/ / !
/ / !设置同步出脉冲模式。
/ / !mode的有效值为:
/ / !—EPWM_SYNC_OUT_PULSE_ON_SOFTWARE—同步脉冲由软件生成
/ / !当EPWM_forceSyncPulse ()
/ / !函数由EPWMxSYNCI调用
/ / !信号。
/ / !—EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO—同步脉冲产生于
/ / !时间基准计数器等于零。
/ / !—EPWM_SYNC_OUT_PULSE_ON_COUNTER_COMPARE_B -同步脉冲产生于
/ / !时基计数器等于比较
/ / !B值。
/ / !—EPWM_SYNC_OUT_PULSE_ON_COUNTER_COMPARE_C同步脉冲
/ / !时基计数器等于比较
/ / !C值。
/ / !—EPWM_SYNC_OUT_PULSE_ON_COUNTER_COMPARE_D同步脉冲
/ / !时基计数器等于比较
/ / !D值。
/ / !—EPWM_SYNC_OUT_PULSE_DISABLED禁用同步脉冲。
/ / !
/ / !\返回None。
static inline void
EPWM_setSyncOutPulseMode(uint32_t base, EPWM_SyncOutPulseMode mode)
{
//
// Check the arguments
//
ASSERT(EPWM_isBaseValid(base));
//
// No extended mode support
//
if(mode < EPWM_SYNC_OUT_PULSE_DISABLED)
{
//
// Write to SYNCOSEL bits
//
HWREGH(base + EPWM_O_TBCTL) =
((HWREGH(base + EPWM_O_TBCTL) & ~(EPWM_TBCTL_SYNCOSEL_M)) |
((uint16_t)mode << EPWM_TBCTL_SYNCOSEL_S));
}
//
// Extended modes and sync out disable mode
//
else
{
//
// Write 0x3 to SYNCOSEL to enable selection from SYNCOSELX
//
HWREGH(base + EPWM_O_TBCTL) = HWREGH(base + EPWM_O_TBCTL) |
EPWM_TBCTL_SYNCOSEL_M;
//
// Write to SYNCOSELX bit
//
HWREGH(base + EPWM_O_TBCTL2) =
((HWREGH(base + EPWM_O_TBCTL2) & ~(EPWM_TBCTL2_SYNCOSELX_M)) |
(((uint16_t)mode & 0x3U) << EPWM_TBCTL2_SYNCOSELX_S));
}
}
设置PWM周期负载方式。
/ / !
/ / !\param base是EPWM模块的基址。
/ / !\param loadMode是PWM周期负载模式。
/ / !
/ / !该功能用于设置PWM周期的负载模式。如果loadMode设置为
/ / !EPWM_PERIOD_SHADOW_LOAD,写或读到TBPRD (PWM周期计数)
/ / !寄存器)访问影子寄存器。如果loadMode设置为
/ / !EPWM_PERIOD_DIRECT_LOAD,一个对TBPRD寄存器的写或读访问
/ / !直接注册。
/ / !
/ / !\返回None。
static inline void
EPWM_setPeriodLoadMode(uint32_t base, EPWM_PeriodLoadMode loadMode)
{
//
// Check the arguments
//
ASSERT(EPWM_isBaseValid(base));
if(loadMode == EPWM_PERIOD_SHADOW_LOAD)
{
//
// Clear PRDLD
//
HWREGH(base + EPWM_O_TBCTL) &= ~EPWM_TBCTL_PRDLD;
}
else
{
//
// Set PRDLD
//
HWREGH(base + EPWM_O_TBCTL) |= EPWM_TBCTL_PRDLD;
}
}
! 使能相移负载
/ / !
/ / !\param base是EPWM模块的基址。
/ / !
/ / !此功能可在适当同步时加载相移
/ / !事件发生时。
/ / !
/ / !\返回None。
static inline void
EPWM_enablePhaseShiftLoad(uint32_t base)
{
//
// Check the arguments
//
ASSERT(EPWM_isBaseValid(base));
//
// Set PHSEN bit
//
HWREGH(base + EPWM_O_TBCTL) |= EPWM_TBCTL_PHSEN;
}
/ / !禁用移相负载
/ / !
/ / !\param base是EPWM模块的基址。
/ / !
/ / !此功能禁用相移加载。
/ / !
/ / !\返回None。
static inline void
EPWM_disablePhaseShiftLoad(uint32_t base)
{
//
// Check the arguments
//
ASSERT(EPWM_isBaseValid(base));
//
// Clear PHSEN bit
//
HWREGH(base + EPWM_O_TBCTL) &= ~EPWM_TBCTL_PHSEN;
}
//
/ / !设置时基计数器模式
/ / !
/ / !\param base是EPWM模块的基址。
/ / !\param counterMode是时基计数器模式。
/ / !
/ / !此函数设置时基计数器模式。
/ / !counterMode的有效值有:
/ / !—EPWM_COUNTER_MODE_UP - Up计数模式。
/ / !—EPWM_COUNTER_MODE_DOWN - Down计数模式。
/ / !—EPWM_COUNTER_MODE_UP_DOWN -上下计数模式。
/ / !- EPWM_COUNTER_MODE_STOP_FREEZE -停止冻结计数器。
/ / !
/ / !\返回None。
static inline void
EPWM_setTimeBaseCounterMode(uint32_t base, EPWM_TimeBaseCountMode counterMode)
{
//
// Check the arguments
//
ASSERT(EPWM_isBaseValid(base));
//
// Write to CTRMODE bit
//
HWREGH(base + EPWM_O_TBCTL) =
((HWREGH(base + EPWM_O_TBCTL) & ~(EPWM_TBCTL_CTRMODE_M)) |
((uint16_t)counterMode));
}
/ / !将阴影设置为同步模式下的活动周期负载
/ / !
/ / !\param base是EPWM模块的基址。
/ / !\param shadowLoadMode是激活加载模式的影子。
/ / !
/ / !此函数将阴影设置为活动周期寄存器加载模式
/ / !关于同步事件。shadowLoadMode的有效值有:
/ / !- EPWM_SHADOW_LOAD_MODE_COUNTER_ZERO - shadow to active load发生时
/ / !时间基准计数器达到0。
/ / !- EPWM_SHADOW_LOAD_MODE_COUNTER_SYNC - shadow to active load发生时
/ / !时间基准计数器达到0和a
/ / !同步发生。
/ / !- EPWM_SHADOW_LOAD_MODE_SYNC -只发生主动负载的影子
/ / !当同步发生时。
/ / !
/ / !\返回None。
static inline void
EPWM_selectPeriodLoadEvent(uint32_t base,
EPWM_PeriodShadowLoadMode shadowLoadMode)
{
//
// Check the arguments
//
ASSERT(EPWM_isBaseValid(base));
//
// Write to PRDLDSYNC bit
//
HWREGH(base + EPWM_O_TBCTL2) =
((HWREGH(base + EPWM_O_TBCTL2) & ~(EPWM_TBCTL2_PRDLDSYNC_M)) |
((uint16_t)shadowLoadMode << EPWM_TBCTL2_PRDLDSYNC_S));
}
/
/ / !开启单次同步模式
/ / !
/ / !\param base是EPWM模块的基址。
/ / !
/ / !此功能启用一次同步模式。
/ / !
/ / !\返回None。
static inline void
EPWM_enableOneShotSync(uint32_t base)
{
//
// Check the arguments
//
ASSERT(EPWM_isBaseValid(base));
//
// Set OSHTSYNCMODE bit
//
HWREGH(base + EPWM_O_TBCTL2) |= EPWM_TBCTL2_OSHTSYNCMODE;
}