S32K144 定时器中断
添加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); // 初始化 clockPINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr); // 初始化 pinFTM_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}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
