微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > CC2530 T1定时器输出比较

CC2530 T1定时器输出比较

时间:12-23 整理:3721RD 点击:

void init()

{

  P1SEL &= ~0x08;     // 设置P1.3为普通IO口

  P1DIR |= 0x08 ;    // 设置P1.3为输出

  LED3 = 0;       // P1.3输出高电平点亮其所控制的LED3(黄色)

  PERCFG |= 0x40;  // 配置Timer1的外设I/O使用位置2  

  P1SEL |= 0x01;  //配置P1.0为定时器1的片内外设I/O

  P1DIR |= 0x01 ;    // 设置P1.0为输出  

  T1CCTL2 |= ((0x02 << 3) |  /* 发生匹配时通道2的输出电平切换 */

             (0x01 << 2));  /* 通道2工作在输出比较模式(匹配模式) */

 T1CC2L =62500 & 0xFF;             // 把62500的低8位写入T1CC2L

 T1CC2H = ((62500 & 0xFF00) >> 8);  // 把62500的高8位写入T1CC2H  

 T1CTL = 0x0D;     // 配置128分频,自由计数器工作模式,并开始启动  

 TIMIF &= ~0x40;  //不产生定时器1的溢出中断

 IEN1 |= 0x02;  //使能定时器1的中断

 EA = 1;               //使能全局中断

}

#pragma vector=T1_VECTOR

__interrupt void T1_ISR(void)

{

  EA = 0;           // 关闭全局中断  

  if((T1STAT & 0x04) == 0x04) //若产生的是通道2中断

  {  

     T1STAT &= ~0x04;  // 清零通道2中断标志    

     LED3=!LED3;       //切换LED3(绿色)的亮灭状态

     // T1CNTL = 0x00;   // 清零定时器1计数器

     // T1CNTH=0x00;

     T1IF=0;   //清T1的中断请求

    }  

   EA = 1;          // 使能全局中断

}  

void main(void)

{

 init();

 while(1);

}

程序功能:使用定时器1的输出比较功能,控制LED1(P1.0)。每0.5s切换一次LED3(绿色)

*           的亮灭状态。当发生匹配时,P1.0(即定时器1的通道2)的输出发生切换,这样就控制了LED1(P1.0)的亮/灭。同时,在发生匹配时,还将产生中断,在 中断服务程序中切换LED3(P1.3)的亮灭。

出现问题:在中断程序里的两条语句     // T1CNTL = 0x00;   // 清零定时器1计数器

     // T1CNTH=0x00;

不添加,则定时器工作时间不对,即T1CC2L、T1CC2H的值不对;添加了这两条语句,定时器工作时间对了,但比较输出结果P1.0没有取反,即P1.0接口的灯没有闪烁

咨询一下,您的例程中对T1STAT寄存器的清零有效果吗?我这边是Timer1作为PWM输出的计数器使用,使用Timer1 的中断计数PWM输出个数,结果不对,断点中断后发现对T1STAT的清零无效。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top