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}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部