K60学习笔记(二)——FTM多功能定时器模块

FTM模块全称:FlexTimer Module

FTM是一个有2~8通道定时器,支持数据捕获,输出比较,输出PWM波等功能。


一、FTM寄存器


在所学习K60芯片中,FTM只有三个模块,即FTM0,FTM1,FTM2。


FTMx_SC(Status and Control)   configure(配置)

SC包含溢出标志位和用于配置中断使能的控制位。FTM配置,时钟源和各种预先设定的都将直接影响这个模块的所有通道。


FTMx_CNT(Counter) 计数初值寄存器

简单说,就是记录你从多少开始计数。

复位清零该CNT寄存器。任何对FTM计数器的写入操作,都会复位计数器,计数器的值重新回到CNTIN指定值。也可以使用FTM的同步功能,让计数器重新回到初值。各通道输出也回到初始值。

当BDM有效,可读取当前值。


FTMx_CnSC(Channel(n) Status and Control) (或写为CSC寄存器)

CnSCH包含了通道中断状态标志和配置中断使能、通道配置、引脚功能的位。


FTMx_CnV(Channel(n) Value) 通道值寄存器

这个寄存器包含了FTM计数值捕捉

当CNT计数值与当前通道寄存器中存储的值相等时,PWM输出由高电平改为低电平,直到下一个PWM周期来临,成为高电平

改变CnV的值,新的值并不会立即生效,而是到一个周期结束,FTM计数器从MOD变为CNTIN时,CnV值才生效。


FTMx_MOD(modulo register),模数寄存器

当FTM计数器达到设置的模数时,溢出标志位在下一个时钟置1。


FTMx_MODE(Feature Mode Selection),模式选择寄存器


FTMx_CNTIN(Counter Initial Value) 计数初值寄存器


FTMx_STATUS(Capture and Compare Status)


FTMx_SYNC(Synchronization)


K60学习笔记(二)——FTM多功能定时器模块_第1张图片



例程:

void FTM_Init(void)
{
PORTA_PCR6=PORT_PCR_MUX(3);//设置引脚A6引脚为FTM0_CH3的功能
SIM_SCGC6|=SIM_SCGC6_FTM0_MASK;//使能FTM0时钟
FTM0_MODE|=FTM_MODE_WPDIS_MASK;//写保护禁止
FTM0_C3SC|=FTM_CnSC_ELSB_MASK;
FTM0_C3SC&=~FTM_CnSC_ELSA_MASK;
FTM0_C3SC|=FTM_CnSC_MSB_MASK;
FTM0_SC=0x0C;
FTM0_MODE&=~1;
FTM0_OUTMASK=0xF7;
FTM0_QDCTRL&=~FTM_QDCTRL_QUADEN_MASK; //禁止正交解码模式
FTM0_COMBINE=0; //双边沿捕捉禁止,COMBINE=0;
FTM0_CNTIN=0;
FTM0_MOD=37499;
FTM0_C3V=5265;
FTM0_CNT=0;
FTM0_C3SC|=FTM_CnSC_ELSA_MASK;
FTM0_C3SC|=FTM
}


上述例程为总线时钟60MHz,经过FTM分频到3.75MHz,FTM递增计数,周期10ms,高电平时间1.5ms。使用FTM0_CH3通道,由PAT6引脚输出。


二、PWM产生


1、PWM产生原理


PWM周期=(MOD-CNTIN+1)x计数器周期


PWM占空比=(CnV-CNTIN)/PWM周期


计数器周期由SC决定,因为SC寄存器负责选择时钟源(系统时钟、固定频率时钟以及外部时钟),同时负责输入频率的分频系数。


工作过程:

SC决定了当前FTM模块时钟频率后,CNT寄存器从CNTIN中获得计数初值,开始计数,直到计数到MOD寄存器中的值后停止,由此产生了一个PWM周期。

上述过程指导了PWM周期决定因素。而PWM作为脉冲,脉宽由CnV决定,当CNT计数器计数到CnV中的值时,PWM输出由高电平变为低电平,直到CNT计数到MOD寄存器中的模值时,一个PWM周期结束,下个周期开始,PWM输出又变为高电平。


FTM有多少个通道,就可以控制多少个不同的CnV,从而输出多少个不同占空比的PWM。


2、PWM程序



以下部分摘自学习过程中阅读的技术文档。

39.1.2   特征

FTM模块可以选择时钟。


正交解码(Quadrature decoder)


39.3 存储器映射和寄存器声明

计算机最重要的功能单元之一是Memory。Memory是众多存储单元的集合,为了使CPU准确地找到存储有某个信息的存储单元,必须为这些单元分配一个相互区别的“身份证号”,这个“身份证号”就是地址编码。在嵌入式处理器内,集成了多种类型的Memory,通常,我们称同一类型的Memory为一个Memory Block。一般情况下,处理器设计者会为每一个Memory Block分配一个数值连续、数目与其存储单元数相等、以16进制表示的自然数集合作为该Memory Block的地址编码。这种自然数集合与Memory Block的对应关系,就是Memory Map(存储器映射)。

该部分为FTM寄存器模块提供了详细的介绍。

39.3.1 Memory Map


参考资料:http://blog.csdn.net/u012802702/article/details/45560467 





你可能感兴趣的:(嵌入式)