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);  // 初始化 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
    }
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值