欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > S32K144外设实验(五):FTM周期中断

S32K144外设实验(五):FTM周期中断

2025/3/28 7:41:52 来源:https://blog.csdn.net/weixin_40485788/article/details/146486152  浏览:    关键词:S32K144外设实验(五):FTM周期中断

文章目录

  • 1. 概述
    • 1.1 时钟系统
    • 1.2 实验目的
  • 2. 代码的配置

1. 概述

1.1 时钟系统

FTM的CPU接口时钟为SYS_CLK,在RUN模式下最高80MHz。模块的时钟结构如下图所示。
时钟结构
从上图中可以看出,FTM模块的功能时钟为SYS_CLK,计数器的时钟源可以来源于三条路:

  • SYS_CLK
  • 固定时钟
  • 外部时钟

此处需要注意,虽然外部时钟源的可选范围较广,但是配置工具提示,其值不可超过SYS_CLK的4分频,为了追求更高的时钟分辨率,笔者配置计数器的时钟为SYS_CLK。

1.2 实验目的

本次实验的内容比较简单,设置FTM模块的基础参数,设置MOD值,当计数器到达MOD值时则产生溢出中断,在中断中对一个静态变量计数,整个计数值到达1秒时翻转一个LED的状态。

2. 代码的配置

由于配置计数器的时钟源为SYS_CLK,那么PCC中的时钟配置则随便配置,笔者采用默认的设置,如下图:
PCC时钟
FTM的配置如下:
FTM配置
在这里设置分频值后,计数器的时钟会被配置工具自动计算并显示。计数模式使用向上计数,这里的计数模式没有其他品牌的单片机灵活,只有向上和上下计数两个模式。
计数值的计算和其他单片机差不多,都要预留一个反应的时钟周期,所以MOD值要减1。
初始化代码如下:

ftm_state_t ftmState;
//周期溢出中断初始化
void FtmMcInit(void)
{//初始化FTM模块参数FTM_DRV_Init(INST_FLEXTIMER_MC_1, &flexTimer_mc_1_InitConfig_0, &ftmState);//配置计数器FTM_DRV_InitCounter(INST_FLEXTIMER_MC_1, &flexTimer_mc_1_TimerConfig_0);//设置中断优先级INT_SYS_SetPriority(FTM0_Ovf_Reload_IRQn, 6);//开始计数FTM_DRV_CounterStart(INST_FLEXTIMER_MC_1);
}

中断服务程序仍然使用启动文件中定义好的函数名,在中断中要注意将溢出中断的标志位清除。
中断部分代码如下:

//FTM0周期溢出中断
void FTM0_Ovf_Reload_IRQHandler(void)
{static uint16_t i = 0;if (++i >= 1000){i = 0;PINS_DRV_TogglePins(LED_BLUE_PORT, 1 << LED_BLUE_PIN);}//清除中断标志位FTM_DRV_ClearStatusFlags(INST_FLEXTIMER_MC_1, FTM_TIME_OVER_FLOW_FLAG);
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词