第6章 定时器相关模块.docx
《第6章 定时器相关模块.docx》由会员分享,可在线阅读,更多相关《第6章 定时器相关模块.docx(42页珍藏版)》请在冰豆网上搜索。
第6章定时器相关模块
第6章定时器相关模块
本章导读:
本章讲述了计数器/定时器的一般工作原理,介绍K60N512的定时接口模块(PDB、FTM、PIT、LPTMR、CMT和RTC)的基本功能与编程基础,并给出具体的例子,读者要仔细体会各种不同的使用方法,并将这些方法运用到具体的应用中。
本章知识点有①计数器/定时器的工作原理;②可编程延时模块PDB;③Flex定时器FTM;④周期中断定时器PIT;⑤低功耗定时器LPTMR;⑥载波调制传输接口CMT;⑦实时时钟RTC。
6.1计数器/定时器的基本工作原理
在嵌入式应用系统中,有时要求能对外部脉冲信号或开关信号进行计数,这可通过计数器来完成。
有些设备要求每间隔一定时间开启并在一段时间后关闭,有些指示灯要求不断地闪烁,这可利用定时信号来完成。
个人计算机也经常要用到定时信号,如系统日历时钟的计时、产生不同频率的声源等。
在计算机系统屮,计数与定时问题的解决方法是一致的,只不过是同一个问题的两种表现形式。
实现计数与定时的基本方法有三种:
完全硬件方式、完全软件方式、可编程计数器/定时器。
1.完全硬件方式
在过去的许多仪器仪表或设备中,需要进行延时、定时或计数,经常使用数字逻辑电路实现,即完全用硬件电路实现计数/定时功能,若要改变计数/定时的要求,必须改变电路参数,通用性和灵活性差。
在微型电子计算机出现以后,特別是随着单片微型计算机的发展与普及,这种完全硬件方式实现定时与计数的方法已较少使用。
2.完全软件方式
在计算机中,通过编程利用计算机执行指令的时间实现定时,称为完全软件方式,简称软件方式。
在这种方式中,一般是根据所需要的时间常数来设计一个延时子程序,延时子程序中包含一定的指令,设计者要对这些指令的执行时间进行精确的计算和测试,以便确定延时时间是否符合要求。
当时间常数比较大时,常常将延时子程序设计为一个循环程序,通过循环常数和循环体内的指令来确定延时时间。
这样,每当延时子程序结束以后,可以直接转入下而的操作,也可以用输出指令产生一个信号作为定时输出。
这种方法的优点是节省硬件。
主要缺点是执行延时程序期间,CPU一直被占用,所以降低了CPU的使用效率,也不容易提供多作业环境;另外,设计延时子程序时,要用指令执行时间来拼凑延时时间,显得比较麻烦。
不过,这种方法在实际应用中还是经常使用的,尤其是在已有系统上作软件开发时,以及延时时间较小而重复次数又较少的情况。
在计算机控制软件开发过程中,作为粗略的延时,经常使用软件方法来实现定时。
3.可编程计数器/定时器
利用专门的可编程计数器/定时器实现计数与定时,克服了完全硬件方式与完全软件方式的缺点,综合利用了它们各自的优点,其计数/定时功能可由程序灵活地设置,设定之后与CPU并行地工作,不占用CPU的工作时间。
应用可编程计数器/定时器,在简单的软件控制下,可以产生准确的时间延时。
这种方法的主要思想是根据需要的定时时间,用指令对计数器/定时器设置定时常数,并用指令启动计数器/定时器开始计数,当计数到指定值时,便自动产生一个定时输出。
在计数器/定时器开始工作以后,CPU不必去管它,而可以去做其他工作。
这种方法最突出的优点是计数时不占用CPU的时间,如果利用计数器/定时器产生中断信号还可以建立多作业的环境,所以可大大提高CPU的利用率。
加上计数器/定时器本身的开销并不很大,因此这种方法在微机应用系统中得到了广泛的使用。
K60的定时器接口模块包括了六个子模块:
可编程延迟模块PDB、Flex定时器模块FTM、周期中断定时器模块PIT、低功耗定时器模块LPTMR、载波调制发射器模块CMT,以及实时时钟模块RTC。
下面逐个介绍这几个模块。
6.2可编程延迟模块PDB
6.2.1PDB的基础知识
可编程延迟模块(ProgrammableDelayBlock,PDB)可以提供从内部/外部触发源、可编程间隔到A/D转换(AnalogToDigitalConvert,ADC)的硬件触发,也可以提供D/A转换模块(Digital-to-AnalogConverter,DAC)间隔触发的可控时延,这样就可以为ADC转换和DAC输出提供精确的时间。
由于本章涉及ADC与DAC的内容,读者可以先阅读后面的章节再进行本节的学习。
另外,PDB模块还可以选择性提供脉冲输出。
PDB模块包含高达15种输入触发中断源和软件触发中断源、8路的可配置用于ADC触发的PDB通道、8路的DAC内部触发源和8路的脉冲输出。
PDB结构框图如图6-1所示。
在图中,只显示了PDB通道n,DAC间隔触发器x以及脉冲输出y(用虚线框表示),没有显示PDB使能控制逻辑与时序错误中断逻辑。
6.2.2PDB模块寄存器介绍
PDB的寄存器
绝对地址
(十六进制)
寄存器名称
访问
4003_6000
状态和控制秒寄存器(PDB0_SC)
R/W
4003_6004
模寄存器(PDB0_MOD)
R/W
4003_6008
计数寄存器(PDB0_CNT)
R
4003_600C
中断延时寄存器(PDB0_IDLY)
R/W
4003_6010
通道n控制寄存器1((PDB0_CH0C1)
R/W
4003_6014
通道n状态寄存器(PDB0_CH0S)
W1c
4003_6018
通道n延时0寄存器(PDB0_CH0DLY0)
R/W
4003_601C
通道n延时1寄存器(PDB0_CH0DLY1)
R/W
4003_6038
通道n控制寄存器1(PDB0_CH1C1)
R/W
4003_603C
通道n状态寄存器(PDB0_CH1S)
W1c
4003_6040
通道n延时0寄存器(PDB0_CH1DLY0)
R/W
4003_6044
通道n延时1寄存器(PDB0_CH1DLY1)
R/W
4003_6150
DAC间隔触发n控制寄存器(PDB0_DACINTC0)
R/W
4003_6154
DAC间隔n寄存器(PDB0_DACINT0)
R/W
4003_6158
DAC间隔触发n控制寄存器(PDB0_DACINTC1)
R/W
4003_615C
DAC间隔n寄存器(PDB0_DACINT1)
R/W
4003_6190
输出脉冲n使能寄存器(PDB0_PO0EN)
R/W
4003_6194
输出脉冲n延时寄存器(PDB0_PO0DLY)
R/W
1)状态和控制寄存器(PDBx_SC)
PDBx_SC位描述
位
描述
31-20:
预留
预留,只读,值为0
19-18:
LDMOD
装载模式选择
LDOK置位后,此位为MOD、IDLY、ChnDlym、INTx和POyDly寄存器的负载模式选择位
00一旦LDOK置位后,内部寄存器立即从缓冲区装载值
01PDB计数器的值与MOD寄存器的值相等且LDOK置位后,内部寄存器从缓冲区装载值
(1)
10LDOK置位后,如果检测到输入触发事件,内部寄存器从缓冲区装载值
(2)
11当
(1)或
(2)发生时,内部寄存器从缓冲区装载值。
17:
PDBEIE
PDB时序错误中断使能位
0禁止中断
1使能中断
16:
SWTRIG
软件触发
当使能PDB而且选择软件触发作触发输入源时,写1到此位会使计数器重新计数。
写0无效。
读为0
15:
DMAEN
DMA使能位
0禁止
1使能
14-12:
PRESCALER
预分频选择位
0001倍倍频
0012倍倍频
0104倍倍频
0118倍倍频
10016倍倍频
10132倍倍频
11064倍倍频
111128倍倍频
11-8:
TRGSEL
输入触发源选择
为PDB选择输入触发源。
输入触发源可以是内部或者外部触发源,或者软件触发。
0000~1110分别为中断源0~中断源14,1111为软件中断源
7:
PDBEN
PDB使能位
0禁止,计数器关闭
1使能
6:
PDBIF
PDB中断标志位
当计数器的值等于IDLY寄存器的值时,此位置位。
写0清该位。
5:
PDBIE
PDB中断使能
这一位使能PDB中断。
当此位被置位且DMAEN被清除时,PDBIF会产生一个中断
0禁止
1使能
4:
预留
预留,只读,值为0
3-2:
MULT
倍频因子选择位
00倍频因子为1
01倍频因子为10
10倍频因子为20
11倍频因子为40
1:
CONT
连续模式使能位
0单次模式
1连续模式
0:
LDOK
装载数据OK位
写1可以让缓冲装载内部寄存器MOD、IDLY、ChnDlym、INTx和POyDly的值。
MOD、IDLY、ChnDlym、INTx和POyDly可以通过LDMOD发挥作用。
2)模寄存器(PDBx_MOD)
PDBx_MOD位寄存器
位
描述
31-16:
预留
预留,只读,值为0
15-0:
MOD
PDB模值
这些位确定了计数器的周期,当计数器达到这个值时,归零,如果PDB为连续模式,重新计数。
3)计数寄存器(PDBx_CNT)
PDBx_CNT位描述
位
描述
31-16:
预留
预留,只读,值为0
15-0:
CNT
PDB计数器,只读
4)中断延时寄存器(PDBc_IDLY)
PDBc_IDLY位描述
位
描述
31-16:
预留
预留,只读,值为0
15-0:
IDLY
PDB中断延时,这些位确定PDB中断的延时值
5)通道n控制寄存器1(PDBx_CHnC1)
每个PDB通道都有一个控制寄存器——CHnC1,用来控制每个PDB通道的功能。
PDBx_CHnC1位描述
位
描述
31-24:
预留
预留,只读,值为0
23-16:
BB
PDB通道预触发背靠背操作使能位
0禁止
1使能
15-8:
TOS
PDB预触发输出选择位
这些位用来选择PDB的ADC预触发输出。
0PDB通道响应旁路模式的预触发。
1当在输入触发源检测到一个上升沿信号后,计数器的值等于通道延时寄存器的值加一个预分频周期时,或者选择软件触发模式且SWTRIG置位,预触发器会响应
7-0:
EN
PDB通道预触发使能位
0禁用PDB通道响应预触发器
1使能PDB通道响应预触发器
6)通道n状态寄存器(PDBx_CHnS)
PDBx_CHnS位描述
位
描述
31-24:
预留
预留,只读,值为0
23-16:
CF
PDB通道标志
当PDB计数器与CHnDLYm匹配时置位CF[m]。
写0清除
15-8:
预留
预留,只读,值为0
7-0:
ERR
PDB通道时序错误标志
0PDB通道响应预触发器不检测时序错误
1PDB通道响应预触发器检测时序错误
7)通道n延时0寄存器(PDBx_CHnDLY0)
PDBx_CHnDLY0位描述
位
描述
31-16:
预留
预留,只读,值为0
15-0:
DLY
PDB通道延时值
这些位确定通道响应预触发器的延时值
8)通道n延时1寄存器(PDBx_CHnDLY1)
功能同通道n延时0寄存器,不再赘述。
9)DAC间隔触发器n控制寄存器(PDBx_DACINTCn)
PDBx_DACINTCn位描述
位
描述
31-2:
预留
预留,只读,值为0
1:
EXT
DAC外部输入触发使能位
0禁用DAC外部输入触发
1使能DAC外部输入触发
0:
TOE
DAC间隔触发使能位
0禁止
1使能
10)DAC间隔n寄存器(PDBx_DACINTn)
PDBx_DACINTn位描述
位
描述
31-16:
预留
预留,只读,值为0
15-0:
INT
DAC间隔
这些位决定DAC间隔触发器的间隔值
11)脉冲输出n使能寄存器(PDBx_POnEN)
PDBx_POnEN位描述
位
描述
31-8:
预留
预留,只读,值为0
7-0:
POEN
PDB脉冲输出使能
0禁止
1使能
12)脉冲输出n延时寄存器(PDBx_POnDLY)
PDBx_POnDLY位描述
位
描述
31-16:
DLY1
PDB脉冲输出延时1
这些位用来确定PDB脉冲输出延时1的值。
当PDB计数器等于DLY1时,脉冲输出高。
15-0:
DLY2
PDB脉冲输出延时2
这些位用来确定PDB脉冲输出延时2的值。
当PDB计数器等于DLY2时,脉冲输出高。
6.2.3PDB模块概要与编程要点
1.PDB输入触发源选择
PDB有多达15个输入触发源,叫做Trigger-In0〜14,在图6-1中可以看到,它们与片上或片下事件源相连。
通过PDB状态控制寄存器SC的软件触发位(SWTRIG)可以将PDB设置为软件触发,通过SC的输入触发源选择位域(TRIGSEL)可以使能触发输入源Trigger-In0到14中的某一个,或者是软件触发。
SC[TRIGSEL]的取值范围为0000〜1111,其中0000〜1110对应触发源Trigger-In0到14,1111对应软件触发。
详细信息参见本章阅读材料。
2.DAC间隔触发器输出
PDB可以产生间歇的触发,周期性的更新DAC输出。
当产生输入触发事件且DACINTCx[EXT]等于零时,复位DAC间隔计数器x并重新开始计数。
当间隔计数器x的值等于DACINTx寄存器设置的值时,DAC间隔触发器x会输出一个脉冲来更新DACx,该脉冲的脉宽等于一个外设时钟周期。
如果置位DACINTCx[EXT],将旁路DAC间隔计数器,而且在检测到DAC外部输入触发有上升沿之后,DAC间隔触发器x会输出一个脉冲。
清位DACINTCx[TOE]将禁止DAC间隔计数器和DAC间隔触发器。
当PDB计数器等于PDB模寄存器MOD的值时,复位DAC间隔计数器。
因此当PDB计数器归零时,DAC间隔计数也会重新开始。
在图6-1可以看到DAC间隔触发输出框图。
3.脉冲输出
PDB可以输出宽度可配置的脉冲。
当PDB计数器的值等于PDB脉冲输出y延时寄存器DLY1的值时,脉冲输出为高;当计数器达的值等于PDB脉冲输出y延时寄存器DLY2的值时,脉冲输出为低。
由图6-1也可以看到脉冲输出框图。
图6-1PDB结构框图
6.2.3PDB构件设计及测试实例
(省略)
6.3Flex定时器FTM
6.3.1FTM的基础知识
弹性定时器模块(FlexTimerModule,FTM)是一个支持输入捕捉、输出比较、产生可用来控制电机的PWM信号和电源管理应用的通道定时器。
它建立在飞思卡尔8位微控制器HCS08定时器PWM模块——TPM上,并且在低功耗和向后兼容TPM的基础上进行功能扩展,增加了有符号的加法计数器、故障控制输入、增强了触发功能和极性控制来满足电机控制、电源转换等的需要。
所有与TPM模块相同的特性完全向后兼容,FTM在相同的核心平台下不需要对代码做任何改变就可以实现相同的功能。
FTM具有可选的时钟源,可以是系统时钟、固定频率时钟或者外部时钟;具有1、2、4、8、16、32、64、128预分频;一个可以进行无符号或有符号计数的16位计数器,为FTM提供定时参考;每一个通道都可配置为输入捕捉、输出比较或者边缘对齐的PWM模式;每个通道的极性都可以配置,并产生溢出中断、通道中断、故障中断等中断。
当TOIE=l且TOF=l时,产生定时器溢出中断,当ChnIE=l且CHnF=l时,产生通道(n)中断,当FAULTIE=1且FAULTF=1时,产生故障中断。
图6-2显示了FTM模块结构,其中心组件为16位计数器。
6.3.2FTM模块寄存器介绍
FTM寄存器非常多,我们这里只列举常用的8个。
1)状态和控制寄存器(FTMx_SC)
SC包含溢出状态标志和控制位,用来配置中断使能、FTM配置、时钟源和预分频因子。
这些控制和这个模块的所有通道相关。
FTMx_SC位域描述
位域
描述
31-8
保留
这个只读位域被保留,值常为0。
7
TOF
定时器溢出标志位
0FTM计数器不溢出
1FTM计数器溢出
6
TOIE
定时器溢出中断使能
0禁止TOF中断。
使用软件轮询
1使能TOF中断。
当TOF等于1时产生中断
5
CPWMS
中央对齐PWM选择位
0FTM计数器向上计数
1FTM计数器向上向下计数
4-3
CLKS
时钟源选择
00没有选择任何时钟(实际上是禁止FTM计数器)
01系统时钟
10固定频率时钟
11外部时钟
2-0
PS
预分频因子选择位
0001分频
0012分频
0104分频
0118分频
10016分频
10132分频
11064分频
111128分频
2)计数器(FTMx_CNT)
CNT寄存器包含FTM计数器的值。
复位清CNT寄存器,写任何值到COUNT中会将计数器更新为它的初始值(CNTIN),当激活BDM时,FTM计数器冻结。
FTMx_CNT位域描述
位域
描述
31-16
保留
只读位域被保留,总是为0。
15-0
COUNT
计数器值
3)模寄存器(FTMx_MOD)
模寄存器包含FTM计数器的模值。
FTM计数器达到模寄存器的值后,在下个时钟周期置位溢出标志(TOF),FTM计数器的下一个值取决于所选的计数方式。
写MOD寄存器会将值锁存到缓冲区中,MOD寄存器会根据写缓冲区中的值更新寄存器。
如果FTMEN=0,通过写SC寄存器可能复位写一致机制,推荐在写MOD寄存器之前初始化FTM计数器。
FTMx_MOD位域描述
位
描述
31-16:
预留
预留,只读,值为0
15-0:
MOD
模值
4)通道n状态和控制寄存器(FTMx_CnSC)
CnSC包含了通道中断状态标志和控制位,用于配置中断使能、通道配置和引脚功能。
FTMx_CnSC位描述
位
描述
31-8:
预留
预留,只读,值为0
7:
CHF
通道标志
0无通道事件发生
1有通道事件发生
6:
CHIE
通道中断使能位
0禁止
1使能
5:
MSB
通道模式选择位
在通道逻辑中,用于进一步的选择,它的功能取决于通道模式。
此位已被写保护。
只有当MODE[WPDIS]=1时才可写。
4:
MSA
通道模式选择位
在通道逻辑中,用于进一步的选择,它的功能取决于通道模式。
此位已被写保护。
只有当MODE[WPDIS]=1时才可写。
3:
ELSB
边沿或电平选择位
ELSB和ELSA的功能取决于通道模式,此位已被写保护。
仅当MODE[WPDIS]=1时才可写。
2:
ELSA
边沿或电平选择位
ELSB和ELSA的功能取决于通道模式,此位已被写保护。
仅当MODE[WPDIS]=1时才可写。
1:
预留
预留,只读,值为0
0:
DMA
DMA使能位
0禁止
1使能
5)通道n值寄存器(FTMx_CnV)
这些寄存器包括了输入捕捉模式下捕捉的FTM计数器的值或者输出比较模式下的匹配值。
在输入捕捉、捕捉测试和双边沿捕捉模式,写CnV无效。
在输出比较模式下,写CnV寄存器将会把写入的值装载到缓冲中。
FTMx_CnV位描述
31-16:
预留
预留,只读,值为0
15-0:
VAL
通道值
捕捉到的FTM计数器的值或输出比较输出匹配值
6)计数器初始值寄存器(FTMx_CNTIN)
该寄存器包括FTM计数器的初始值,写该寄存器会将值装载到缓冲区中。
FTMx_CNTIN位描述
位
描述
31-16:
预留
预留
15-0:
INIT
FTM计数器的初始值
7)捕捉和比较状态寄存器(FTMx_STATUS)
该寄存器包括了对每个FTM通道的状态标志CHnF位的副本。
通过读该寄存器可以得到所有通道的CHnF位的值。
写0x00到该寄存器可以清掉所有的CHnF位的值。
当通道上有事件发生时,硬件会使响应的通道标志置位。
当CHnF被置位时,读该寄存器可以清CHF。
写1到CHF无效。
FTMx_STATUS位描述
位
描述
31-8:
预留
预留,只读,值为0
7-0
CHnF
通道n标志位
0无事件发生
1有事件发生
8)特性模式选择寄存器(FTMx_MODE)
这个寄存器包含用来配置出错中断和出错控制的控制位,捕捉测试模式,PWM同步化,写保护,通道输出初始化,和使FTM加强的特性。
这些控制与该模块内的所有通道有联系。
FTMx_MODE位描述
位
描述
31-8
预留
该位为只读位而且其值总为0。
7
FAULTIE
故障控制中断使能位
0禁用故障控制中断
1使能故障控制中断
6-5
FAULTM
故障控制模式
00对所有的通道禁用故障控制。
10仅对0、2、4、6通道使能故障控制,手动清除故障
10对所有的通道使能故障控制,且手动清除故障
11对所有的通道使能故障控制,且自动清除故障
4
CAPTEST
捕捉测试模式使能位
0禁用捕捉测试模式
1使能捕捉测试模式
3
PWMSYNC
PWM同步模式
0无限制,软件触发和硬件触发都可通过MOD、CnV、OUTMASK以及FTM计数器来同步化
1软件触发仅通过使用MOD和CnV同步化,硬件触发仅通过使用OUTMASK和FTM计数器同步
2
WAPDIS
禁用写保护
0写保护允许
1禁止写保护
1
INIT
初始化通道输出
写0到INIT,可以根据OUTINIT寄存器的相应位初始化通道输出,写1到INIT,无效。
读INIT总是为0
0
FTMEN
FTM使能位
0只有TPM兼容寄存器可用,FTM专用寄存器不可用
1所有的寄存器都可用
6.3.3FTM模块概要与编程要点
本小节具体阐述FTM各个模块的特征,由于版面有限,这里只列举了常用的几个模块。
1.计数时钟源与分频
FTM状态和控制寄存器(FTMx_SC)的CLKS[1:
0]位用于选择FTM计数器的时钟源,CLKS[1:
0]=00表示没有选择任何时钟,相当于关闭FTM计数器,CLKS[1:
0]=01表示系统时钟源,CLKS[1:
0]=10(固定频率时钟),CLKS[1:
0]=11(外部时钟)。
MCU复位后,CLKS[1:
0]=00,关闭FTM计数器。
选择的时钟源的分频因子由FTM状态和控制寄存器(FTMx_SC)的PS[2:
0]位决定,PS[2:
0]=000(1分频),PS[2:
0]=001(2分频),PS[2:
0]=010(4分频),PS[2:
0]=011(8分频),PS[2:
0]=100(16分频),PS[2:
0]=101(32分频)。
2.计数器
FTM有一个16位计数器,供通道使用,计数器的操作主要有向上计数与向上向下计数。
向上计数:
当FTM正交解码控制和状态寄存器(FTMx_QDCTRL)的正交解码模式使能位QUADEN=0且FTM状态和控制寄存器(FTMx_SC)的中央对齐PWM