FTM配置
FTM周期中断计算公式:
重装载值 /(主频/分频) 单位:秒
例如设置100ms的中断周期:
计数器频率为48000000hz(主频)/128(分频) = 375khz,意为每秒钟计数器自增375k
final value / (FTM clock source / prescaler ) 单位:秒
37500 (重载值)/(48000000hz(主频)/128(分频)) = 1/10秒 = 100ms
void ftmTimerISR(void)//100ms定时器中断
{
/*ftm周期中断最多也就170毫秒左右(重载值为65535) 所以设置100ms为周期
如果想1秒一次,那就只能设置10次再反转led*/
static uint8_t count = 0U;
//1s转换1次led亮灭状态
if(count < 9)
{
count++;
}
else
{
FTM_flag = 1;
PINS_DRV_TogglePins(PTE, 1 << 23);
PINS_DRV_TogglePins(PTE, 1 << 22);
PINS_DRV_TogglePins(PTE, 1 << 21);
PINS_DRV_TogglePins(PTE, 1 << 20);
count = 0;
}
//清除FTM状态标志位,若不清除,中断只会运行一次
FTM_DRV_ClearStatusFlags(INST_FLEXTIMER_MC1, (uint32_t)FTM_TIME_OVER_FLOW_FLAG);
}
/* 初始化FTM模块 */
FTM_DRV_Init(INST_FLEXTIMER_MC1, &flexTimer_mc1_InitConfig,&ftmStateStruct);
/* 配置并使定时器能溢出中断 */
//参数:定时器溢出中断;定时器中断函数;中断函数参数,此处用不到设置为0/空
INT_SYS_InstallHandler(FTM0_Ovf_Reload_IRQn, &ftmTimerISR, (isr_t*) 0U);
//使能定时器中断
INT_SYS_EnableIRQ(FTM0_Ovf_Reload_IRQn);
/* 初始化计数器 */ //参数:计数器实例;计数器配置
FTM_DRV_InitCounter(INST_FLEXTIMER_MC1, &flexTimer_mc1_TimerConfig);
/* 开始计数器 */
FTM_DRV_CounterStart(INST_FLEXTIMER_MC1);