历史上的今天
返回首页

历史上的今天

今天是:2025年03月03日(星期一)

正在发生

2020年03月03日 | 关于定时器A的官方例子解读

2020-03-03 来源:eefocus

//******************************************************************************

//  MSP-FET430P140 Demo - Timer_A, Toggle P1.0, CCR0 Cont. Mode ISR, DCO SMCLK

//

//  Description: Toggle P1.0 using software and TA_0 ISR. Toggles every

//  50000 SMCLK cycles. SMCLK provides clock source for TACLK.

//  During the TA_0 ISR, P1.0 is toggled and 50000 clock cycles are added to

//  CCR0. TA_0 ISR is triggered every 50000 cycles. CPU is normally off and

//  used only during TA_ISR.

//  ACLK = n/a, MCLK = SMCLK = TACLK = default DCO ~800kHz

//

//           MSP430F149

//         ---------------

//     /||            XIN|-

//      | |               |

//      --|RST        XOUT|-

//        |               |

//        |           P1.0|-->LED

//

//  M. Buccini

//  Texas Instruments Inc.

//  Feb 2005

//  Built with IAR Embedded Workbench Version: 3.21A

//******************************************************************************


#include 


void main(void)

{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  P1DIR |= 0x01;                            // P1.0 output

  CCTL0 = CCIE;                             // CCR0 interrupt enabled

  CCR0 = 50000;

  TACTL = TASSEL_2 + MC_2;                  // SMCLK, contmode


  _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt

}


// Timer A0 interrupt service routine

#pragma vector=TIMERA0_VECTOR

__interrupt void Timer_A (void)

{

  P1OUT ^= 0x01;                            // Toggle P1.0

  CCR0 += 50000;                            // Add Offset to CCR0

}


关闭了看门狗,定义了二极管引脚为输出;

因为#define CCTL0 TACCTL0 /* Timer A Capture/Compare Control 0 */,

所以,先开启了 CCTL0 捕获/比较寄存器的中断使能。


因为#define CCR0 TACCR0 /* Timer A Capture/Compare 0 */

所以,设置了比较值为50000,(50000<65536).


因为#define TA0CTL TACTL /* Timer A Control /TA控制寄存器;

#define TASSEL_2 (20x100u) /* Timer A clock source select: 2 - SMCLK /

#define MC_2 (20x10u) /* Timer A mode control: 2 - Continous up */

所以时钟源用的是SMCLK ,工作方式是连续计数模式


连续计数模式的时候 TACCR0 做为一般捕获比较寄存器使用,所以只有能引起一个中断标志位

开启总中断,进入低功耗模式,等待中断唤醒

中断函数,为LED改变电平,并且给TACCR0 赋初值;(增加一定的偏移量)



#include 


void main(void)

{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  P2DIR |= BIT0 + BIT2;                            // P2.0 output

  CCTL0 = CCIE;                             // CCR0 interrupt enabled

  CCR0 = 50000;

  TACTL = TASSEL_2 + MC_2 + TAIE;                  // SMCLK, contmode


  _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt

}


// Timer A0 interrupt service routine

#pragma vector=TIMERA0_VECTOR

__interrupt void Timer_A0 (void)

{

  P2OUT ^= 0x01;                            // Toggle P2.0

  CCR0 += 50000;                            // Add Offset to CCR0

}

// Timer A0 interrupt service routine

#pragma vector=TIMERA1_VECTOR

__interrupt void Timer_A1 (void)

{

  switch(TAIV)

  {

    case 2:break;

    case 4:break;

    case 10:P2OUT ^= 0x04;break;                // Toggle P2.0

      

  }                            

                

}


定时器TA中,针对定时器的中断有两个,一个是TAIFG一个是TACCR0 CCIFG;


上面的例子改编,我增加了一个小灯,使 TAIFG置位后引起中断改编小灯状态,发现两个中断并不影响


所以连续计数模式的时候CCR0相当于一个独立的计数器,相当于TAR,但是可以通过CCIE使能中断

推荐阅读

史海拾趣

Ambersil公司的发展小趣事

随着环保意识的日益增强,Ambersil公司开始关注产品的环保性能。公司研发团队致力于开发环保型的电子清洁剂,减少产品对环境的污染。同时,公司还加强了对生产过程的环保管理,确保生产过程中的废弃物得到有效处理。这些举措使得Ambersil公司的产品在市场上更加受到消费者的青睐。

DILABS公司的发展小趣事

