《第4讲MSP430单片机定时器2演示幻灯片.ppt》由会员分享,可在线阅读,更多相关《第4讲MSP430单片机定时器2演示幻灯片.ppt(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、定时器定时器(Timer)看门狗定时器看门狗定时器16位定时器位定时器 Timer TA0 5个比较个比较/捕获寄存器捕获寄存器16位定时器位定时器 Timer TA1 3个比较个比较/捕获寄存器捕获寄存器16位定时器位定时器 Timer TA2 3个比较个比较/捕获寄存器捕获寄存器16位定时器位定时器 Timer TB0 7个比较个比较/捕获寄存器捕获寄存器RTC实时时钟实时时钟MSP430F5529拥有的定时器资源拥有的定时器资源 MSP430定时功能及其实现定时功能及其实现定时功能模块是MSP430应用系统中经常用到的重要部分,可用来实现定时控制、延迟、频率测量、脉宽测量和信号产生、信号
2、检测等等。一般来说,MSP430所需的定时信号可以用软件和硬件两种方法来获得。MSP430系列有丰富定时器资源:看门狗定时器(WDT),定时器A(Timer_A),定时器B(Timer_B)和定时器D(Timer_D)等。看门狗定时器看门狗定时器 概述概述 看门狗定时器,主要作用:用于在“程序跑飞”时,WDT就会产生溢出,从而产生系统复位,CPU需要重新运行用户程序,这样程序就可以又回到正常运行状态。MSP430 看门狗模块具有以下特性:8 种软件可选的定时时间看门狗工作模式定时器工作模式带密码保护的 WDT 控制寄存器时钟源可选择为降低功耗,可停止时钟失效保护看门狗定时器看门狗定时器 WDT
3、的操作的操作 用户可以通过 WDTCTL 寄存器中的 WDTTMSEL 和 WDTHOLD 控制位设置 WDT 工作在看门狗模式、定时器模式和低功耗模式。看门狗模式PUC后,WDT 进入默认状态。如果系统不用看门狗功能,应该在程序开始处禁止看门狗功能。在看门狗模式下,如果计数器超过了定时时间,就会产生复位和激活系统上电清除信号。用户软件一般都需要进行如下操作:进行WDT的初始化:设置合适的时间。周期性地对WDTCNT清零:防止WDT溢出。定时器定时器 A 主要内容主要内容 定时器A的特性 定时器A的结构 定时器A的工作原理定时器工作模式捕获/比较模块输出单元Timer_A中断 定时器A的典型应
4、用定时器定时器 A 特性特性(1/1)定时器 A 由一个16位定时器和多路捕获/比较通道组成。MSP430X5XX/6XX系列单片机的Timer _A有以下特性:带有 4 种操作模式的异步 16 位定时/计数器。输入时钟可以有多种选择,可以是慢时钟,快时钟以及外部时钟。可配置捕获/比较寄存器数多达 7 个。可配置的PWM(脉宽调制)输出。异步输入和同步锁存。不仅能捕获外部事件发生的时间还可锁定其发生时的高低电平。完善的中断服务功能。快速响应Timer_A中断的中断向量寄存器。8种输出方式选择。可实现串行通讯。下图为下图为下图为下图为MSP430X5XX/6XXMSP430X5XX/6XX系列单
5、片机的系列单片机的系列单片机的系列单片机的Timer_ATimer_A结构结构结构结构定时器定时器A的结构(的结构(1/2)Timer_A定时器主要由分为两个部分:主计数器捕获/比较模块定时器定时器 A 结构结构(2/2)从上图可以看出,Timer_A有以下部分组成:定时计数器:16 位定时/计数寄存器TAxR 时钟源的选择和分频:定时器时钟 TACLK 可以选择 ACLK,SMCLK 或者来自外部的 TAxCLK。选择的时钟源,可以通过软件选择分频系数(2、3、4、5、6、7、8)。捕获/比较器:用于捕获事件发生的时间或产生时间间隔,捕获比较功能的引入主要是为了提高I/O 端口处理事务的能力
6、和速度。输出单元:具有可选的8种输出模式,用于产生用户需要的输出信号,支持PWM。定时器定时器A的工作原理的工作原理1 1基本工作原理基本工作原理基本工作原理基本工作原理 16位定时器的计数值寄存器TAR在每个时钟信号的上升沿进行增加/减少,可利用软件读取TAR寄存器的计数值。此外,当定时时间到,产生溢出时,定时器可产生中断。置位定时器控制寄存器中的TACLR控制位,可自动清除TAR寄存器的计数值,同时,在增/减计数模式下,清除了时钟分频器和计数方向。主计数器(主计数器(主计数器(主计数器(TARTAR)负责定时、计数。)负责定时、计数。)负责定时、计数。)负责定时、计数。只需要定时、计数功能
7、时,可以只需要定时、计数功能时,可以只需要定时、计数功能时,可以只需要定时、计数功能时,可以只使用主计数器部分。只使用主计数器部分。只使用主计数器部分。只使用主计数器部分。TAR与捕获/比较模块配合,利用捕获测量脉宽、周期(捕获)(捕获)(捕获)(捕获)、实现PWM调制(比较)(比较)(比较)(比较)等应用。计数值(TAR寄存器的值)被送到各个捕获/比较模块中,它们可以在 无须无须无须无须 CPU CPU干干干干预的情况下预的情况下预的情况下预的情况下,根据触发条件与计数值,自动完成某些测量和输出。定时器定时器 A 工作模式工作模式(1/1)MSP430X5XX/6XX系列单片机的Timer_
8、A共有4种计数模式,如下表所示:定时器定时器 A 工作模式工作模式 停止模式停止模式 停止模式用于定时器暂停,并不发生复位,所有寄存器现行的内容在停止模式结束后都可用。当定时器暂停后重新计数时,计数器将从暂停时的值开始以暂停前的计数方向计数。例如,停止模式前,Timer_A工作于增/减计数模式并且处于下降计数方向,停止模式后,Timer_A仍然工作于增/减计数模式。重新计数时,从暂停前的状态开始继续沿着下降方向开始计数。增计数模式增计数模式捕获/比较寄存器TAxCCR0TAxCCR0用作Timer_A增计数模式的周期寄存器周期寄存器周期寄存器周期寄存器。计数器TAxR与TAxCCR0的值相等(
9、或TAxR大于TAxCCR0的值)时,定时器 TAxR将立即重新从 0 开始计数。下图说明了增计数模式的计数过程。下图说明了增计数模式的计数过程。下图说明了增计数模式的计数过程。下图说明了增计数模式的计数过程。定时器定时器 A 工作模式工作模式 增计数模式增计数模式定时器定时器 A 工作模式工作模式 增计数模式增计数模式 运行时改变捕获/比较寄存器TAxCCR0如果新的计数周期大于或者等于旧的计数周期或者大于当前计数值,定时器将一直计数到新的计数周期。如果新的计数周期小于当前计数值,计数值将减至 0。但是,在定时器回到 0 之前会有一次计数。当定时器计数到 TAxCCR0 时,设置标志位TAx
10、CCR0 CCIFG(捕获比较中断标志)为1,而当定时器从TAxCCR0计数到0时,设置标志位TAIFG(定时器溢出标志)位为1。中断标志位的设置过程,如下图所示。定时器定时器 A 工作模式工作模式 增计数模式增计数模式【例1】利用TA0定时器,使其工作在增计数模式,采用SMCLK作为其计数参考时钟,并启用TA0CCR0计数中断,在TA0中断服务程序中反转P1.0口状态,以便于用示波器进行观察。#include void main(void)WDTCTL=WDTPW+WDTHOLD;/关闭看门狗关闭看门狗 P1DIR|=0 x01;/P1.0设为输出设为输出 TA0CCTL0=CCIE;/CC
11、R0中断使能中断使能 TA0CCR0=50000;TA0CTL=TASSEL_2+MC_1+TACLR;/SMCLK,增计数模式增计数模式,清除清除TAR计数器计数器 _bis_SR_register(LPM0_bits+GIE);/进入进入LPM0,使能中断使能中断/TA0中断服务程序中断服务程序#pragma vector=TIMER0_A0_VECTOR_interrupt void TIMER0_A0_ISR(void)P1OUT=0 x01;/反转反转P1.0口输出状态口输出状态定时器定时器 A 工作模式工作模式 连续数模式连续数模式(1/3)连续连续计数模式计数模式此模式下,定时器
12、从当前值计数到0FFFFH后,又从0开始重新计数。如下图所示,此时捕获/比较寄存器 TAxCCR0 和其它捕获/比较寄存器的工作方式相同。定时器定时器 A 工作模式工作模式 连续数模式连续数模式(2/3)标志位的设置过程,如下图所示:当定时器从 0FFFFh 计数到 0 时,中断标志 TAIFG 置位。定时器定时器 A 工作模式工作模式 连续数模式连续数模式(3/3)连续计数模式的典型应用:产生多个定时信号:通过中断处理程序在相应的比较寄存器TAxCCRx上加上一个时间差来实现。这个时间差是当前时刻(即相应的TAxCCRx中的值)到下一次中断发生时刻所经历的时间,如下图所示。【例2】利用TA1
13、定时器,使其工作在连续计数模式下,采用SMCLK作为其计数参考时钟,使能TAIFG中断。在TA1中断服务程序中反转P1.0口状态,以便于用示波器进行观察。#include void main(void)WDTCTL=WDTPW+WDTHOLD;/关闭看门狗关闭看门狗 P1DIR|=0 x01;/P1.0设为输出设为输出 TA1CTL=TASSEL_2+MC_2+TACLR+TAIE;/SMCLK,连续计数模式连续计数模式,清除清除TAR,并使能,并使能TAIFG中断中断 _bis_SR_register(LPM0_bits+GIE);/进入进入LPM0,并启动中断并启动中断/TA1中断服务程序
14、中断服务程序#pragma vector=TIMER1_A1_VECTOR_interrupt void TIMER1_A1_ISR(void)switch(_even_in_range(TA1IV,14)case 0:break;/无中断无中断 case 2:break;/TA1CCR1 CCIFG中断中断 case 4:break;/TA1CCR2 CCIFG中断中断 case 6:break;/TA1CCR3 CCIFG中断中断 case 8:break;/TA1CCR4 CCIFG中断中断 case 10:break;/TA1CCR5 CCIFG中断中断 case 12:break;/
15、TA1CCR6 CCIFG中断中断 case 14:P1OUT=0 x01;/TAIFG中断中断 break;default:break;定时器定时器 A 工作模式工作模式 增增/减计数模式减计数模式(1/3)增增/减减计数模式计数模式该模式下,定时器先增计数到TAxCCR0的值,然后反向减计数到0。计数周期仍由TAxCCR0定义,它是TAxCCR0计数器数值的2倍。增/减计数模式时计数器中数值的变化情况如图4-35所示。定时器定时器 A 工作模式工作模式 增增/减计数模式减计数模式(2/3)运行时改变周期寄存器 TAxCCR0当计数器正在运行且在减计数方向时改变 TAxCCR0 的值,定时器
16、将会继续减计数方向到 0。定时器减到 0 后,新的周期才有效。当定时器在增计数方向时。如果新的计数周期大于或者等于原来的计数周期,或者比当前的计数值大,定时器会增计数到新的计数周期,再反向计数。如果新的计数周期小于当前的计数值,则定时器将立即开始减计数。但是,在定时器减计数之前有一个额外的计数。定时器定时器 A 工作模式工作模式 增增/减计数模式减计数模式(3/3)定时器TAxR的值从TAxCCR01增计数到TAxCCR0时,中断标志TAxCCR0 CCIFG置位;当定时器从0001h减计数到0000h时,中断标志TAIFG置位。标志位的设置情况如4-36图所示。【例3】利用TA0定时器,使其
17、工作在增/减计数模式,采用SMCLK作为其计数参考时钟,并启用TA0CCR0计数中断,在TA0中断服务程序中反转P1.0口状态,以便于用示波器进行观察。通过观察并与【例2】示例示波器观察的波形相比较,本例中的波形周期为【例2】示例示波器观察波形周期的2倍,即验证了增/减计数的原理。#include void main(void)WDTCTL=WDTPW+WDTHOLD;/关闭看门狗定时器关闭看门狗定时器 P1DIR|=0 x01;/P1.0输出输出 TA0CCTL0=CCIE;/使能使能CCR0中断允许中断允许 TA0CCR0=50000;TA0CTL=TASSEL_2+MC_3+TACLR;
18、/SMCLK,增增/减计数模式减计数模式,清除清除TAR _bis_SR_register(LPM0_bits+GIE);/进入进入LPM0并启用全局中断并启用全局中断/TA0中断服务程序中断服务程序#pragma vector=TIMER0_A0_VECTOR_interrupt void TIMER0_A0_ISR(void)P1OUT=0 x01;/反转反转P1.0引脚输出状态引脚输出状态定时器定时器 A 捕获捕获/比较模块比较模块(1/5)Timer_A有多个相同的捕获/比较模块,为实时处理提供灵活的手段,每个模块都可用于捕获事件发生的时间或产生定时间隔。通过TACCTLx中的CAP位
19、选择模式,该模块既可用于捕获模式,也可用于比较模式。当发生捕获事件或定时时间到都将引起中断。捕获/比较模块的结构,如下图所示。捕获/比较模块的逻辑结构定时器定时器 A 捕获捕获/比较模块比较模块(3/5)捕获模式当TACCTLx中的CAP=1,该模块工作在捕获模式。每个捕获/比较寄存器可以用来记录时间事件,例如:测量软件程序所用时间 测量硬件事件之间的时间 测量系统频率用CM1和CM0 位选择捕获条件,可以选择禁止捕获、上升沿捕获、下降沿捕获或者上升沿下降沿都捕获。当捕获完成后,定时器的值被复制到 TAxCCRn 寄存器,并且中断标志 CCIFG 置位。如果总的中断允许位GIE允许,相应的中断
20、允许位CCIE也允许,则将产生中断请求。如下图所示:定时器定时器 A 捕获捕获/比较模块比较模块(4/5)捕获模式的信号 定时器定时器 A 捕获捕获/比较模块比较模块(5/5)比较模式当TACCTLx中的CAP=0,该模块工作在比较模式。比较方式主要用于为软件或应用硬件产生定时,还可为D/A转换功能或者马达控制等各种用途产生脉宽调制(PWM)输出信号。在计数器TAxR计数到TAxCCRn(n 代表具体的捕获比较寄存器)的值时:中断标志 CCIFG 置位 内部信号 EQUx=1 EQUx 根据输出模式影响输出 输入信号 CCI 被锁存在 SCCI定时器定时器 A 输出单元输出单元(1/5)每个捕
21、获/比较模块都包含一个输出单元,用于产生输出信号。每个输出单元有8种工作模式,可产生基于EQUx的多种信号。除模式0外,其他模式的输出都在定时器时钟上升沿时发生变化。输出模式2,3,6,7不适合输出单元0,因为EQUx=EQU0。输出单元在输出控制位OUTMODx的控制下,有8种输出模式输出信号。这些模式与TAxR、TACCTLx、TAxCCR0的值有关,如下表所示。定时器定时器 A 输出单元输出单元(2/5)定时器定时器 A 中断中断(1/2)Timer_A中断可由计数器溢出引起,也可以来自捕获/比较寄存器。每个捕获/比较模块可独立编程,由捕获/比较外部信号以产生中断。Timer_A模块使用
22、两个中断向量:一个单独分配给捕获/比较寄存器TAxCCR0;另一个作为共用中断向量用于定时器和其他的捕获/比较寄存器。TAxCCR0中断如下图所示:定时器定时器 A 中断中断(2/2)TAxCCR1TAxCCRx和定时器按照优先次序结合共用一个中断向量,属于多源中断。中断向量寄存器用于确定哪个标志请求中断。TAxCCR1TAxCCRx中断,如下图所示:定时器定时器 A典型应用典型应用实现实现PWM(1/5)PWM信号是一种具有固定周期不定占空比的数字信号,如下图所示:如果Timer_A定时器的计数器工作在增计数方式,输出采用输出模式7(复位/置位模式),则可利用寄存器TAxCCR0控制PWM波
23、形的周期,用某个寄存器TAxCCRx控制占空比。这样Timer_A就可以产生出任意占空比的PWM波形。如下图所示:定时器定时器 A典型应用典型应用实现实现PWM(2/5)可以随时间变化任意改变PWM信号的占空比,具体做法:保持CCR0值(周期不变);改变CCRx值(改变占空比)。如下图所示:定时器定时器 A典型应用典型应用实现实现PWM(3/5)如果PWM信号占空比随时间变化,那么经过滤波之后的输出信号就是幅度变化的模拟信号,因此通过控制PWM信号的占空比,就可以产生不同的模拟信号,实现D/A转换。如下图所示:PWM不需要修改占空比和时间时,CPU在做完Timer_A初始化工作之后,Timer
24、_A就能自动输出PWM,而不需利用中断维持PWM输出,此时CPU就可以进入低功耗状态。例:设ACLK=LFXT1=32768Hz,MCLK=SMCLK=DCOCLK=32ACLK=1.048576MHz,利用Timer_A输出周期为512/32768=15.625ms、占空比分别为75%和25%的PWM矩形波:#include void main(void)WDTCTL=WDTPW+WDTHOLD;/Stop WDT while(BAKCTL&LOCKIO)BAKCTL&=(LOCKIO);/Unlock XT1 pins for operation UCSCTL6&=(XT1OFF);/XT
25、1 On UCSCTL6|=XCAP_3;/Internal load cap定时器定时器实现实现PWM例程例程 /Loop until XT1 fault flag is cleared do UCSCTL7&=(XT2OFFG+XT1LFOFFG+DCOFFG);/Clear XT2,XT1,DCO fault flags SFRIFG1&=OFIFG;/Clear fault flags while(SFRIFG1&OFIFG);/Test oscillator fault flag P1DIR|=BIT2+BIT3;/P1.2 and P1.3 output P1SEL|=BIT2+B
26、IT3;/P1.2 and P1.3 options select定时器定时器实现实现PWM例程例程 TA0CCR0=512-1;/PWM Period TA0CCTL1=OUTMOD_7;/CCR1 reset/set TA0CCR1=384;/CCR1 PWM duty cycle TA0CCTL2=OUTMOD_7;/CCR2 reset/set TA0CCR2=128;/CCR2 PWM duty cycle TA0CTL=TASSEL_1+MC_1+TACLR;/ACLK,up mode,clear TAR _bis_SR_register(LPM3_bits);/Enter LPM
27、3 _no_operation();/For debugger由程序知:P1.2 TA0CCR1-75%PWM,P1.3 TA0CCR2-25%PWM。周期15.625ms。定时器定时器实现实现PWM例程例程与之相关的寄存器与之相关的寄存器Timer_A控制寄存器(TAxCTL)TASSEL:第89位,Timer_A时钟源选择控制位。00:TAxCLK;01:ACLK;10:SMCLK;11:TAxCLK反转后的时钟;ID:第67位,输入分频器。00:1分频;01:2分频;10:4分频;11:8分频;MC:第45位,工作模式控制位。00:停止模式,定时器被停止;01:增计数模式,定时器增计数到
28、TAxCCR0;10:连续计数模式,定时器增计数到0FFFFh;11:增/减计数模式,定时器首先增计数到TAxCCR0,之后减计数到0000h;TACLR:第2位,定时器清除控制位。TAIE:第1位,Timer_A中断使能控制位。0:中断禁止;1:中断使能。TAIFG:第0位,Timer_A中断标志位。0:没有中断被挂起;1:中断被挂起。与之相关的寄存器与之相关的寄存器定时器定时器中断中断 Timer_A模块使用两个中断向量:一个单独分配给捕获/比较寄存器TAxCCR0;vector=TIMER0_A0_VECTOR通常称之为TAxCCR0中断;另一个作为共用中断向量用于定时器溢出中断和其他的
29、捕获/比较寄存器。vector=TIMER0_A1_VECTOR通常称之为 TAxIV中断。定时器定时器中断中断TA0:TIMER0_A0_VECTORTIMER0_A1_VECTORTA1:TIMER1_A0_VECTORTIMER1_A1_VECTORTA2:TIMER2_A0_VECTORTIMER2_A1_VECTORTB0:TIMER0_B0_VECTORTIMER0_B1_VECTOR定时器定时器A中断向量列表中断向量列表#pragma vector=TIMER0_A1_VECTOR _interrupt void TIMER0_A1_ISR(void)switch(_even_in_range(TA0IV,14)case 0:break;/No interrupt case 2:break;/CCR1中断中断 case 4:break;/CCR2中断中断 case 6:break;/CCR3中断中断 case 8:break;/CCR4中断中断 case 10:break;/reserved case 12:break;/reserved case 14:/溢出中断溢出中断 P4OUT=BIT4;break;default:break;
限制150内