实验内容:上电点亮MSP430F5529 Launch Pad 上板载的红色LED,同时使用定时器让绿色LED闪烁

实验准备:
1、硬件:MSP430F5529 Launch Pad
2、软件:Code Composer Studio集成开发工具(CCS)
3、CCS的使用安装方法可参考 《Windows环境Code Composer Studio 下载和使用教程》 文章链接:link
4、本次实验使用到的物理层的分析可参考文章:link

一、定时器——Timer_A

  在进入正题之前,我们先来了解一下MSP430F5529的定时器,本次实验我们使用Timer_A定时器,这里需要注意的是MSP430F5529一共有3个A类定时器,分别是Timer0_A5、Timer1_A3、Timer2_A3

在这里需要提一下的是Timer_A定时器有6种寄存器,都是以TAx开头,如果该寄存器涉及捕获比较单元的后面会有个n

  上面我们大致了解了一下MSP430F5529有关定时器Timer_A的相关寄存器个数和A类定时器的个数,下面我们就寄存器配置方法进行分析:

1、Timer_A框图
  在学习使用Timer_A之前我们一定要先大致了解一下Timer_A的流程框图,这有助于我们理解定时器的工作原理,框图如下:

  在Timer_Ax控制寄存器(TAxCTL)中TASSEL位用来选择Timer_A的时钟来源,ID位选择分频系数,TACLR位的置位可对IDEX和ID分频系数进行清除同时清除计数,TAxR寄存器控制Timer_A的计数,MC位设置计数模式,当计数到指定数值时可产生定时器中断从而进入中断服务函数,进而实现我们想要的实现效果。

2、捕获\比较单元
  这里我们讲一下捕获\比较单元TAxCCRn,定时器A的捕获比较单元一共有5个 —> TA0CCR0~TA0CCR4
  在这5个比较捕获单元中,只有TA0CCR0支持增计数,TA0CCR0单独使用一个中断向量,且优先级最高,其他TA0CCR1~TA0CCR4共用一个中断向量。

假设主频时钟为1Mhz,那么产生1个计数就是 1 1 M h z \dfrac{1}{1Mhz} 1Mhz1​us ,若要产生1s的时间延时,就需要计数1000,000次,则配置TA0CCR0 = 1000,000

3、MC工作模式
  查阅《MSP430x5xx and MSP430x6xx Family User Guide》可知,MC一共有4种模式

①MC_0 :系统默认的工作模式,该模式下Timer_A禁止工作,停止之后不会发生复位,重新计数时以暂停之前的配置进行计数,相当于暂停功能

②MC_1:向上计数模模式
    ----该模式下禁止从0xFFFF开始计数;
      ----该模式下从0向上增计数到ATxCCR0,实际计数个数是ATxCCR0+1,计满后重新从0开始向ATxCCR0计数
      ----当定时器计数到ATxCCR0时,中断标志位CCIFG(捕获比较中断信号标志)会自动置位,当定时器的TAxCCR0返回0时TAIFG(溢出中断标志)置位,TAIFG置位后一定要手动清0
      ----当TAxR的计数值大于TAxCCR0时,定时器立刻从0开始计数;
      ----在定时器运行时修改TACCR0,如果新的周期值大于或等于旧的周期值,或大于当前的定时器计数值,那么定时器立刻开始执行新周期计数。如果新周期小于当前的计数值,那么定时器回到0。但是,在回到0之前会多一个额外的计数。

③MC_2:连续计数模式
     ----在该模式下,定时器重复计数到0xFFFH,然后从0重新开始增计数(除非每次重装计数初值),当TAxCCR0计数值从0xFFFF计数到0的时候产生一个TAIFG(溢出中断标志)

连续模式的应用:
  应用: 连续模式下利用捕获/比较器产生需要的时间间隔.
  原理: 计数在一直进行,捕获器TACCRX中存有第一个计数终值,每次捕获器计到TACCRX时,会产生中断标志,我们可以在中断服务函数中写入一个计算好的下一个的计数终值,这样无限计算和中断下去,那么该捕获器就会产生一个稳定的时间间隔序列。

④MC_3:向上/向下计数模式(常用于产生PWM波)
    ----先递增计数到TAxCCR0,再从TAxCCR0递减计数到0,重复执行
      ----该模式下,计数方向是固定的,即让定时器停止后再重新启动定时器,它就沿着停止时的计数方向和数值开始计数。如果不希望这样,就需要将TACLR置位来清除方向。TACLR位能清除TAR的值和定时器的时钟分频以及计数方向。
      ----当定时器运行时,改变TACCR0的值,如果正处于减计数的情况,定时器会继续减到0,新的周期在减到0后开始; 如果正处于增计数状态,新周期大于等于原来的周期,或比当前计数值要大,定时器会增计数到新的周期;如果新周期小于原来的周期,定时器立刻开始减计数,但是,在定时器开始减计数之前会多计一个数。

