pos机做网站推广,如何在wordpress上下载apk,家装在线设计平台,帮别人做网站 开票内容是什么定时器资源
CC2530有四个定时器TIM1~TIM4和休眠定时器
TIM1
定时器1 是一个独立的16 位定时器#xff0c;支持典型的定时/计数功能#xff0c;比如输入捕获#xff0c;输出比较和PWM 功能。定时器有五个独立的捕获/比较通道。每个通道定时器使用一个I/O 引脚。定时器用于…定时器资源
CC2530有四个定时器TIM1~TIM4和休眠定时器
TIM1
定时器1 是一个独立的16 位定时器支持典型的定时/计数功能比如输入捕获输出比较和PWM 功能。定时器有五个独立的捕获/比较通道。每个通道定时器使用一个I/O 引脚。定时器用于范围广泛的控制和测量应用可用的五个通道的正计数/倒计数模式将允许诸如电机控制应用的实现
五个捕获/比较通道上升沿、下降沿或任何边沿的输入捕获设置、清除或切换输出比较自由运行、模或正计数/倒计数操作可被 1832 或 128 整除的时钟分频器在每个捕获/比较和最终计数上生成中断请求DMA 触发功能
TIM3和TIM4
定时器3 和4 是两个8 位的定时器。每个定时器有两个独立的比较通道每个通道上使用一个I/O 引脚。
两个捕获/比较通道设置、清除或切换输出比较时钟分频器可以被 1248163264128 整除在每次捕获/比较和最终计数事件发生时产生中断请求DMA 触发功能
TIM2和休眠定时器
定时器2 主要用于为802.15.4 CSMA-CA 算法提供定时以及为802.15.4 MAC 层提供一般的计时功能。当定时器2 和休眠定时器一起使用时 即使系统进入低功耗模式也会提供定时功能。定时器运行在CLKCONSTA.CLKSPD 指明的速度上。如果定时器2 和睡眠定时器一起使用时钟速度必须设置为32 MHz且必须使用一个外部32 kHz XOSC 获得精确结果。
16 位定时器正计数提供的符号/帧周期例如16μs/320μs可变周期可精确到 31.25ns2×16 位定时器比较功能24 位溢出计数2×24 位溢出计数比较功能帧首定界符捕捉功能定时器启动/停止同步于外部 32kHz 时钟以及由睡眼定时器提供定时比较和溢出产生中断具有 DMA 触发功能通过引入延迟可调整定时器值
定时器触发方式
基础知识
定时器基础理论
1系统时钟频率 时钟发生器会以恒定的时间间隔产生脉冲这个间歇性的脉冲可以形象理解为芯片的心跳时钟频率则是用来描述这个心跳的速率。大家通常用1s内时钟发生器产生的脉冲数量来描述时钟频率例如“时钟频率10 MHz”表示1s内的心跳次数为10 000 000次。CC2530有两种时钟频率可供开发者使用32MHz和16MHz。
2分频系数 分频是指将时钟频率降低为原来的1/N也称为N分频。比如当时钟频率是16MHz的时候那么2分频是8MHz。分频系数则是用1/N来表示比如2分频的分频系数为1/2。
3系统时钟周期 周期和频率的关系可以用公式表示 T 1 / f其中T为时钟周期f为时钟频率。时钟周期和时钟频率成倒数关系。举个例子说明一下时钟频率为16MHz时表示在1s内时钟发生器可以产生16 000 000个脉冲而时钟周期则可以表示产生一个脉冲所需要的时间即1 / 160 000 00s。
4计数器 计数器是定时器的核心用于记录时钟发生器产生的脉冲数量。由于脉冲的时钟周期是恒定的因此计算定时时间的公式是tnT其中t为定时时间n为计数次数T为时钟周期
5溢出 由于计数器的范围是有限的当计数次数超过最大值时就会产生溢出。例如当计数器的大小是16位时那么计数范围是0~65535因此计数次数超过65535后计数器就会产生溢出。在产生溢出后计算器的值会从最大值变为0。
定时原理
利用公式对频率和周期的关系作进一步的解释。我们利用f表示时钟频率T来表示时钟周期那么可以用此关系式来表示它们的关系
T 1 / f 1
我们计时t秒后假设此时计数器从0开始计数了N次假设此时计数器没有溢出。前面已经讲解过时钟周期T表示心跳1次所需要时间因此t与N的关系如下
t N × T 2
接着我们可以推导出
N t / T 3
CC2530的默认系统时钟频率是16MHz16000000Hz其定时器1使用128分频因此定时器的时钟频率是 16000000 / 128 Hz。
根据公式1T 1 / f 可以算出定时器1时钟周期为T 128/16000000 秒。在定时5秒的情况下即t5秒根据公式2N t / T计数器的计数值N 5 / (128/16000000) 625000。
处理溢出
当定时器溢出时会发生中断此时寄存器IRCON的Bit1位会由原先的0被设置为1因此我们只需要检测这个标志位即可判断是否发生了溢出定时器1是一个16位定时器每溢出一次计数65536次所以定时5秒后将会溢出 625000 / 65536 9.54取整数即9次。反过来如果溢出了9次我们可以大约第认为时间过了5秒。
查询触发以TIM1为例
实现代码
#includeiocc2530.hvoid initTimer1(void);void main()
{P1SEL ~0x01;//P1_0设置为通用I/O口P1DIR | 0X01;//配置P1_0位输出initTimer1();while(1){if (!(IRCON 0x02)) continue; // Timer1 interrupt not pendingIRCON ~(0x02); // Clear timer1 interrupt flagif (Counter 9) continue; // ~5 secondelse Counter 0;P1_0 ~ P1_0;};
}static void initTimer1(void)
{T1CTL 0x0D; // Tick frequency/128, // Free-running, repeatedly count from 0x0000 to 0xFFFFT1STAT 0x21; // T1 counter-overflow interrupt flag, writing a 1 has no effect.// T1 channel 0 interrupt flag, writing a 1 has no effect.
}
相关寄存器
T1CTL定时器 1 控制寄存器 T1STAT 定时器 1 状态寄存器 中断标志寄存器 中断触发以TIM3为例
实现代码
#includeiocc2530.h
#include stdio.h
#include74LS164_8LED.hint counter_g 0;
int i 0;
void Delay()
{int y,x;for(y1000;y0;y--)for(x30;x0;x--);
}void initTimer3(void)
{T3CTL 0xE8;//128分频 溢出中断屏蔽开T3IE 1; // 定时器3中断使能EA 1; // 中断总允许T3CTL | 0x10; // 开启中断
}void main(){initTimer3();P1SEL ~0x01;//P1_0设置为通用I/O口P1DIR | 0X01;//配置P1_0位输出while(1);
}/** Timer3 interrupt service function */
#pragma vector T3_VECTOR
__interrupt void Timer3_ISR(void)
{// ~5sif (counter_g 2441) {counter_g 0;i;if(i 10) i 0;P1_0 ~ P1_0;}
}相关寄存器
T3CTL定时器3控制寄存器 定时器3中断使能