添加timer的模块,如下所示:
128分频:主频48Mhz,128分频就是375KHz;
Timer overflow interrupt:设置溢出中断;
37500:计数最大值;
375KHz表示1s可以计数375000,计数最大值设为37500,表示timer0的中断是100ms;
main函数中初始及启动timer0:
ftm_state_t ftm_0_state;
CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT,g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT); // 初始化 clock
CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT); // 初始化 clock
PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr); // 初始化 pin
FTM_DRV_Init(INST_FLEXTIMER_MC1, &flexTimer_mc1_InitConfig, &ftm_0_state); // 初始化timer
INT_SYS_InstallHandler(FTM0_Ovf_Reload_IRQn, &ftm_handler, (isr_t *)0U); // 安装timer0的溢出中断
INT_SYS_EnableIRQ(FTM0_Ovf_Reload_IRQn); // 使能timer0中断
FTM_DRV_InitCounter(INST_FLEXTIMER_MC1, &flexTimer_mc1_TimerConfig); // 初始化timer0的计数器
FTM_DRV_CounterStart(INST_FLEXTIMER_MC1); // 启动timer0的计数器
timer0中断处理函数:
void ftm_handler() // timer0的中断处理函数
{
FTM_DRV_ClearStatusFlags(INST_FLEXTIMER_MC1, FTM_TIME_OVER_FLOW_FLAG); // 清除溢出标志位
g_count ++;
if (g_count < 5) // timer0的定时时间是100ms,期望500ms更改led的状态
return ;
g_count = 0;
bool led_state = PINS_DRV_ReadPins(PTD) >> 16 & 1; // 获取led1当前的状态
if (led_state) {
PINS_DRV_WritePins(PTD, 0 << 16 | 0 << 15 | 0 << 1 | 0); // 点亮led1-4
} else {
PINS_DRV_WritePins(PTD, 1 << 16 | 1 << 15 | 1 << 1 | 1); // 熄灭led1-4
}
}