4、TAxCCTLn 寄存器功能介绍

捕获模式
设置CAP(位8),当CAP =1 时,选择捕获模式,所谓捕获,就是我们来检测外围的信号跳变时刻(此时刻理解为数字信号,即脉冲),此信号乃为我们捕获的对象,可以测量信号的脉冲宽度,即频率等;捕获模式可用于记录时间事件,比如速度估或时间测量等;

利用外部信号的上升沿、下降沿或上升下降沿触发来测量外部或内部事件,也可以由软件停止。捕获源可以由CCISx选择CCIxA,CCIxB,GND,VCC。完成捕获后相应的捕获标志位CCIFGx置一,当输入信号的触发沿来到时,捕获事件发生:
   ----定时器的TAR值复制到TACCRX寄存器中
   ----中断标志位CCIFG置位

应用:
 利用捕获源的信号来触发捕获TAR的值,并将每次捕获的值都保存到TACCRx中,可以随时读取TACCRx的值,TACCRx是个16位的寄存器,捕获模式用于事件的精确定位。如测量时间、频率、速度等

例子:
 利用两次捕获的值来测量脉冲的宽度。或捕获选择任意沿,CCISx=”11“(输入选择VCC),这样即当VCC与GND发生切换时产生捕获条件

说明:
①捕获信号可能会和定时器时钟不同步,并导致竞争条件的发生。将SCS位置位可以在下个定时器时钟使捕获同步
②如果第二次捕获发生时,第一次捕获的TAR值还没有及时被存到TACCRx,捕获比较寄存器就会产生一个溢出逻辑,COV位在此时置位, COV位必须软件清除

比较模式
这是定时器的默认模式,当在比较模式下的时候,与捕获模式相关的硬件停止工作,如果这个时候开启定时器中断,然后设置定时器终值(将终值写入TACCRx),开启定时器,当TAR的值增到TACCRx的时候,中断标志位CCIFGx置一,同时产生中断。若中断允许未开启则只将中断标志位CCIFGx置一

例子:
 比较模式就像51单片机一样,要能够软件设置定时间隔来产生中断处理一些事情,如键盘扫描,也可以结合信号输出产生时序脉冲发生器,PWM信号发生器。如:不断装载TACCRx,启动定时器,TAR和TACCRx比较产生中断处理。

说明:
当Timer_A要用到TACCR0的值作为终值来计数(也就是增模式或者增减模式),很显然TACCR0的值一定要大于其TACCRx的值,否则那些比TACCR0大的计数值就没有存在的意义了

以向上\向下计数模式为例,有如下图:

总结:
1、相应的中断标志CCIFG置位
2、内部信号EQUx= 1
3、EQUx根据输出模式来影响输出信号
4、输入信号CCI锁存到SCCI中

输出模式
输出模式由OUTMODx位来确定,相应设置如下表:

说明:
在模式转换的时候,一定要保持OUTMOD至少一位置位,除非转向0模式。所以最好的做法是:先把OUTMOD置为7,然后再清除掉不需要的位

比较模式下,当计数器TAR中的值和TACCRX中的设计值相等时,相应捕获/比较器的EQUx就会置位。那么EQU0、EQUx和OUTMOD是怎么来影响输出的呢?
  以模式2为例,该模式的定义是这样的:当定时器计数到TACCRX值时,输出翻转。当定时器计数到TACCR0值时,输出复位。于是,这句话就也可以理解成在模式2的条件下,当EQUx=1时,输出翻转;当EQU0等于1的时候,输出复位。这两个信号这里相当于两个触发(使能)信号了。

二、源代码

