概述
FlexTimer是S32K1xx中功能最强最复杂的Timer,其基于16bits的Counter能够实现:输入捕获、输出比较、产生PWM、正交解码等功能。
S32K1具备2、4、6、8个不等的FTM实例,每个实例有8个通道,还具有1,2,3,4不等的错误输入通道。每个FTMn实例功能并不完全等同。
FTM在SIM_FTMOPT1[FTMGLDOK]中全局使能,不支持wait模式。
FTM具有多个中断源,读取FTM状态寄存器 (FMS, SC, and STATUS)具体判断是哪个。
通过SIM_FTMOPT0选择错误监测输入。
eg: FTM0 FAULT0 = FTM0_FLT0 pin or TRGMUX output,默认是外部引脚。
FTM支持硬件触发和同步:
FTM0:
• FTM0 hardware trigger 0 = TRGMUX trigger output
• FTM0 hardware trigger 1 = SIM_FTMOPT1[FTM0SYNCBIT]
• FTM0 hardware trigger 2 = FTM0_FLT0 pin
FTM特征
FTM时钟源可选择;
可预分频1, 2, 4, 8, 16, 32, 64, or 128;
16位计数器可自由运行,或者带初始值、终值运行,可以递增或递减;
每个通道可配置为input capture, output compare, or edge-aligned PWM mode;
Input Capture:可捕获上升、下降、双边沿;含输入滤波功能;
Output compare:匹配时输出信号可高可低可反转;
PWM :每个通道都可产生、每对通道可联合起来产生PWM;
信号
EXTCLK:FTM external clock can be selected to drive the FTM counter.
CHn:FTM channel (n);
FAULTj:Fault input (j);
PHA:Quadrature decoder phase A input;
PHB:Quadrature decoder phase B input;
内存映射
时钟源
FTM只有一个时钟域:FTM input clock;
计数器时钟源:SC[ CLKS]中2bit选择3个时钟作为计数器时钟源;
分频:计数器时钟源通过SC[ PS]中3bit,2^n进行分频后计数到Counter。
计数器
FTM 有一个 16 位计数器,供通道用于输入或输出模式。 FTM 计数器时钟是由预分频器分频的选定时钟。
Up counting
QUADEN = 0, and CPWMS = 0
起始值:CNTIN
终值:MOD
起始值被装载到FTM counter递增到终值,然后继续装载起始值,此时,TOF bit置位。
周期: (MOD – CNTIN + 0x0001) × period of the FTM counter clock
Up-down counting
QUADEN = 0, and CPWMS = 1
counter递增到终值,然后递减起始值,MOD到MOD-1时TOF bit置位。
周期: 2 × (MOD – CNTIN)× period of the FTM counter clock
Free running counter
If (FTMEN = 0) and (MOD = 0x0000 or MOD = 0xFFFF)
FTM counter 从 0x0000 自由运行到0xFFFF,然后从0xFFFF到0x0000 ,此时TOF bit置位。
或者:
• FTMEN = 1
• QUADEN = 0
• CPWMS = 0
• CNTIN = 0x0000, and
• MOD = 0xFFFF
此时也是自由运行计数器。
Counter reset
• Any write to CNT.
• FTM counter synchronization.
• A channel in Input Capture mode with ICRST = 1
Channel Modes
DECAPEN MCOMBINE COMBINE CPWMS MSB:MSA ELSB:ELSA Mode Configuration
Input Capture Mode
The Input Capture mode is selected when:
• DECAPEN = 0
• MCOMBINE = 0
• COMBINE = 0
• CPWMS = 0
• MSB:MSA = 0:0, and
• ELSB:ELSA ≠ 0:0 (边沿选择)
当所选边沿出现,捕获counter值到 CnV,CHF bit置位,若CHIE置位,对应通道中断产生,ICRST = 1时计数器复位到CNTIN。
通道滤波在channels 0, 1, 2, and 3.上有效。
Output Compare mode
The Output Compare mode is selected when:
• DECAPEN = 0
• MCOMBINE = 0
• COMBINE = 0
• CPWMS = 0, and
• MSB:MSA = 0:1
FTM生成具有可编程位置、极性、持续时间和频率的定时脉冲,当Counter计数到CnV时,通道输出可高可低或反转。匹配时,CHF bit置位,若CHIE置位,对应通道中断产生。
Edge-Aligned PWM (EPWM) mode
The Edge-Aligned mode is selected when:
• QUADEN = 0
• DECAPEN = 0
• MCOMBINE = 0
• COMBINE = 0
• CPWMS = 0, and
• MSB = 1
周期: (MOD − CNTIN + 0x0001)
脉冲宽度:(CnV − CNTIN)
脉冲宽度结束时时,CHF bit置位,若CHIE置位,对应通道中断产生。
ELSB:ELSA 决定PWM边沿。
Center-Aligned PWM (CPWM) mode
The Center-Aligned mode is selected when:
• QUADEN = 0
• DECAPEN = 0
• MCOMBINE = 0
• COMBINE = 0, and
• CPWMS = 1
周期: 2 × (MOD − CNTIN)
脉冲宽度:2 × (CnV − CNTIN)
MOD : 0x0001 to 0x7FFF
在 CPWM mode模式,计数器达到Mod再递减到CNTIN。
结语
FlexTimer还有更多的功能未在本文列出,其本质就是有一个计数器,从初始值到终值的计数,再搭配一个通道CnV匹配捕获值,从而形成丰富的功能。
更多请参阅在S32K1专栏 https://blog.csdn.net/kinetis_linux/category_11543275.html?spm=1001.2014.3001.5482。