K60 FTM定时器 定时中断

K60 FTM定时器 定时中断

     尝试多次无论如何设置mod寄存器都无法实现 CNTIN→MOD 向上计数,本程序采用自由计数模式,由CNTIN开始计数直到CNT==0xffff,硬件自动重置CNT=CNTIN。除此之外还应在中断向量表中设置中断函数,中断号 78 - 16 + ftmn ,中断函数中应清除相应的STATUS寄存器和TOF标志位来清除中断标志。 频率计算,只能慢慢试了。

/*************************************************************************
*                             桂林电子科技大学嵌入式基地
*
*  函数名称:FTM_Timer_init
*  功能说明:定时溢出中断始化函数
*  参数说明:ftmn freq-定时器初值  ps-时钟分频 1 2 6 8....
*  函数返回:无
*  修改时间:2018-4-26
*  备    注:
*************************************************************************/
void FTM_Timer_init(FTMn ftmn, u16 freq , u8 ps)
{
    /******************* 开启时钟 *******************/

    SIM_SCGC6 |= SIM_SCGC6_FTM0_MASK;                                    //使能FTM0时钟
       
    /******************** 配置时钟和分频 ********************/
    FTM_MODE_REG(FTMx[ftmn])   |= FTM_MODE_WPDIS_MASK ;                    //写保护禁止
    FTM_QDCTRL_REG(FTMx[ftmn])  = 0 ;
    FTM_SC_REG(FTMx[ftmn])      = FTM_SC_PS(ps) | FTM_SC_CLKS(1) | FTM_SC_TOIE_MASK ;
    FTM_CNTIN_REG(FTMx[ftmn])   = freq ;                                    // Counter Initial Value 计数器初始化值
    FTM_MOD_REG(FTMx[ftmn])     = 1 ;                                   //Modulo value模数, EPWM的周期为 :MOD - CNTIN + 0x0001
    FTM_CNT_REG(FTMx[ftmn])     = freq ;                                    //计数器。只有低16位可用
    FTM_SC_REG(FTMx[ftmn])     &= 0x7F ;                                 //清中断标志位写TOF为0
    FTM_MODE_REG(FTMx[ftmn])   |= FTM_MODE_FTMEN_MASK ;                  //FTM使能
    enable_irq(78 - 16 + ftmn);                                          //FTMn开中断
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值