【MSP430】MSP430F5529火箭板 --->基于定时器A的LED灯闪烁实验(含Timer_A分析)
实验内容:上电点亮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} 1Mhz1us ,若要产生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分析)相关推荐
- 基于STM32F103芯片实现LED灯闪烁
基于STM32F103芯片实现LED灯闪烁 前言 一,寄存器配置 1,时钟控制 2,GPIO端口设置: 二.实际操作 1.具体代码 2.keil5项目运行 3.硬件的连接 4.链接到 mcuisp 串 ...
- AT89C52利用定时器控制单个led灯闪烁
AT89C52利用定时器控制单个led灯闪烁 keil芯片选择AT89C52 新建一个.c文件,将代码拷贝进去,然后保存. 然后将保存的.c文件加载到工程项目里面去. 设置好生产hex文件,就可以编译 ...
- 51C语言中断LED闪烁,单片机定时器中断实现LED灯闪烁程序
运用定时器0工作在方式1(16位计数器)实现LED灯的闪烁.先来看看定时器0工作在方式1的逻辑结构图. 从上图可以看到,GATE先经过非门,再和INT0引脚作为或门的输入.这里简单提一下数字电路中的与 ...
- 【小月电子】安路国产FPGA开发板系统学习教程-LESSON2 LED灯闪烁
LED灯闪烁例程讲解 若要观看该博客配套的视频教程,可点击此链接 根据多年工作经验,总结出的FPGA的设计流程,概括起来总共有以上12步,其中根据项目难易度可省去其中一些步骤.比如非常简单的项目,我们 ...
- 【MSP430】MSP430F5529火箭板 --> 按键中断控制LED实验
实验目的: 测试评估板上的按键和LED 实验内容: 1.按下s1一次红灯亮1s后熄灭 2.快速按下s1两次绿灯亮1s后熄灭 bsp_led.h #ifndef _BSP_LED_H #de ...
- 定时器中断控制led灯闪烁
定时器 stm32为我们提供了8个定时器,分为:通用是定时器(TIM2~TIM5),高级定时器(TIM1和TIM8),基本定时器(TIM6和TIM7).至于三者之间的区别可以参考以下博客:[https ...
- STC8H8K64U——定时器T0(LED灯闪烁)
LED灯闪烁 使用定时器实现延时实现LED灯闪烁,定时 5ms,count 计数50定时 250ms #include <STC8H.H>sbit LED = P2^0; unsigned ...
- STM32定时器控制LED灯闪烁及PWM练习
一.STM32定时器控制LED灯闪烁 1.相关配置 1)配置RCC和SYS 2)配置IO 配置PC15,并命名为D1. 3)配置定时器 选定时器2,配置Clock Source为Internal Cl ...
- 嵌入式作业STM32定时器实现串口通信及LED灯闪烁
目录 前言 一.什么是定时器 1.定时器与计数器 2. 定时器有什么用 3. 定时器的原理 4.时钟产生器和时基单元 二.用STM32CubeMx创建项目 1. 创建项目 2.配置RCC和SYS 3. ...
最新文章
- Python中的遇到的错误(持续更新)
- NOR FLASH和NAND FLASH基本结构和特点
- column 格式化列显示 命令介绍
- 全国计算机二级office基础知识,全国计算机二级office考试内容
- 《深入理解JVM.2nd》笔记(五):调优案例分析与实战
- asyncio oracle 异步,带有asyncio futures和RuntimeError的InvalidStateError与aiohttp时使用期货回调...
- Java队列Disruptor 的使用
- 关于AIR 应用程序沙箱
- 如何实现一个遵从设计原则的积分兑换系统2
- 苹果自带相册打马赛克_一键消除“马赛克”,这个软件太牛了,网友:我有一个大胆的想法...
- 小学计算机课评课稿,小学信息技术评课稿课件
- TypeScript 简介
- HP 笔记本电脑 - 笔记本电脑睡眠后如何唤醒
- NR CSI报告简介
- 蓝牙耳机什么牌子好?2020年度热销高人气五款蓝牙耳机测评
- 最常考的Java后台面试题(一)Java基础
- 实战项目!用PHP实现的编程论坛网站
- mysql外键约束分数_MySQL 高级查询
- 招银网络:笔试题(20190906)
- 数字业务再获高增长,微盟“核心战略”飞轮加速转动
热门文章
- nagios 安装问题解析
- 网站被降权后该如何优化才能快速恢复正常
- 王者荣耀App背景修改为视频教程
- 解决Vue报错:Legacy octal literals are not allowed in strict mode.
- 【Deep Learning】笔记:Understanding the difficulty of training deep feedforward neural networks
- 网络入门基础(基本网络的了解和配置)
- 助力金融信息化创新,巨杉数据库近期持续中标50余家金融客户
- exp与expdp全库导出数据对表空间、用户处理的测试
- 力扣-每天的领导和合伙人
- 简单深入理解高性能网络编程(Netty)中的Reactor模型(图文+代码)