嵌入式(四)定时器 | 定时器功能 分类 定时器工作模式 寄存器全介绍

文章目录

  • [1 定时器工作原理](#1 定时器工作原理)
  • [2 定时器功能](#2 定时器功能)
  • [3 定时器分类](#3 定时器分类)
    • [3.1 定时器1](#3.1 定时器1)
    • [3.2 定时器2](#3.2 定时器2)
    • [3.3 定时器3和定时器4](#3.3 定时器3和定时器4)
    • [3.4 睡眠定时器](#3.4 睡眠定时器)
    • [3.5 看门狗定时器](#3.5 看门狗定时器)
  • [4 定时器工作模式](#4 定时器工作模式)
    • [4.1 自由运行模式](#4.1 自由运行模式)
    • [4.2 模模式](#4.2 模模式)
    • [4.3 正计数/倒计数模式](#4.3 正计数/倒计数模式)
  • [5 定时器1寄存器](#5 定时器1寄存器)
    • [5.1 计数寄存器](#5.1 计数寄存器)
    • [5.2 计数控制寄存器](#5.2 计数控制寄存器)
  • [6 定时器的两种使用方式](#6 定时器的两种使用方式)
    • [6.1 查询方式](#6.1 查询方式)
    • [6.2 中断方式](#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闪烁效果的代码

C 复制代码
void InitT1() {
	T1CTL = 0x0d; //128分频,自动重装 0x0000-0xFFFF
	T1STAT= 0x21; //通道0,中断有效
}
void main(void) {
	uchar count=0;
	InitLed(); //调用初始化函数
	InitT1();
	while(1) {
		if(IRCON > 0) { //查询溢出标志
			IRCON=0;     //溢出后清0
		if(count++ >= 1) { //约1s (2 * 0.52s)周期性闪烁,示波器测约为1025MS
			count=0;
			LED3 = !LED3; //LED3闪烁
} } } }

6.2 中断方式

中断方式是通过最后溢出后,引发中断调用中断函数实现的。需要使能计时器1的中断功能,设置步骤较多

配置流程如下

配置 T1CTl 设置分频和工作模式

配置T1CC0L,T1CC0H, 配置最大计数数值的低,高八位

使能定时器1的溢出中断

使能定时器1中断

使能全局中断

相关推荐
嵌新程1 小时前
day03(单片机高级)RTOS
stm32·单片机·嵌入式硬件·freertos·rtos·u575
Lin2012301 小时前
STM32 Keil5 attribute 关键字的用法
stm32·单片机·嵌入式硬件
电工小王(全国可飞)2 小时前
STM32 RAM在Memory Map中被分为3个区域
stm32·单片机·嵌入式硬件
maxiumII2 小时前
Diving into the STM32 HAL-----DAC笔记
笔记·stm32·嵌入式硬件
美式小田4 小时前
单片机学习笔记 9. 8×8LED点阵屏
笔记·单片机·嵌入式硬件·学习
兰_博5 小时前
51单片机-独立按键与数码管联动
单片机·嵌入式硬件·51单片机
时光の尘5 小时前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
嵌入式大圣7 小时前
单片机结合OpenCV
单片机·嵌入式硬件·opencv
日晨难再8 小时前
嵌入式:STM32的启动(Startup)文件解析
stm32·单片机·嵌入式硬件
yufengxinpian9 小时前
集成了高性能ARM Cortex-M0+处理器的一款SimpleLink 2.4 GHz无线模块-RF-BM-2340B1
单片机·嵌入式硬件·音视频·智能硬件