当前位置: 首页 > news >正文

(11)MSP430F5529 定时器B

  定时器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的计数长度可以选择(8101216BITS),而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作为一组(TB0CCR1CLLD位控制整组数据更新)
         TB0CL3+TB0CL4作为一组(TB0CCR3CLLD位控制整组数据更新)
     TB0CL5+TB0CL6作为一组(TB0CCR5CLLD位控制整组数据更新)
         10TB0CL123一组,(TB0CCR1CLLD位控制整组数据更新)
                TB0CL456一组,(TB0CCR4CLLD位控制整组数据更新)
         11TB0CL0123456整合为一组, TB0CCR1CLLD位控制整组数据更新)
CNTL 计数器长度控制
  00  16位,即最大可以计到0FFFFh
  01  12位,即最大可以计到0FFFh
  10  10位,即最大可以计到03FFh
  11  8位,即最大可以计到0FFh
TBSSEL  时钟源选择。尽量不要选TACLK外部时钟源,因为如果TACLKCPU时钟不同步,很容易出问题。(TB0CLKP7.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 连续模式,定时器计数到0FFFH16位)…12位、10… 
  11增减模式:定时器加计数到TB0CCR0然后减计数到0000H 
TBCLR 定时器清零位。该位置位会复位TA寄存器,时钟分频和计数方向。
TACLR位会自动复位并置0
TBIE 定时器中断使能
      0:中断禁止
  1:中断允许
TBIFG 中断标志位
  0:没有中断发生
  1:有中断挂起
7.2.2  计数值存放寄存器 TB0R
 
7.2.3  扩展寄存器 TBEX0
                 很简单,这个寄存器就是为了控制时钟源的二次分频(看结构图)。
                 该寄存器的低3为定义为TBIDEX000-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  异步捕获  同步捕获 
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可以选择是1612108位;
 
                 7.3.3  两级缓冲比较器(比较模式下)
TA里面,我们在TACCRn中写入要比较的数值,然后让TAR中的计数值和TACCRn比较,如果相等了,相应的标志位就会置位;
 
TB 里面, 不仅有TB0CCRn,还多了一个二级缓存器TB0CLnTB0CLn不能被直接进行操作,它的值只能来源于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作为一组(TB0CCR1CLLD位控制整组数据更新)
TB0CL3+TB0CL4作为一组(TB0CCR3CLLD位控制整组数据更新)
TB0CL5+TB0CL6作为一组(TB0CCR5CLLD位控制整组数据更新)
                            10TB0CL123一组,(TB0CCR1CLLD位控制整组数据更新)
                                    TB0CL456一组,(TB0CCR4CLLD位控制整组数据更新)
                            11TB0CL0123456整合为一组,
TB0CCR1CLLD位控制整组数据更新)
 
                               所谓的分组,就是该组的数据要同时更新。
                               10 模式下的 TB0CL1 2 3 这组为例:
                                 TB0CCTL1中的CLLD设置为01,即TB0R计数到0时,TB0CCR1就会把值装载(更新)到TB0CL2中,同时TB0CCR2就会把值装载(更新)到TB0CL2中,同时TB0CCR3也会把值装载(更新)到TB0CL3中。无论TB0CCRn中的值有几个发生了变化,但它们都只会同时更新TB0CLn
 
                        一个重要的应用:
 
             如图,增减模式下,可以用来产生有死区时间( dead time )的信号。点击看大图
 
           我们知道有一种 H 电路结构,该电路有一般有两个输入端,而且这两个输入端( 1 2 )严禁同时输入高电平。那么该怎么产生驱动该电路的信号呢:
               但是,如果我们想要在系统运行的时候,修改死区时间怎么办。那只有修改
              比较器里面的数值了。这样就有问题了,如果两个比较器数值没有同时修改,那么就有可能产生同时为高电平的情况,这就很危险了。所以,我们把比较器分组,这样数据同时更新,就不会有这样的担心了。
文章摘录于:http://blog.lehu.shu.edu.cn/879836630/A450844.html

转载于:https://www.cnblogs.com/qingfengshuimu/p/4357805.html

相关文章:

  • Android提高第十篇之AudioRecord实现助听器
  • SqlServer 转 Oracle 的几点注意
  • 在程序中使用3D Vision--转帖
  • 7.cadence原理图后续[原创]
  • linux内核线程的创建及在QEMU上的测试方法
  • unity 查看prefab层次
  • anmpp限制php文件函数可以操作的目录
  • SMTP 550错误
  • 【监控】WebServer入库与缓存更新代码优化小计
  • Ext JS 4前瞻:快速、易用和稳定
  • C# 调用C++ CLR dll类库时,实现从 string 到 sbyte* 的转换
  • BaseTDI.sys 瑞星卡巴冲突,导致机器蓝屏
  • Freemodbus介绍及测试
  • struts tech
  • html代码中显示系统时间
  • JS 中的深拷贝与浅拷贝
  • [deviceone开发]-do_Webview的基本示例
  • gf框架之分页模块(五) - 自定义分页
  • IOS评论框不贴底(ios12新bug)
  • Java,console输出实时的转向GUI textbox
  • Javascripit类型转换比较那点事儿,双等号(==)
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Python连接Oracle
  • Spring Cloud Feign的两种使用姿势
  • springboot_database项目介绍
  • SwizzleMethod 黑魔法
  • vue2.0项目引入element-ui
  • 计算机常识 - 收藏集 - 掘金
  • 简单易用的leetcode开发测试工具(npm)
  • 坑!为什么View.startAnimation不起作用?
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 一道面试题引发的“血案”
  • 一起参Ember.js讨论、问答社区。
  • 原生 js 实现移动端 Touch 滑动反弹
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • !!Dom4j 学习笔记
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (zt)最盛行的警世狂言(爆笑)
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (数据结构)顺序表的定义
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • (杂交版)植物大战僵尸
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)jdk与jre的区别
  • (转)树状数组
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .gitignore文件忽略的内容不生效问题解决
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .Net Web项目创建比较不错的参考文章
  • .NET 药厂业务系统 CPU爆高分析