随着公司规模的扩大,DILABS开始意识到品质控制的重要性。他们引进了先进的生产设备和管理系统,确保每一款产品的质量都达到行业最高标准。同时,DILABS还加大了品牌宣传力度,通过参加国际展会、发布技术白皮书等方式,逐步建立起公司在电子行业中的品牌形象。

Habia Cable公司的发展小趣事

随着公司规模的扩大,DILABS开始意识到品质控制的重要性。他们引进了先进的生产设备和管理系统,确保每一款产品的质量都达到行业最高标准。同时,DILABS还加大了品牌宣传力度,通过参加国际展会、发布技术白皮书等方式,逐步建立起公司在电子行业中的品牌形象。

大毅科技公司的发展小趣事

大毅科技于1989年成立,是台湾的一家新兴企业。在公司成立的初期,大毅科技就专注于晶片电阻的研发与生产,这在当时是一个相对新兴且竞争激烈的领域。创始人凭借对技术的深刻理解和敏锐的市场洞察力,带领公司逐步在市场中站稳脚跟。通过不断的技术创新和产品优化,大毅科技逐渐获得了客户的认可,并在行业中树立了自己的品牌。

GS Yuasa Battery Sales UK Ltd.公司的发展小趣事

大毅科技一直注重技术创新和研发投入。公司拥有一支高素质的研发团队,不断推出具有市场竞争力的新产品。其中,高压电阻和可修整电阻等产品得到了客户的广泛认可。此外,大毅科技还积极投入于新型材料的研发,以提高产品的性能和降低成本。这些技术创新的成果不仅使大毅科技在市场中保持了领先地位,还为公司的持续发展奠定了坚实基础。

台湾凯励(Carli)公司的发展小趣事

作为一家有社会责任感的企业,凯励公司始终关注环境保护和可持续发展。公司积极推广绿色生产技术和资源循环利用方案,减少生产过程中的能源消耗和废弃物排放。同时,凯励公司还积极参与社会公益活动,为社区和环境贡献自己的力量。这些举措不仅体现了凯励公司的社会责任感,也为其在电子行业树立了良好的形象。

问答坊 | AI 解惑

DC线的线径是根据什么算出来的

我现在的电源是12V40A,该用几号线呀  长要500mm   各位帮忙看看,感激…

查看全部问答>

世界上功耗最低的Cortex-M0 CPU

LPC1000系列ARM 世界上功耗最低的Cortex-M3 CPU LPC1000系列ARM是以第二代Cortex-M3为内核的微控制器,用于处理要求高度集成和低功耗的嵌入式应用。采用3级流水线和哈佛结构,其运行速度高达100MHz,带独立的本地指令和数据总线以及用于外设的 ...…

查看全部问答>

关于down_interruptible函数

if(down_interruptible(&dev->sem))    return -ERESTARTSYS; 其中dev->sem是用于实现互斥的信号量 请问这两行代码是什么意思?因为down_interruptible正常情况下是返回0的,这里它不是正常返回,到底是因为没能拿到信号量,还是因为 ...…

查看全部问答>

关于TCL548

ad转换芯片的REF+和REF-是不是用来确定ad转换最大值和最小值的电压的??…

查看全部问答>

为什么在EVB中显示其它窗体会导致主窗体上的菜单自动消失 ?

当关闭窗体后,消失的主窗体的菜单栏也不能自动再显示出来?请问如何解决?…

查看全部问答>

上升沿的捕获电路(代码)

一个简单的上升沿检测代码:reg RS_r1,RS_r2;always @ (posedge CLKIN or posedge RESET)    if(RESET)        RS_r1 <= 1\'b0;    else        RS_r1 <= RS ...…

查看全部问答>

PWM波的对齐方式和极性在应用上有什么区别?

用的XS128中心对齐和左对齐比如哪个精度更高一些 极性有区别吗 [ 本帖最后由 50572209 于 2011-3-9 23:13 编辑 ]…

查看全部问答>

在程序中用了sprintf函数后,编译没有错,但下载时出现以下错误提示,求解释。

Error[e104]: Failed to fit all segments into specified ranges. Problem discovered in segment CODE. Unable to place 77 block(s) (0x1cec byte(s) total) in 0x754 byte(s) of  memory. The problem occurred while processing the ...…

查看全部问答>

STM32 DMA发送 中断接收 的串口程序-------偶是菜鸟

菜鸟,很想入门,请求热心大虾 相助…

查看全部问答>

急用

请问哪位大神有广州友善之臂mini2440的pcb图…

查看全部问答>