- //-------------------------------------------------------------------------*
- // 文件名: 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;
- }
|