center-aligned的代码
输入参数为高电平所占比例,如0.1就是10%
void init_PWM(float percent)//
{
// SIM_BASE_PTR->SCGC5 |= SIM_SCGC5_PORTC_MASK;
//系统使能FTM
SIM_SCGC6 |= SIM_SCGC6_FTM0_MASK;
//端口定义为FTM_CH0
PORTC_PCR1 = PORT_PCR_MUX(4) | PORT_PCR_DSE_MASK;
//写入保护位使能,只有此为置1,很多寄存器才能写入
FTM0_MODE |= FTM_MODE_WPDIS_MASK;
//不能使用FTM特殊寄存器
FTM0_MODE &= ~FTM_MODE_FTMEN_MASK;
//不使能Quadrature Decoder Mode(意义未知)
FTM0_QDCTRL &= ~FTM_QDCTRL_QUADEN_MASK;
//当前计数值,写入为恢复初始值,读为当前计数值
FTM0_CNT = 0;
//总计数值
FTM0_MOD = 60000;
//计数初始值
FTM0_CNTIN = 0;
//up-down clock & 系统时钟
FTM0_SC = FTM_SC_CPWMS_MASK | FTM_SC_CLKS(1);
//时钟 Divide by 8
FTM0_SC |= FTM_SC_PS(11);
//根据手册P960表格选择 Center-aligned PWM High-true
FTM0_C0SC = FTM_CnSC_ELSB_MASK;
//计数中间变化值
FTM0_C0V = (uint16)(60000*percent);
}