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

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值