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开中断
}

你可能感兴趣的:(K60,K60,定时器)