//-------------------------------------------------------------------------*
// 文件名: PWM_Init.c *
// 说 明: PWM_Init构件头文件
//少了给占空比的一句话 别的都没问题 那主句因为放到函数里面了 所以没有复制进来 *
//-------------------------------------------------------------------------*
#include "PWM_Init.h"
void PWM_Init(uint32 time0,uint32 time1)
{
SIM_SCGC5|=SIM_SCGC5_PORTA_MASK; //开启A口 时钟
//设定 A4 A8 口为PWM 三个输出口
PORTA_PCR7=PORT_PCR_MUX(3)|PORT_PCR_DSE_MASK;
// PTA7选择了FTM0_CH4功能 | 强驱动使能 开启A7和A8口的FTM复用功能
PORTA_PCR8=PORT_PCR_MUX(3)|PORT_PCR_DSE_MASK;
//PTA8 FTM1_CH0 ALT3
//开启 FTM0 FTM1 FTM2 时钟
SIM_SCGC6|=SIM_SCGC6_FTM0_MASK; //开启使能FTM0时钟
SIM_SCGC6|=SIM_SCGC6_FTM1_MASK; //开启使能FTM1时钟
//设定FTM0.1.2选项为输出PWM信号
FTM0_C4SC|=FTM_CnSC_ELSB_MASK;
FTM1_C0SC|=FTM_CnSC_ELSB_MASK;
FTM0_C4SC&=~FTM_CnSC_ELSA_MASK;
FTM1_C0SC&=~FTM_CnSC_ELSA_MASK;
FTM0_C4SC|=FTM_CnSC_MSB_MASK;
FTM1_C0SC|=FTM_CnSC_MSB_MASK;
//控制选择 选择分频
FTM0_SC = FTM_SC_CLKS(1) | FTM_SC_PS(5); // 选择了总线时钟 | 32分频
FTM1_SC = FTM_SC_CLKS(1) | FTM_SC_PS(0); // 选择了总线时钟 | 1分频
//禁用写保护
FTM0_MODE|=FTM_MODE_WPDIS_MASK; //禁用FTM0写保护
FTM1_MODE|=FTM_MODE_WPDIS_MASK; //禁用FTM1写保护
//设定使能
FTM0_MODE&=~1;
FTM1_MODE&=~1;
//开启FTM0_CHO FTM1_CH0 FTM2_CHO
FTM0_OUTMASK=0xef; //开启FTM0_CH1
FTM1_OUTMASK=0xfe; //开启FTM1_CH1
//不使用链接通道
FTM0_COMBINE=0;
FTM1_COMBINE=0;
//
FTM0_OUTINIT=0;
FTM1_OUTINIT=0;
//禁止外部触发
FTM0_EXTTRIG=0; //禁止FTM0外部触发
FTM1_EXTTRIG=0; //禁止FTM1外部触发
//选择输出极性 0为正 1为负
FTM0_POL=0; //选择FTM0输出极性为正
FTM1_POL=0; //选择FTM1输出极性为正
//关闭正交解码器 设置边沿对齐的PWM
FTM0_QDCTRL&=~FTM_QDCTRL_QUADEN_MASK;
FTM1_QDCTRL&=~FTM_QDCTRL_QUADEN_MASK;
//FTM 反向控制
FTM0_INVCTRL=0; //禁用FTM0反向
FTM1_INVCTRL=0; //禁用FTM1反向
//
FTM0_SWOCTRL=0;
FTM1_SWOCTRL=0;
//
FTM0_PWMLOAD=0;
FTM1_PWMLOAD=0;
//设定输出值
FTM0_CNTIN=0;
FTM1_CNTIN=0;
//设定周期 周期=MOD - CNTIN + 0x0001
FTM0_MOD=time0;
FTM1_MOD=time1;
//设置占空比 占空比=(CnV-CNTIN)/(MOD - CNTIN + 0x0001)mn n
//设定计数值为0
FTM0_CNT=0;
FTM1_CNT=0;
}
|