【经验分享】FTM进阶特性介绍—【双边沿捕捉】

2020-02-21 21:09发布

本帖最后由 FSL_TICS_Robin 于 2014-7-18 14:25 编辑

FTM进阶特性介绍 —【双边沿捕捉】
在经验分享《FTM与TPM差异简析》一文中,对FTM和TPM的差异作了详细的介绍,但并未就FTM的进阶功能如:硬件增加死区,故障控制输入,增强触发功能,脉冲双边沿捕捉,初始化和极性控制的使用作过多的阐述。为了加深大家对FTM功能的理解,本人会陆续推出FTM进阶功能使用的经验分享,欢迎大家下载浏览及讨论交流。闲话不叙,下面介绍脉冲双边沿捕捉特性,作为FTM进阶功能使用的经验分享的头篇,希望大伙多多支持。
FTM进阶特性介绍【双边沿捕捉】.pdf (285.74 KB, 下载次数: 31) 2014-5-22 11:33 上传 点击文件名下载附件
pwm_test.rar (1.3 MB, 下载次数: 32) 2014-5-22 11:33 上传 点击文件名下载附件




PS:本帖可从飞思卡尔版块置顶帖:飞思卡尔Kinetis资料大本营飞思卡尔论坛支持小组【经验分享】帖汇总链接进入。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
35条回答
FSL_TICS_ZP
1楼-- · 2020-02-24 04:08
vampirejing 发表于 2014-6-6 21:30
看看FTM还有什么功能

后续还有FTM功能使用经验分享,敬请期待留意!
FSL_TICS_ZP
2楼-- · 2020-02-24 07:34
Forever 发表于 2014-6-6 21:33
这个做什么用的,看看先

具体功能请参考下载文档介绍。
jc325168
3楼-- · 2020-02-24 11:00
感谢楼主分享
zndz410
4楼-- · 2020-02-24 13:02
下来学习学习。
提线木偶
5楼-- · 2020-02-24 14:39
 精彩回答 2  元偷偷看……
提线木偶
6楼-- · 2020-02-24 18:23
//输入捕捉模式
U8 FTM_InputCapture_Init(FTM_MemMapPtr FTM_No, unsigned char Channel, unsigned char CaptureMode,U8 ucPin)
{
    /* open the clock gate */
  //FTM 通道使能
        if ((FTM0_BASE_PTR == FTM_No) && (Channel < 8))
    {
        SIM_SCGC6_REG(SIM_BASE_PTR) |= SIM_SCGC6_FTM0_MASK;
   
    }
    else if((FTM1_BASE_PTR == FTM_No)  && (Channel < 2))
    {
        SIM_SCGC6_REG(SIM_BASE_PTR) |= SIM_SCGC6_FTM1_MASK;
     
    }        
    else if ((FTM2_BASE_PTR == FTM_No)  && (Channel < 2))
    {
        SIM_SCGC3_REG(SIM_BASE_PTR) |= SIM_SCGC3_FTM2_MASK;
     
    }
    else
        return FALSE; /* error in FTM address or channel */

        
        FTM_PinInit(FTM_No,Channel,ucPin);//通道选择
        
        FTM_MODE_REG(FTM_No) &= (FTM_MODE_WPDIS_MASK);
        FTM_MODE_REG(FTM_No) &= (FTM_MODE_FTMEN_MASK);//使能ftm全功能
        
        FTM_SC_REG(FTM_No) |= FTM_SC_CLKS(1) | FTM_SC_PS(1);          //   系统时钟 6分频  
  //    FTM_SC_REG(FTM_No) |= FTM_SC_TOIE_MASK;  //使能计数器溢出中断
        FTM_SC_REG(FTM_No) &= (~FTM_SC_CPWMS_MASK);//FTM加计数
        FTM_CNT_REG(FTM_No)=0;
        FTM_CNTIN_REG(FTM_No)=0;
        FTM_MOD_REG(FTM_No)   = 0xFFFF;
        FTM_QDCTRL_REG(FTM_No)=(~FTM_QDCTRL_QUADEN_MASK);//关闭正交解码
        FTM_FILTER_REG(FTM_No)=0x00;    //关闭过滤器
        FTM_MODE_REG(FTM_No) &= (FTM_MODE_FTMEN_MASK);//使能ftm全功能
        
        FTM_COMBINE_REG(FTM_No) &= FTM_COMBINE_DECAPEN0_MASK|FTM_COMBINE_DECAPEN1_MASK|FTM_COMBINE_DECAPEN2_MASK|FTM_COMBINE_DECAPEN3_MASK;
        
        FTM_CnSC_REG(FTM_No,Channel) &=(~FTM_CnSC_CHF_MASK);
        FTM_CnSC_REG(FTM_No,Channel) |= FTM_CnSC_CHIE_MASK;//使能通道输入捕获中断
        FTM_CnSC_REG(FTM_No,Channel) &= (~FTM_CnSC_MSB_MASK);//配置成输入捕获模式
        FTM_CnSC_REG(FTM_No,Channel) &= (~FTM_CnSC_MSA_MASK);
      
  
    if(FTM_INPUTCAPTURE_RISINGEDGE == CaptureMode)  //允许中断,捕获上升沿
    {
        FTM_CnSC_REG(FTM_No,Channel) = FTM_CnSC_CHIE_MASK | FTM_CnSC_ELSA_MASK;
    }
    else if(FTM_INPUTCAPTURE_FALLINGEDGE == CaptureMode)  // 捕获下降沿
    {
        FTM_CnSC_REG(FTM_No,Channel) = FTM_CnSC_CHIE_MASK | FTM_CnSC_ELSB_MASK;
    }
    else if(FTM_INPUTCAPTURE_BOTHEDGE == CaptureMode)    // 捕获双沿
    {
      
        FTM_CnSC_REG(FTM_No,Channel)  |= FTM_CnSC_ELSB_MASK ;  //上升或下降沿捕获
        FTM_CnSC_REG(FTM_No,Channel)  |= FTM_CnSC_ELSA_MASK ;
    }
    else
        return FALSE;

    FTM_CnSC_REG(FTM_No,Channel) &=(~FTM_CnSC_DMA_MASK);
   
    if ((FTM0_BASE_PTR == FTM_No) && (Channel < 8))
    {
       enable_irq(INT_FTM0);
   
    }
    else if((FTM1_BASE_PTR == FTM_No)  && (Channel < 2))
    {
        enable_irq(INT_FTM1);
  
    }        
    else if ((FTM2_BASE_PTR == FTM_No)  && (Channel < 2))
    {
        enable_irq(INT_FTM2);
   
    }
   
    return TRUE;
   
   
}



这是我的初始化程序  哪有问题  希望版主告诉我   编程新手  写的比较差  别笑

一周热门 更多>