1、概述
定时器3和定时器4是两个8位定时器,每个定时器有两个独立的捕获/比较通道,每一通道使用一个I/O引脚。
定时器3/4有以下特点:
(1)、两个捕获/比较通道;
(2)、设置,清除或切换输出比较;
(3)、每时钟可以被以下分频:1、2、4、8、16、32、64、128;
(4)、在每次捕获/比较和最终计数事件发生时产生中断请求;
(5)、DMA触发功能。
2、8位定时器的计数器
定时器3/4的所有定时器功能都是基于主要的8位计数器基础上的。计数器在每一个活动时钟边沿递增或递减。活动时钟边沿的周期由寄存器CLKCONCMD.TICKSPD[2:0]来定义,且通过设置TxCTL.DIV[2:0]来进一步划分(x为3或4)。计数器操作模式有:自由运行模式、倒计数器模式、模计数器模式和正/倒计数器模式。
可以通过读SFR寄存器TxCNT(x为3或4)来取得8位定时器的值。
通过设置TxCTL来清除和终止计数器。设置TxCTL.START为1启动计数器,设置TxCTL.START为0时,计数器停留在它的当前值。
3、定时器3/4模式控制
一般上,控制寄存器TxCTL被用来控制定时器模式。
3.1、自由运行模式
计数器从0X00开始,在每一个活动时钟边沿递增,当计数器到达0XFF时,计数器重置为0X00并继续递增。当最终计数器值到达0XFF时(如发生溢出),中断标志位TIMIF.TxOVFIF将被置1。如已设置相应中断屏蔽位TxCTL.OVFIM,产生中断请求。自由模式可以用于产生独立的时间间隔和输出信号频率。
3.2、倒模式
在倒模式中,定时器启动后,计数器读取TxCC0中的值,并开始递减,当到达0X00,标志位TIMIF.TxOVFIF置1。如已设置相应中断屏蔽位TxCTL.OVFIM,产生中断请求。倒模式一般用于需要事件超时间隔的应用程序。
3.3、在正/倒定时器模式
在此模式中,计数器重复操作:从0X00递增到TxCC0里设置的值,然后递减到0X00。这个定时器模式用于需要对称输出脉冲,且周期不是0XFF的应用程序。因此它允许中心对齐的PWM输出应用程序的实现。
通过写入TxCTL.CLR清除计数器也会复位计数方向,即从0X00模式正计数。
4、通道模式控制
对于通道0和1,每个通道的模式是由控制和状态寄存器TxCCTLn(n为0或1)设置的。设置包括捕获和比较模式。
4.1、输入捕获模式
当通道配置为输入捕获通道时,与该通道相关的I/O引脚必须配置为输入。定时器启动后,输入引脚上的上升沿,下降沿或任何边沿都会触发一个捕获事件,即捕获8位计数器内容到相关的捕获寄存器中。因此定时器可以捕获一个外部事件发生的时间。
注意:一个引脚被用于定时器之前,要求相应I/O引脚必须被配置位Timer 3/Timer 4的外设引脚。
通道输入脚同步于内部系统时钟,因此,输入脚的脉冲最小持续时间要大于系统时钟周期。
通道n的8位捕获寄存器的内容可以从寄存器T3CCn/T4CCn里读取。
当发生捕获时,活动通道的相应中断标志位TIMIF.TxCHnIF被设置。如已设置中断掩码位TxCCTLn.IM,将会产生中断请求。
4.2、输出比较模式
在输出比较模式中,与通道相关的I/O引脚要设置为输出。在定时器启动后,计数器的内容与此通道的比较寄存器TxCC0n中的内容比较;如相等,根据TxCCTL.CMP[1:0]的设置,输出引脚被设置、复位或转换。注意当运行在一个给定的比较输出模式下,输出引脚上的所有边沿都是无故障运行的。
对于使用简单PWM,最好使用输出比较模式4和5。
写入比较寄存器TxCC0或TxCC1的输出比较值无效,除非计数寄存器的值为0X00。
当发生比较时,活动通道的相应中断标志位TIMIF.TxCHnIF被设置。如已设置中断掩码位TxCCTLn.IM,将会产生中断请求。
5、定时器3/定时器4中断
每一个定时器都分配了一个中断向量,分别为T3和T4。当有以下定时器事件发生时便产生中断请求:
(1)、计数器到达最终计数值;
(2)、比较事件;
(3)、捕获事件。
SFR寄存器TIMIF包含定时器3和定时器4的所有中断标志。寄存器TIMIF.TxOVFIF和TIMIF.TxCHnIF包含2个最终计数值事件和4个通道比较事件。只有相应中断掩码位设置了,中断请求才会产生。如果有其他正在等待的中断,新中断产生之前相应的中断标志位必须被清除,同样,如果要产生新的中断请求,相应的的中断掩码位要设置。
6、定时器3和定时器4的DMA触发
定时器3和定时器4都分别有2个DMA触发器,分别为:
T3_CH0:定时器3通道0捕获/比较;
T3_CH1:定时器3通道1捕获/比较;
T4_CH0:定时器4通道0捕获/比较;
T4_CH1:定时器4通道1捕获/比较。
7、定时器3和定时器4寄存器
TnCNT 定时器3/4计数器
端口 |
Bit位 |
名称 |
初始化 |
读/写 |
描述 |
T3CNT |
7:0 |
CNT[7:0] |
0X00 |
R |
定时计数器字节 |
T4CNT |
7:0 |
CNT[7:0] |
0X00 |
R |
定时计数器字节 |
T3CTL 定时器3控制
端口 |
Bit位 |
名称 |
初始化 |
读/写 |
描述 |
T3CTL |
7:5 |
DIV[2:0] |
000 |
R/W |
预分频器值。产生有效时钟沿用于来自CLKCON.TICKSPD的定时器时钟如下:
000:震荡频率/1
001:震荡频率/2
010:震荡频率/4
011:震荡频率/8
100:震荡频率/16
101:震荡频率/32
110:震荡频率/64
111:震荡频率/128 |
4 |
START |
0 |
R/W |
启动定时器。正常运行时设置,暂停时清除。 |
3 |
OVFIM |
1 |
R/W0 |
溢出中断屏蔽
0:禁止中断
1:使能中断 |
2 |
CLR |
0 |
R0/W1 |
清除计数器。写1清除并重置计数器为0X00并初始化相关通道的所有输出引脚。只能读0。 |
1:0 |
MODE[1:0] |
00 |
R/W |
定时器3模式,
00:自由运行模式,从0X00到0XFF重复计数。
01:倒模式,从T3CC0到0X00计数。
10:模模式,从0X00到T3CC0重复计数。
11:正/倒模式,从0X00到T3CC0再到0X00重复计数。 |
T4CTL |
7:5 |
DIV[2:0] |
000 |
R/W |
预分频器值。产生有效时钟沿用于来自CLKCON.TICKSPD的定时器时钟如下:
000:震荡频率/1
001:震荡频率/2
010:震荡频率/4
011:震荡频率/8
100:震荡频率/16
101:震荡频率/32
110:震荡频率/64
111:震荡频率/128 |
4 |
START |
0 |
R/W |
启动定时器。正常运行时设置,暂停时清除。 |
3 |
OVFIM |
1 |
R/W0 |
溢出中断屏蔽
0:禁止中断
1:使能中断 |
2 |
CLR |
0 |
R0/W1 |
清除计数器。写1清除并重置计数器为0X00并初始化相关通道的所有输出引脚。只能读0。 |
1:0 |
MODE[1:0] |
00 |
R/W |
定时器4模式,
00:自由运行模式,从0X00到0XFF重复计数。
01:倒模式,从T4CC0到0X00计数。
10:模模式,从0X00到T4CC0重复计数。
11:正/倒模式,从0X00到T4CC0再到0X00重复计数。 |
|
|
|
|
|
T3CCTLn/ T4CCTLn 定时器3/4通道0/1捕获/比较控制
端口 |
Bit位 |
名称 |
初始化 |
读/写 |
描述 |
T3CCTL0 |
7 |
-- |
0 |
R0 |
没使用 |
6 |
IM |
1 |
R/W |
通道0中断掩码
0:禁止中断
1:使能中断 |
5:3 |
CMP[2:0] |
000 |
R/W |
通道0比较输出模式选择,当定时器值等于T3CC0中的比较值时输出脚的操作:
000:发生比较时输出端置1
001:发生比较时输出端置0
010:发生比较时输出端翻转
011:上升沿比较输出设置,0清除
100:上升沿比较输出清除,0设置
101:发生比较时输出端置1,0XFF清除
110:发生比较时输出端置0,0X00设置
111:初始化输出引脚,CMP[2:0]不改变。 |
2 |
MODE |
0 |
R/W |
定时器3通道0模式选择
0:捕获模式
1:比较模式 |
1:0 |
CAP[1:0] |
00 |
R/W |
捕获模式选择
00:无捕获
01:上升边沿捕获
10:下降边沿捕获
11:所有边沿捕获 |
T3CCTL1 |
7 |
-- |
0 |
R0 |
没使用 |
6 |
IM |
1 |
R/W |
通道1中断掩码
0:禁止中断
1:使能中断 |
5:3 |
CMP[2:0] |
000 |
R/W |
通道1比较输出模式选择,当定时器值等于T3CC1中的比较值时输出脚的操作:
000:发生比较时输出端置1
001:发生比较时输出端置0
010:发生比较时输出端翻转
011:上升沿比较输出设置,0清除
100:上升沿比较输出清除,0设置
101:发生比较时输出端置1,0XFF清除
110:发生比较时输出端置0,0X00设置
111:初始化输出引脚,CMP[2:0]不改变。 |
2 |
MODE |
0 |
R/W |
定时器3通道1模式选择
0:捕获模式
1:比较模式 |
1:0 |
CAP[1:0] |
00 |
R/W |
捕获模式选择
00:无捕获
01:上升边沿捕获
10:下降边沿捕获
11:所有边沿捕获 |
T4CCTL0 |
7 |
-- |
0 |
R0 |
没使用 |
6 |
IM |
1 |
R/W |
通道0中断掩码
0:禁止中断
1:使能中断 |
5:3 |
CMP[2:0] |
000 |
R/W |
通道0比较输出模式选择,当定时器值等于T4CC0中的比较值时输出脚的操作:
000:发生比较时输出端置1
001:发生比较时输出端置0
010:发生比较时输出端翻转
011:上升沿比较输出设置,0清除
100:上升沿比较输出清除,0设置
101:发生比较时输出端置1,0XFF清除
110:发生比较时输出端置0,0X00设置
111:初始化输出引脚,CMP[2:0]不改变。 |
2 |
MODE |
0 |
R/W |
定时器4通道0模式选择
0:捕获模式
1:比较模式 |
1:0 |
CAP[1:0] |
00 |
R/W |
捕获模式选择
00:无捕获
01:上升边沿捕获
10:下降边沿捕获
11:所有边沿捕获 |
T4CCTL1 |
7 |
-- |
0 |
R0 |
没使用 |
6 |
IM |
1 |
R/W |
通道1中断掩码
0:禁止中断
1:使能中断 |
5:3 |
CMP[2:0] |
000 |
R/W |
通道1比较输出模式选择,当定时器值等于T4CC1中的比较值时输出脚的操作:
000:发生比较时输出端置1
001:发生比较时输出端置0
010:发生比较时输出端翻转
011:上升沿比较输出设置,0清除
100:上升沿比较输出清除,0设置
101:发生比较时输出端置1,0XFF清除
110:发生比较时输出端置0,0X00设置
111:初始化输出引脚,CMP[2:0]不改变。 |
2 |
MODE |
0 |
R/W |
定时器4通道1模式选择
0:捕获模式
1:比较模式 |
1:0 |
CAP[1:0] |
00 |
R/W |
捕获模式选择
00:无捕获
01:上升边沿捕获
10:下降边沿捕获
11:所有边沿捕获 |
TmCCn 定时器3/4通道0/1捕获/比较值
端口 |
Bit位 |
名称 |
初始化 |
读/写 |
描述 |
T3CC0 |
7:0 |
VAL[7:0] |
0X00 |
R/W |
定时器3通道0捕获/比较值。 |
T3CC1 |
7:0 |
VAL[7:0] |
0X00 |
R/W |
定时器3通道1捕获/比较值。 |
T4CC0 |
7:0 |
VAL[7:0] |
0X00 |
R/W |
定时器4通道0捕获/比较值。 |
T4CC1 |
7:0 |
VAL[7:0] |
0X00 |
R/W |
定时器4通道1捕获/比较值。 |
TIMIF:定时器1/3/4中断屏蔽/标志
端口 |
Bit位 |
名称 |
初始化 |
读/写 |
描述 |
TIMIF |
7 |
--- |
0 |
R0 |
未使用 |
6 |
OVFIM |
1 |
R/W |
定时器1溢出中断屏蔽 |
5 |
T4CH1IF |
0 |
R/W0 |
定时器4通道1中断标志
0:无中断未决
1:中断未决 |
4 |
T4CH0IF |
0 |
R/W0 |
定时器4通道0中断标志
0:无中断未决
1:中断未决 |
3 |
T4OVFIF |
0 |
R/W0 |
定时器4溢出中断标志
0:无中断未决
1:中断未决 |
2 |
T3CH1IF |
0 |
R/W0 |
定时器3通道1中断标志
0:无中断未决
1:中断未决 |
1 |
T3CH0IF |
0 |
R/W0 |
定时器3通道0中断标志
0:无中断未决
1:中断未决 |
0 |
T3OVFIF |
0 |
R/W0 |
定时器3溢出中断标志
0:无中断未决
1:中断未决 |