定时器B的简介
7.1.1
特性(了解):
(1).
16
位同步定时
/
计数,
4
种工作模式可选、
4
中长度可选;
(2).
可选可配置时钟源;
(3).
高达
7
个捕获
/
比较寄存器;
(4).
可配置
PWM
输出;
(5).
带有同步装载的双缓冲比较寄存器;
(6).
快速解码的中断向量;
7.2.2 与定时器A的比较(相同点与不同点)
(1).
TB
的计数长度可以选择(
8
、
10
、
12
、
16BITS
),而
TA
只有
16
位;
(2).
TB0CCRn
寄存器是双缓冲的,且可以分组;
(3).
所有的
TB
输出可以被设为高阻状态;
(4).
TB
没有
SCCI
,即捕获器输入信号
CCI
没有被锁存;
看结构图,观察和TA有什么区别:
7.2 Timer0_B寄存器介绍及设置)
声明:
所有寄存器同样支持字和字节操作
所有寄存器初始化都为
0x0000
7.2.1 TB控制寄存器TB0CTL(最常用最基本)(和TA有一点不同)
rw-(0)表示默认读写均为0
TBCLGGRP:
TB0CLn
分组控制
00:
每个
TB0CLn
独立使用
01:
TB0CL1+TB0CL2
作为一组(
TB0CCR1
的
CLLD
位控制整组数据更新)
TB0CL3+TB0CL4
作为一组(
TB0CCR3
的
CLLD
位控制整组数据更新)
TB0CL5+TB0CL6
作为一组(
TB0CCR5
的
CLLD
位控制整组数据更新)
10
:
TB0CL1
、
2
、
3
一组,(
TB0CCR1
的
CLLD
位控制整组数据更新)
TB0CL4
、
5
、
6
一组,(
TB0CCR4
的
CLLD
位控制整组数据更新)
11
:
TB0CL0
、
1
、
2
、
3
、
4
、
5
、
6
整合为一组,
(
TB0CCR1
的
CLLD
位控制整组数据更新)
CNTL:
计数器长度控制
00
16
位,即最大可以计到
0FFFFh
01
12
位,即最大可以计到
0FFFh
10
10
位,即最大可以计到
03FFh
11
8
位,即最大可以计到
0FFh
TBSSEL :
时钟源选择。尽量不要选
TACLK
外部时钟源,因为如果
TACLK
和
CPU
时钟不同步,很容易出问题。(
TB0CLK
接
P7.7
引脚)
00
TBCLK
01
ACLK
10
SMCLK
11
~TBCLK
ID:
第一次分频控制。
ID0-1
分频;
ID1-2
分频;
ID2-4
分频;
ID3-8
分频
MC:
工作模式控制。(建议在修改定时器运行模式前先停止定时器(中断使能、中断标志、
TACLR
例外),以避免产生未知的误操作。)(和
TA一样)
00
停止模式:定时器停止
01
增模式:
定时器计数到
TB0CCR0
10
连续模式,定时器计数到
0FFFH
(
16
位)
…12
位、
10
位
…
11
增减模式:定时器加计数到
TB0CCR0
然后减计数到
0000H
TBCLR:
定时器清零位。该位置位会复位
TA
寄存器,时钟分频和计数方向。
TACLR
位会自动复位并置
0
TBIE:
定时器中断使能
0
:中断禁止
1
:中断允许
TBIFG:
中断标志位
0
:没有中断发生
1
:有中断挂起
7.2.2 计数值存放寄存器TB0R
7.2.3 扩展寄存器TBEX0
很简单,这个寄存器就是为了控制时钟源的二次分频(看结构图)。
该寄存器的低
3
为定义为
TBIDEX
:
000-111
分别表示
1-8
分频
7.2.4 捕获/比较寄存器TBCCR0-TBCCR6(共7个)
比较模式下,用来设定计数终值;
捕获模式下用来将捕获的
TBR
值存放进
TBCCRx
中。
7.2.5 捕获/比较控制寄存器TB0CCTL0-TB0CCTL6:
CM:
捕获模式设定
00
不捕获
01
上升沿捕获
10
下降沿捕获
11
上升和下降沿都捕获
CCIS:
捕获源的选择
00
CCIxA
01
CCIxB
10
GND
11
VCC
SCS:
同步捕获源,设定是否与时钟同步
0
异步捕获
1
同步捕获
CLLD:
比较寄存器缓冲装载模式选择。
00
TB0CCRn
的值(改变时)立即装载到
TB0CLn
01
当
TB0R
的值计到
0
时,进行装载
10
增模式或者连续模式下,
TBR0
值计到
0
时,进行装载
;
增减模式下,
TBR0
计数到
TBCL0
时,开始装载;
11
TBR0
计数到
TBCL0
时,开始装载;
CAP: 0
-
比较模式
1-
捕获模式
OUTMOD:
输出模式控制位。同
TA一模一样
CCIE:
中断使能,该位允许相应的
CCIFG
标志中断请求
。
0
-
中断禁止
1 -
中断允许
CCI :
捕获比较输入,所选择的输入信号可以通过该位读取
OUT :
对于输出模式
0
,该位直接控制输出状态
。
0
-
输出低电平
1-
输出高电平
COV:
捕获溢出位。该位表示一个捕获溢出发出,
COV
必须由软件复位。
0
-
没有捕获溢出发生
1
-
有捕获溢出发生
CCIFG:
捕获比较中断标志位。
0
-
没有中断挂起
1
-
有中断挂起
7.2.6 中断向量寄存器TB0IV
同TAIV一样,里面存放一个数字编号。
7.3 重点讲TB和TA的不同之处
7.3.1 没有再把CCI信号锁存了
TA
作捕获器的时候,
CCI
为捕获信号,然后
CCI
被锁存输出 为
SCCI
;
但是,TB
没有锁存。也就是说只能从
CCI
位查看输入信 号了。
7.3.2 计数值位数可调了(其实无所谓,都可以16位那干嘛不用)
TA
的计数值寄存器
TAR
只能是
16
位(
0XFFFFh
);
TB的
计数值寄存器
TBR
可以选择是
16
、
12
、
10
、
8
位;
7.3.3 两级缓冲比较器(比较模式下)
TA
里面,我们在
TACCRn
中写入要比较的数值,然后让
TAR
中的计数值和
TACCRn
比较,如果相等了,相应的标志位就会置位;
TB里面,
不仅有
TB0CCRn
,还多了一个二级缓存器
TB0CLn
。
TB0CLn
不能被直接进行操作,它的值只能来源于
TB0CCRn
。计数的时候,
TB0R
中的计数值不和
TB0CCRn
比较,而是和
TB0CLn
进行比较。
二级缓冲是为了防止我们在修改
TB0CCRn
的值的时候,对计数产生影响。因为计数器不直接和
TB0CCRn
比较,而是
TB0CCRn
把值赋给
TB0CLn
,由
TB0CLn
去和
TB0R
进行比较。所以也就有了
CLLD
位控制比较寄存器缓冲装载模式:(当向
TB0CCRn
中重新写数时)
00 TB0CCRn
的值立即装载到
TB0CLn
01
当
TB0R
的值计到
0
时,进行装载
10
增模式或者连续模式下,
TBR0
值计到
0
时,进行装载
;
增减模式下,
TBR0
计数到
TBCL0
时,开始装载;
11 TBR0
计数到
TBCL0
时,开始装载;
7.3.4
比较器可以被分组
TA
没有二级缓冲寄存器,而且本来的
TACCRn
也只能被单 独使用。
对于TB:
TBCLGGRP:
TB0CLn
二级缓冲寄存器分组控制
00:
每个
TB0CLn
独立使用
01:
TB0CL1+TB0CL2
作为一组(
TB0CCR1
的
CLLD
位控制整组数据更新)
TB0CL3+TB0CL4
作为一组(
TB0CCR3
的
CLLD
位控制整组数据更新)
TB0CL5+TB0CL6
作为一组(
TB0CCR5
的
CLLD
位控制整组数据更新)
10
:
TB0CL1
、
2
、
3
一组,(
TB0CCR1
的
CLLD
位控制整组数据更新)
TB0CL4
、
5
、
6
一组,(
TB0CCR4
的
CLLD
位控制整组数据更新)
11
:
TB0CL0
、
1
、
2
、
3
、
4
、
5
、
6
整合为一组,
(
TB0CCR1
的
CLLD
位控制整组数据更新)
所谓的分组,就是该组的数据要同时更新。
以10模式下的TB0CL1、2、3这组为例:
TB0CCTL1
中的
CLLD
设置为
01
,即
TB0R
计数到
0
时,
TB0CCR1
就会把值装载(更新)到
TB0CL2
中,同时
TB0CCR2
就会把值装载(更新)到
TB0CL2
中,同时
TB0CCR3
也会把值装载(更新)到
TB0CL3
中。无论
TB0CCRn
中的值有几个发生了变化,但它们都只会同时更新
TB0CLn
。
一个重要的应用:
如图,增减模式下,可以用来产生有死区时间(dead time)的信号。
我们知道有一种H桥电路结构,该电路有一般有两个输入端,而且这两个输入端(1和2)严禁同时输入高电平。那么该怎么产生驱动该电路的信号呢:
但是,如果我们想要在系统运行的时候,修改死区时间怎么办。那只有修改
比较器里面的数值了。这样就有问题了,如果两个比较器数值没有同时修改,那么就有可能产生同时为高电平的情况,这就很危险了。所以,我们把比较器分组,这样数据同时更新,就不会有这样的担心了。