#include <msp430.h> int main(void)
{WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer//点亮红灯P1DIR |= BIT0;          //P1^0设置为输出P1OUT |= BIT0;          //点亮红灯P4DIR |= BIT7;          //P4^7设置为输出P4OUT &= ~BIT7;         //熄灭绿灯TA0CTL = TASSEL_2 + ID_2 + TACLR + MC_1 + TAIE;TA0CCR0 = 65534;TA0CCTL0 =CCIE;         //捕获/比较中断使能_EINT();return 0;
}#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer0A()
{if(TAIFG){P4OUT ^= BIT7;TA0CTL ^= TAIFG;        //TAIFG一定要手动清除,不然会卡在中断服务函数中跳不出去,导致绿灯常量}
}

  这里特意强调说明一下,进入中断以后TAIFG一定要软件清0,否则会卡在中断服务程序中出不来,这里我郁闷了很久,看了很多博主有关LED灯闪烁实验的程序中并没有软件清零,搞得笔者起初以为是计数设置太小,绿灯闪烁频率太快导致的辉光效应,实际上是中断标志位没有软件清零的原因。

代码可直接移植烧录的开发板实物图如下:

【MSP430】MSP430F5529火箭板 --->基于定时器A的LED灯闪烁实验(含Timer_A分析)相关推荐

  1. 基于STM32F103芯片实现LED灯闪烁

    基于STM32F103芯片实现LED灯闪烁 前言 一,寄存器配置 1,时钟控制 2,GPIO端口设置: 二.实际操作 1.具体代码 2.keil5项目运行 3.硬件的连接 4.链接到 mcuisp 串 ...

  2. AT89C52利用定时器控制单个led灯闪烁

    AT89C52利用定时器控制单个led灯闪烁 keil芯片选择AT89C52 新建一个.c文件,将代码拷贝进去,然后保存. 然后将保存的.c文件加载到工程项目里面去. 设置好生产hex文件,就可以编译 ...

  3. 51C语言中断LED闪烁,单片机定时器中断实现LED灯闪烁程序

    运用定时器0工作在方式1(16位计数器)实现LED灯的闪烁.先来看看定时器0工作在方式1的逻辑结构图. 从上图可以看到,GATE先经过非门,再和INT0引脚作为或门的输入.这里简单提一下数字电路中的与 ...

  4. 【小月电子】安路国产FPGA开发板系统学习教程-LESSON2 LED灯闪烁

    LED灯闪烁例程讲解 若要观看该博客配套的视频教程,可点击此链接 根据多年工作经验,总结出的FPGA的设计流程,概括起来总共有以上12步,其中根据项目难易度可省去其中一些步骤.比如非常简单的项目,我们 ...

  5. 【MSP430】MSP430F5529火箭板 --> 按键中断控制LED实验

    实验目的:   测试评估板上的按键和LED 实验内容:   1.按下s1一次红灯亮1s后熄灭   2.快速按下s1两次绿灯亮1s后熄灭 bsp_led.h #ifndef _BSP_LED_H #de ...

  6. 定时器中断控制led灯闪烁

    定时器 stm32为我们提供了8个定时器,分为:通用是定时器(TIM2~TIM5),高级定时器(TIM1和TIM8),基本定时器(TIM6和TIM7).至于三者之间的区别可以参考以下博客:[https ...

  7. STC8H8K64U——定时器T0(LED灯闪烁)

    LED灯闪烁 使用定时器实现延时实现LED灯闪烁,定时 5ms,count 计数50定时 250ms #include <STC8H.H>sbit LED = P2^0; unsigned ...

  8. STM32定时器控制LED灯闪烁及PWM练习

    一.STM32定时器控制LED灯闪烁 1.相关配置 1)配置RCC和SYS 2)配置IO 配置PC15,并命名为D1. 3)配置定时器 选定时器2,配置Clock Source为Internal Cl ...

  9. 嵌入式作业STM32定时器实现串口通信及LED灯闪烁

    目录 前言 一.什么是定时器 1.定时器与计数器 2. 定时器有什么用 3. 定时器的原理 4.时钟产生器和时基单元 二.用STM32CubeMx创建项目 1. 创建项目 2.配置RCC和SYS 3. ...

最新文章

  1. Python中的遇到的错误(持续更新)
  2. NOR FLASH和NAND FLASH基本结构和特点
  3. column 格式化列显示 命令介绍
  4. 全国计算机二级office基础知识,全国计算机二级office考试内容
  5. 《深入理解JVM.2nd》笔记(五):调优案例分析与实战
  6. asyncio oracle 异步,带有asyncio futures和RuntimeError的InvalidStateError与aiohttp时使用期货回调...
  7. Java队列Disruptor 的使用
  8. 关于AIR 应用程序沙箱
  9. 如何实现一个遵从设计原则的积分兑换系统2
  10. 苹果自带相册打马赛克_一键消除“马赛克”,这个软件太牛了,网友:我有一个大胆的想法...
  11. 小学计算机课评课稿,小学信息技术评课稿课件
  12. TypeScript 简介
  13. HP 笔记本电脑 - 笔记本电脑睡眠后如何唤醒
  14. NR CSI报告简介
  15. 蓝牙耳机什么牌子好?2020年度热销高人气五款蓝牙耳机测评
  16. 最常考的Java后台面试题(一)Java基础
  17. 实战项目!用PHP实现的编程论坛网站
  18. mysql外键约束分数_MySQL 高级查询
  19. 招银网络:笔试题(20190906)
  20. 数字业务再获高增长,微盟“核心战略”飞轮加速转动

热门文章

  1. nagios 安装问题解析
  2. 网站被降权后该如何优化才能快速恢复正常
  3. 王者荣耀App背景修改为视频教程
  4. 解决Vue报错:Legacy octal literals are not allowed in strict mode.
  5. 【Deep Learning】笔记:Understanding the difficulty of training deep feedforward neural networks
  6. 网络入门基础(基本网络的了解和配置)
  7. 助力金融信息化创新,巨杉数据库近期持续中标50余家金融客户
  8. exp与expdp全库导出数据对表空间、用户处理的测试
  9. 力扣-每天的领导和合伙人
  10. 简单深入理解高性能网络编程(Netty)中的Reactor模型(图文+代码)