[S32K]S32K148入门笔记(1)FTM

 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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值