[资料分享与下载] 配置K60 PWM的子程序

[复制链接]
 楼主| IversonCar 发表于 2015-7-18 21:18 | 显示全部楼层 |阅读模式
  1. //-------------------------------------------------------------------------*
  2. // 文件名: PWM_Init.c                                                      *
  3. // 说  明: PWM_Init构件头文件  
  4. //少了给占空比的一句话 别的都没问题 那主句因为放到函数里面了 所以没有复制进来 *
  5. //-------------------------------------------------------------------------*
  6. #include "PWM_Init.h"

  7. void PWM_Init(uint32 time0,uint32 time1)
  8. {
  9.   SIM_SCGC5|=SIM_SCGC5_PORTA_MASK; //开启A口 时钟
  10.    //设定 A4 A8 口为PWM 三个输出口
  11.   PORTA_PCR7=PORT_PCR_MUX(3)|PORT_PCR_DSE_MASK;   
  12. // PTA7选择了FTM0_CH4功能 | 强驱动使能   开启A7和A8口的FTM复用功能
  13.   PORTA_PCR8=PORT_PCR_MUX(3)|PORT_PCR_DSE_MASK;
  14. //PTA8  FTM1_CH0 ALT3
  15.    //开启 FTM0 FTM1 FTM2 时钟
  16.    SIM_SCGC6|=SIM_SCGC6_FTM0_MASK;         //开启使能FTM0时钟
  17.    SIM_SCGC6|=SIM_SCGC6_FTM1_MASK;         //开启使能FTM1时钟
  18.    //设定FTM0.1.2选项为输出PWM信号
  19.    FTM0_C4SC|=FTM_CnSC_ELSB_MASK;           
  20.    FTM1_C0SC|=FTM_CnSC_ELSB_MASK;
  21.    FTM0_C4SC&=~FTM_CnSC_ELSA_MASK;
  22.    FTM1_C0SC&=~FTM_CnSC_ELSA_MASK;
  23.    FTM0_C4SC|=FTM_CnSC_MSB_MASK;  
  24.    FTM1_C0SC|=FTM_CnSC_MSB_MASK;   
  25.    //控制选择 选择分频
  26.    FTM0_SC = FTM_SC_CLKS(1) | FTM_SC_PS(5);              // 选择了总线时钟 | 32分频
  27.    FTM1_SC = FTM_SC_CLKS(1) | FTM_SC_PS(0);              // 选择了总线时钟 | 1分频
  28.    //禁用写保护
  29.    FTM0_MODE|=FTM_MODE_WPDIS_MASK;     //禁用FTM0写保护
  30.    FTM1_MODE|=FTM_MODE_WPDIS_MASK;     //禁用FTM1写保护
  31.    //设定使能
  32.    FTM0_MODE&=~1;
  33.    FTM1_MODE&=~1;
  34.    //开启FTM0_CHO FTM1_CH0 FTM2_CHO
  35.    FTM0_OUTMASK=0xef;                     //开启FTM0_CH1
  36.    FTM1_OUTMASK=0xfe;                     //开启FTM1_CH1   
  37.    //不使用链接通道
  38.    FTM0_COMBINE=0;
  39.    FTM1_COMBINE=0;
  40.    //
  41.    FTM0_OUTINIT=0;  
  42.    FTM1_OUTINIT=0;
  43.    //禁止外部触发
  44.    FTM0_EXTTRIG=0;                         //禁止FTM0外部触发
  45.    FTM1_EXTTRIG=0;                         //禁止FTM1外部触发
  46.    //选择输出极性 0为正 1为负
  47.    FTM0_POL=0;                            //选择FTM0输出极性为正
  48.    FTM1_POL=0;                            //选择FTM1输出极性为正
  49.    //关闭正交解码器 设置边沿对齐的PWM
  50.    FTM0_QDCTRL&=~FTM_QDCTRL_QUADEN_MASK;
  51.    FTM1_QDCTRL&=~FTM_QDCTRL_QUADEN_MASK;
  52.    //FTM 反向控制
  53.    FTM0_INVCTRL=0;                         //禁用FTM0反向
  54.    FTM1_INVCTRL=0;                         //禁用FTM1反向
  55.    //
  56.    FTM0_SWOCTRL=0;
  57.    FTM1_SWOCTRL=0;
  58.    //
  59.    FTM0_PWMLOAD=0;
  60.    FTM1_PWMLOAD=0;
  61.    //设定输出值
  62.    FTM0_CNTIN=0;
  63.    FTM1_CNTIN=0;
  64.    //设定周期  周期=MOD - CNTIN + 0x0001
  65.    FTM0_MOD=time0;
  66.    FTM1_MOD=time1;
  67.    //设置占空比  占空比=(CnV-CNTIN)/(MOD - CNTIN + 0x0001)mn n
  68.    
  69.    //设定计数值为0
  70.    FTM0_CNT=0;  
  71.    FTM1_CNT=0;
  72. }


Mancherstun 发表于 2015-7-18 21:41 | 显示全部楼层
程序写的很清晰,谢谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

344

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

50

主题

344

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部