Chinaunix首页 | 论坛 | 博客
  • 博客访问: 43300
  • 博文数量: 59
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-31 10:42
文章分类
文章存档

2015年(59)

我的朋友

分类: 嵌入式

2015-05-31 10:47:59

   在CC2430中有四个定时器,T1,T2,T3,T4。这里我们主要讲一下T1,其他的定时器也类似。T1为16位定时/计数器,支持输入采样、输出比较和PWM输出。T1有三个独立的输入采样/输出比较通道,每一个通道对应于一个I/O口。一个16位MAC定时器,用以为IEEE802.15.4的CSMA-CA算法提供定时以及为IEEE802.15.4的MAC层提供定时。一个一般的16位和两个8位定时器,支持典型的定时/计数功能,例如,输入捕捉、比较输出和PWM功能。
1 操作模式
 T1的操作模式有三种:free-running模式、 modulo模式和up-down模式。
 (1)free-running模式。计数器从0x0000开始计数,当计数值达到0xFFFF时溢出。此时,IRCON.T1IF和T1CTL.OVFIF被置1;如果TIMIF.OVFIF和IEN1.T1EN也被置1,就会产生中断请求。计数器复位为0x0000,重新开始计数。
(2)modulo模式:计数器从0x0000开始计数,当计数值达到最大值T1CC0时溢出。此时,IRCON.T1IF和T1CTL.OVFIF被置1;如果TIMIF.OVFIF和IEN1.T1EN也被置1,就会产生中断请求。计数器复位为0x0000,重新开始计数。
(3)up-down模式:计算机器从0x0000开始计数,当计算值达到最大值T1CC0时,计算机值开始递减直到0x0000。此时,IRCON.T1IF和T1CTL.OVFIF被置1;如果TIMIF.OVFIF和IEN1.T1EN也被置1,就会产生中断请求。计算机器重新开始计数。
定时器的操作模式通过T1CTL(定时器1控制/状态寄存器)来设置。具体可以查看器Datasheet。
2 通道模式
定时器的通道模式有输入采样和输出比较两种
(1)输入采样模式:将输入采样信道所对应的I/O引脚配置为输入状态。定时器启动后,来自该输入引脚的沿信号(上升沿,下降沿)将触发当前计数器值存储到相应的采集寄存器中。因此,可以在某一次外部事件发生时采集当前时间
(2)输出比较模式:将输出比较信道所对应的I/O引脚配置为输出状态。当计数器数值等于通道比较寄存器中的值T1CCnH:T1CCnL时,输出引脚的电平会发送一定的变化,这一变化视T1CCTln.CMp所设置的输出比较模式而定,包括置1,复位0和电平跳变。
定时器的通道模式通过T1CCTln(通道采样/比较寄存器)设置。
 

uint count =0;

void Initial(void);
void Delay(uint);

void Delay(uint n)
{
  uint i;
for(i=0;i<n;i++)
  for(i=0;i<n;i++)
    for(i=0;i<n;i++);
}

void Initial(void)
{
  P1DIR |= 0x0d; //P1_0 P1_1为输出

  RLED =1;
  YLED = 1; // 灭LED

  T1CTL = 0x0d; //配置的分频值 这里是128分频 free-running模式
   EA = 1;
   T1IE = 1;
    T1IF = 0;
    OVFIM = 1;//定时器1的溢出中断标志,溢出是置1
}

void main(void)
{
 Initial();
 SET_MAIN_CLOCK_SOURCE(CRYSTAL);//设置系统的时钟

 //RLED = 0;

while(1);
}

//定时器1中断服务程序

#pragma vector = T1_VECTOR
__interrupt void T1_IRQ(void)
{
 EA = 0;
if(T1CTL & 0x10)
   //T1 溢出
{
  count ++;
if(count == 10)
{
  count =0;
 // RLED= 0;
  YLED = 0;
}
}
EA = 1;
T1CTL &= ~0x10;
 }

其中T1CTL寄存器:

 00 不分频

 01 8分频

 10 32分频

 11 128分频

 1:0位是定时器模式选择

 00 保留

 01 自动重装0x0000 - 0xFFFF

 10 比较计数0x0000 - T1CC0

 11 PWM方式0x0000 - T1CC0 - 0x0000

阅读(411) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~