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

news2024/11/18 11:29:49

文章目录

  • 1 定时器工作原理
  • 2 定时器功能
  • 3 定时器分类
    • 3.1 定时器1
    • 3.2 定时器2
    • 3.3 定时器3和定时器4
    • 3.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}秒 12816MHZ1

倘若我们设置为自由模式,那么只有当计数到0xFFFF(转换为十进制位65535)的时候,才会产生中断

那么最后产生最终中断的时间为

65535 ∗ 128 ∗ 1 16 M H Z 秒 = = 0.52428 秒 65535*128*\frac{1}{16MHZ}秒== 0.52428 秒 6553512816MHZ1==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-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中断

使能全局中断

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1363101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用邮箱发送验证码前端完成登录

前言 在前一篇使用C#发送邮箱验证码已经完成使用.net core web api写了完成往登录邮箱发送验证码的接口。现在就用前端调用接口模拟登录功能。 接口 public class ApiResp{public bool Success { get; set; }public int Code { get; set; }public int count { get; set; }pu…

性能分析与调优: Linux 性能分析60秒

目录 一、实验 1.环境 2.Linux性能分析60秒 一、实验 1.环境 (1)主机 表1-1 主机 主机架构组件IP备注prometheus 监测 系统 prometheus、node_exporter 192.168.204.18grafana监测GUIgrafana192.168.204.19agent 监测 主机 node_exporter192.168…

muduo网络库剖析——日志Log类

muduo网络库剖析——日志Log类 前情从muduo到my_muduo 概要日志日志级别 框架与细节成员函数 源码 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库,考虑的肯定是众多情况是否可以高效满足;而作为学习者,我们需要抽取其中的精华…

freesurfer-reconall后批量提取TIV(颅内总体积)

#提取TIV #singleline=$(grep Estimated Total Intracranial Volume /usr/local/freesurfer/subjects/bect-3d+bold-wangjingchen-4.9y-2/stats/aseg.sta

开启Android学习之旅-4-Android集成FontAwesome

