单页简洁手机网站模板,江门住房城乡建设厅网站,广东省住房城乡建设厅网站,常州专业做网站文章目录 1 定时器工作原理2 定时器功能3 定时器分类3.1 定时器13.2 定时器23.3 定时器3和定时器43.4 睡眠定时器3.5 看门狗定时器 4 定时器工作模式4.1 自由运行模式4.2 模模式4.3 正计数/倒计数模式 5 定时器1寄存器5.1 计数寄存器5.2 计数控制寄存器 6 定时器的两种使用方式… 文章目录 1 定时器工作原理2 定时器功能3 定时器分类3.1 定时器13.2 定时器23.3 定时器3和定时器43.4 睡眠定时器3.5 看门狗定时器 4 定时器工作模式4.1 自由运行模式4.2 模模式4.3 正计数/倒计数模式 5 定时器1寄存器5.1 计数寄存器5.2 计数控制寄存器 6 定时器的两种使用方式6.1 查询方式6.2 中断方式 1 定时器工作原理
打开定时器后定时器“存储寄存器”的值经过 一个机器周期自动加1或减1也就是说机器周期 是定时器的计数周期。通过控制定时器运行的计数周期的个数实现定时功能。
每当出现一个计数信号计数器就自动加1或自动减1。当计数值从最大 值变成0或从0变成最大值溢出时定时器/计数器便向CPU提出中断请求中断请求我们在上面一节已经讲过了嵌入式三中断解析 | 中断基本概念 CC2530中断系统 中断编程全解析-CSDN博客。
计数信号的来源可选择
周期性的内部时钟信号如定时功能
非周期性的外界输入信号如计数功能2 定时器功能
那么定时器在我们实际中有什么样的作用呢
1.定时器功能
• 最本身直接的功能比如我期望1s后灯熄灭那么这个1s就得由定时器来完成
2计数器功能
• 对任意时间间隔的输入信号的个数进行计数一般用来对外界事件进行计数。其输入信号一般来自单片机外部开关型传感器 可用于生产线产品计数、信号数量统计和转速测量等方面。
3 输入捕获功能
对规定时间间隔的输入信号的个数进行计数当外界输入有效 信号时捕获计数器的计数值。该功能通常用来测量外界输入 脉冲的脉宽或频率需要在外界输入信号的上升沿和下降沿进 行两次捕获通过计算两次捕获的差值可计算出脉宽或周期等 信息。
4 输出比较功能
当计数值与需要进行比较的值相同时向CPU提出中断请求或改 变I/O口输出控制信号。该功能一般用来控制LED灯亮度或电机 转速。
如按键消抖什么的
而在CC2530中 定时器不光只有一个实际上有5个分别各自的特点及其功能参考如下
3 定时器分类
四个通用两个特殊
四个通用定时器1,2,3,4
两个特殊睡眠定时器看门狗定时器
3.1 定时器1
定时器1是一个16位定时器是功能最全的定时器/计数器。
支持输入捕获、输出比较、PWM输出脉冲宽度调制后面讲到、触发DMA 5个独立的捕获/比较通道
3.2 定时器2
定时器2主要用于为IEEE 802.15.4 CSMA/CA算法提供定时 以及为IEEE 802.15.4 MAC层提供一般的计时功能也称为 MAC定时器。用户一般不使用该定时器
3.3 定时器3和定时器4
定时器3和定时器4都是8位定时器可用于PWM脉冲宽度调制后面讲到控制。
3.4 睡眠定时器
24位正计数定时器运行在32KHz的时钟频率主要用于系统进入或退出低功耗睡眠模式之间的周期定时
3.5 看门狗定时器
用于看门狗功能后面讲到
15位计数器频率由32KHz时钟源规定不使用看门狗功能时可作为通用的定时器
实际上对于一个定时器而言他可以有不同的工作模式
4 定时器工作模式
4.1 自由运行模式
在自由运行模式下计数器从0x0000开始在每个活动时 钟边沿增加1当计数器达到0xFFFF时溢出计数器重新载 入0x0000并开始新一轮的递增计数。
相当于默认定时器的计数为0xFFFF
4.2 模模式
在模模式下计数器从0x0000开始在每个活动时钟边沿 增加1当计数器达到T1CC0寄存器保存的值时溢出计数 器将复位到0x0000并开始新一轮递增计数
相当于可以人为设定计数为T1CC0寄存器
4.3 正计数/倒计数模式
在正计数/倒计数模式下计数器反复从0x0000开始正计数 到T1CC0保存的最终计数值然后倒计时返回0x0000如下图 所示
相当于模模式的两倍
总结自由运行模式的溢出值为0xFFFF不可变的而其他两种模式则可以通过对T1CC0赋值精确控制定时器的溢出值
实际我们对定时器的设置都是通过寄存器来实现的接下来我们重点介绍寄存器其中重点介绍定时器1的各种寄存器
5 定时器1寄存器
5.1 计数寄存器
首先我们是怎么知道当前已经计数到哪里了呢通过T1CNTH和T1CNTl两个寄存器
T1CNTH 定时器1的高位字节在读T1CNTL时计数器的高位字节缓冲到该寄存器
T1CNTL 定时器1的低位字节向该寄存器写任何值将导致计数器被清零
在程序中应先读取T1CNT寄存器获取当前计数的低位字节高位会被缓存到T1CNTH中然后读取T1CNTH寄存器获取当前计数的高位字节
5.2 计数控制寄存器
控制寄存器T1CTL主要进行定时器分频系数和工作模式的选择。工作模式我们刚刚讲过了这里多出来一个概念叫做分频系数
可以理解为把一次计数的时间延长多少倍举一个例子
CC2530在上电后默认使用内部频率为16MHz的RC振荡器这时候计数器增加一次耗费的时间是 1 16 M H Z 秒 \frac{1}{16MHZ}秒 16MHZ1秒 假设我们设置为128分频
那么也就意味着计数器增加一次耗费的时间变为 128 ∗ 1 16 M H Z 秒 128*\frac{1}{16MHZ}秒 128∗16MHZ1秒
倘若我们设置为自由模式那么只有当计数到0xFFFF转换为十进制位65535的时候才会产生中断
那么最后产生最终中断的时间为 65535 ∗ 128 ∗ 1 16 M H Z 秒 0.52428 秒 65535*128*\frac{1}{16MHZ}秒 0.52428 秒 65535∗128∗16MHZ1秒0.52428秒
综上
T1CTL 设置分频系数和工作模式每一位的含义如下 IRCON
Timer1中断标志位T1IF位于IRCON寄存器中查询模式下需要手工进行清除中断模式下进入中断服务函数将由硬件自动清零
T1STAT Timer1溢出中断及比较/捕获中断标志 这里的中断标志位T1IF溢出中断标志位 捕获中断标志 有什么区别查询模式和中断模式区别
输入捕获事件输出比较事件
T1CCxH T1CCxL
计时器1 实际上有不同的通道这样我们就可以设置多个的计数值进行不同功能的不同时间的计数了
比如我一个LED灯想2s后灭而一个LED灯想要1s后灭就可以通过设置不同的计时器通道实现 – T1CCTLn –
– TIMIF.OVFIM register bit resides in the TIMIF register
6 定时器的两种使用方式
6.1 查询方式
查询方式可以只定义分频系数T1CTL的值并且启动自由运行模式即可。利用溢出标志位IRCON状态
值进行判断即可
下面是一个通过查询方式实现LED3闪烁效果的代码
void InitT1() {T1CTL 0x0d; //128分频,自动重装 0x0000-0xFFFFT1STAT 0x21; //通道0,中断有效
}
void main(void) {uchar count0;InitLed(); //调用初始化函数InitT1();while(1) {if(IRCON 0) { //查询溢出标志IRCON0; //溢出后清0if(count 1) { //约1s (2 * 0.52s)周期性闪烁示波器测约为1025MScount0;LED3 !LED3; //LED3闪烁
} } } }6.2 中断方式
中断方式是通过最后溢出后引发中断调用中断函数实现的。需要使能计时器1的中断功能设置步骤较多
配置流程如下
配置 T1CTl 设置分频和工作模式
配置T1CC0LT1CC0H 配置最大计数数值的低高八位
使能定时器1的溢出中断
使能定时器1中断
使能全局中断