在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
阅读(4504) | 评论(0) | 转发(5) |