FontAwesome 是一个非常标准、统一风格的图标库。产品经理在原型中应用了很多图标都是FontAwesome。正常流程是 UI 需要再手工绘制或在 iconfont 或 iconpark 网站挨个找,如果在 Android 直接使用不是省了一步(注意版权问题,使用免费版&#…

贯穿设计模式-责任链模式

样例代码 涉及到的项目样例代码均可以从https://github.com/WeiXiao-Hyy/Design-Patterns.git获取 需求 实时地,根据city,sex,product字段进行业务投放,比如:北京的男生;四川的电脑等等 → 责任链模式&…

dyld: Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib

更新Xcode14后低版本iPhone调试报错 dyld: Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib Referenced from: /var/containers/Bundle/Application/…/….app/… Reason: image not found 这是缺少libswiftCoreGraphics库 直接导入libswiftCoreGraphics库即…

国产手机的遮羞布又被撕,市占率仅3%,苹果才是真第一!

国产手机纷纷宣称自己击败了苹果,不过这些第一全部加了定语,例如某周销量,某个价格段等等,而日前一加中国区总裁李杰则揭开了这层遮羞布,就全年来看苹果才是中国手机市场第一名! 李杰指出市调机构BCI给出的…

华为云服务器试用领取

系列文章目录 华为云服务器试用领取 领取的试用云服务器在哪 文章目录 系列文章目录介绍 介绍 我将会用该系列文章讲述如何在云服务器中安装大数据软件及其环境搭建。如有不足之处,还望指点。 本篇文章讲述的是华为云服务器的免费试用。 华为弹性云服务器 ECS 该云…

基于 IP 多播的网络会议程序(2024)

1.题目描述 局域网 IP 多播程序&#xff0c;设计一个图形界面的网络会议程序&#xff08;实现文本多播方式即可&#xff09;。 2.演示Demo 3.参考代码 广播发送代码 //服务端 #include <winsock2.h> #include <iostream> #include <list>#pragma comment(l…

滑动窗口协议仿真(2024)

1.题目描述 滑动窗口协议以基于分组的数据传输协议为特征&#xff0c;该协议适用于在数据链路层以及传输层中对按 顺序传送分组的可靠性要求较高的环境。在长管道传输过程&#xff08;特别是无线环境&#xff09;中&#xff0c;相应的滑动窗口 协议可实现高效的重传恢复。附录 …

Guava Cache 异步刷新技巧

前言 Guava Cache是一款非常优秀的本地缓存框架&#xff0c;提供简洁易用的 API 供开发者使用。 这篇文章&#xff0c;我们聊聊如何使用 Guava Cache 异步刷新技巧带飞系统性能 。 1 基本用法 首先&#xff0c;在 Java 应用中添加 maven 依赖&#xff1a; <dependency&g…

jsES6+新语法

目录 模板字符串标签模板字符串 函数增强默认值与解构剩余参数rest和arguments 箭头函数 展开语法SymbolSetSet方法weakSetweakSet常用方法 MapMap常用方法weakMapweakMap常用方法 PromiseProxy/Reflect迭代器与生成器ES6新增方法includes**Object.valuesObject.entriespadStar…

【SpringBoot】公共字段自动填充功能实现(枚举、自定义注解、AOP、反射)

1. 自定义注解 使用interface语法来定义注解&#xff08;Annotation&#xff09;。 注解的参数类似无参数方法&#xff0c;可以用default设定一个默认值&#xff0c;比如String value() default "";。 元注解&#xff1a;有一些注解可以修饰其他注解&#xff0c;这…

Diffusion扩散模型学习2:DDPM前向加噪过程torch实现

参考: https://arxiv.org/pdf/2006.11239.pdf ##论文 https://github.com/dtransposed/code_videos/blob/main/01_Diffusion_Models_Tutorial/Diffusion%20Model.ipynb ##code https://spaces.ac.cn/archives/9119 1、红色框: 前向过程论文公式推出可以从x0原图一步到最终噪声…

学习Redis缓存

学习Redis缓存 NoSQL和SQL的区别缓存缓存作用缓存成本添加Redis缓存 Redis特征Redis中数据结构Redis通用命令String类型Key的层级格式Hash类型Redis的Java客户端 NoSQL和SQL的区别 缓存 缓存就是数据交换的缓冲区&#xff0c;是存储数据的临时地方&#xff0c;一般读写性比较高…

数据分析——火车信息

任务目标 任务 1、整理火车发车信息数据&#xff0c;结果的表格形式为&#xff1a; 2、并输出最终的发车信息表 难点 1、多文件 一个文件夹&#xff0c;多个月的发车信息&#xff0c;一个excel&#xff0c;放一天的发车情况 2、数据表的格式特殊 如何分析表是一个难点 数…

洛谷 P1019 单词接龙

题目背景 注意&#xff1a;本题为上古 NOIP 原题&#xff0c;不保证存在靠谱的做法能通过该数据范围下的所有数据。 NOIP2000 提高组 T3 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏&#xff0c;现在我们已知一组单词&#xff0c;且给定一个开头的字母&…

mysql视图和sql语句

mysql视图和sql语句 一.mysql视图1.数据的虚拟表示&#xff1a;2.简化复杂查询&#xff1a;3.安全性和权限控制&#xff1a;4.逻辑数据组织&#xff1a;5.更新限制&#xff1a;6.视图的创建&#xff1a; 二.mysq语句使用案列 MySQL的视图&#xff08;View&#xff09;是一个虚拟…

深入剖析pcap中的网络异常:TTL过期攻击、ARP中毒、TCP重传与重叠碎片等

网络流量数据包捕获是网络安全领域的重要部分&#xff0c;而pcap文件则是这一过程的常见载体。为了深入解析pcap文件中潜在的可疑网络流量&#xff0c;我们需要运用强大的网络安全威胁评估与审计工具。这些工具能够帮助我们捕捉、记录、检测和诊断网络中的数据传输问题&#xf…