定时器B和定时器A有很多相同之处,学习的时候注意回忆Timer_A的相关知识。注意,MSP430F5529中只有一个定时器B。 1 定时器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)严禁同时输入高电平。那么该怎么产生驱动该电路的信号呢: 但是,如果我们想要在系统运行的时候,修改死区时间怎么办。那只有修改 比较器里面的数值了。这样就有问题了,如果两个比较器数值没有同时修改,那么就有可能产生同时为高电平的情况,这就很危险了。所以,我们把比较器分组,这样数据同时更新,就不会有这样的担心了。
|