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