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

文章目录

  • 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中断

使能全局中断

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

junit单元测试:使用@ParameterizedTest 和 @CsvSource注解简化单元测试方法

在平常的开发工作中,我们经常需要写单元测试。比如,我们有一个校验接口,可能会返回多种错误信息。我们可以针对这个接口,写多个单元测试方法,然后将其场景覆盖全。那么,怎么才能写一个测试方法,…

实验笔记之——基于Linux服务器复现Instant-NGP及常用的tmux指令

之前博客实现了基于windows来复现Instant-NGP,本博文在linux服务器上测试 实验笔记之——基于windows复现Instant-NGP-CSDN博客文章浏览阅读444次,点赞15次,收藏7次。之前博客对NeRF-SLAM进行了调研,本博文先复现一下Intant-NGP。…

C++开发小技巧

C开发一些小技巧 积累一些能用得到的C开发小技巧。 错误码/状态码 错误码/状态码在项目很常见,用于提示错误类型、状态,通常还会附带一些相关描述。通常错误码是统一管理的,例如使用宏或者枚举定义。 平时我的做法 使用宏或者枚举定义错…

rust 注释文档生成 cargo doc

rust的cargo文档生成 只需要在每个函数写清楚注释,就可以自动生成文档,很方便 即不用写文档,又可以快速查看,是开发rust的必备技能 rust安装和开发环境配置,可以参考:链接 1.写注释的方法 连续三个 \ 即…

springboot + vue3实现增删改查分页操作

springboot vue3实现增删改查分页操作 环境最终实现效果实现功能主要框架代码实现数据库后端前端 注意事项 环境 jdk17 vue3 最终实现效果 实现功能 添加用户,禁用,启用,删除,编辑,分页查询 主要框架 后端 spri…

在vue3中使用Cesium保姆篇

1.首先新建一个vue项目 Vue.js - 渐进式 JavaScript 框架 | Vue.js 可以直接到管网中查看命令通过npm来创建一个vue3的项目 然后通过命令下载1.99的版本的cesium和plugin npm i cesium1.99 vite-plugin-cesium 下载完了以后 2.引入cesium 首先找到vue的vite.config.js …

技术资讯:谷歌最新发布!2023年度最受欢迎的Chrome扩展榜单

大家好,我是大澈! 本文约1300字,整篇阅读大约需要2分钟。 感谢关注微信公众号:“程序员大澈”,免费领取"面试礼包"一份,然后免费加入问答群,从此让解决问题的你不再孤单&#xff01…

windows 在指定目录下打开 cmd,不用层层进入

一、进入需要打开的目录下 二、在选中的状态下,输入 cmd,然后回车即可

63.接口安全设计(活动管理系统:三)

文章目录 一、参数校验二、统一封装返回值三、做权限控制四、加验证码五、 限流六、加ip白名单七、校验敏感词八、使用https协议九、数据加密十、做风险控制 在日常工作中,开发接口是必不可少的事情,无论是RPC接口还是HTTP接口,我们都应该考虑…

x-cmd pkg | trafilatura - 网络爬虫和搜索引擎优化工具

目录 简介首次用户技术特点竞品和相关作品进一步阅读 简介 trafilatura 是一个用于从网页上提取文本的命令行工具和 python 包: 提供网络爬虫、下载、抓取以及提取主要文本、元数据和评论等功能可帮助网站导航和从站点地图和提要中提取链接无需数据库,输出即可转换…

python总结高阶-文件

文章目录 文件操作文本文件和二进制文件1 文本文件2 二进制文件 文件操作相关模块创建文件对象open()文本文件的写入基本的文件写入操作常用编码介绍write()/writelines()写入数据close()关闭文件流with语句(上下文管理器) 文本文件的读取read([size])readline()readlines() 二…

用友U8 Cloud smartweb2.RPC.d XXE漏洞复现

0x01 产品简介 用友U8 Cloud 提供企业级云ERP整体解决方案,全面支持多组织业务协同,实现企业互联网资源连接。 U8 Cloud 亦是亚太地区成长型企业最广泛采用的云解决方案。 0x02 漏洞概述 用友U8 Cloud smartweb2.RPC.d接口处存在 XXE漏洞,攻击者可通过该漏洞获取敏感文件…

Typora 编辑器 讲解 包括使用方式 快捷键 附带下载地址 (免费破解)

CSDN 成就一亿技术人! 今天来讲一下很好用的编辑器 Typora CSDN 成就一亿技术人! 什么是Typora? 它是一个 Markdown 编辑器和阅读器,这意味着您可以使用简单的格式代码 (Markdown)是一种轻量级标记语言&…

安科瑞汽车充电桩在西北地区的应用——安科瑞 顾烊宇

摘要:“十四五”是经济发展追赶超越的关键时期,将进一步促进电动汽车及充电市场的繁荣发展。目前我国正处于转型发展的关键时期,在“新基建”的推动下,新能源汽车充电桩的建设将迎来发展机遇。本文首先通过统计、分析西部城市某辖…

bat批处理文件_bat注释汇总

文章目录 1、示例(直接结合脚本和结果进行理解) 1、示例(直接结合脚本和结果进行理解) %这是一个注释% %这是另一个注释%rem 这是一个注释 rem 这是另一个注释:这是一个注释 ::这是一个注释 :?这是另一个注释if 1 1 ( %这里会执…

VMware 安装 macOS虚拟机(附工具包)

VMware 安装 macOS虚拟机,在Windows上体验苹果macOS系统! 安装教程:VMware 安装 macOS虚拟机VMware Workstation Pro 是一款强大的虚拟机软件,可让您在 Windows 电脑上运行 macOS 系统。只需简单几步操作,即可轻松安装…

大型语言模型的幻觉问题

1.什么是大模型幻觉? 在语言模型的背景下,幻觉指的是一本正经的胡说八道:看似流畅自然的表述,实则不符合事实或者是错误的。 幻觉现象的存在严重影响LLM应用的可靠性,本文将探讨大型语言模型(LLMs)的幻觉问题&#x…

Mybatis-Plus乐观锁配置使用流程【OptimisticLockerInnerInterceptor】

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家:人工智能学习网站 1.乐观锁实现 1.配置插件 1.XML方式 <bean class"com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerI…

CRM如何精确控制RT设备和与UMD通信笔记

1 CRM工作职责 监控link req是否得到schedule监控link上各个device的req是否ready监控SOF或EOF的trigger信号&#xff0c;决定各个设备配置哪个req 2 CRM如何精确控制RT设备 分两步&#xff0c;一是crm知道某帧req的link dev准备好了&#xff0c;可以做apply setting。 二是…

获取小红书笔记详情API调用说明(含请求示例参数说明)

前言 小红书&#xff0c;是一个引领全球时尚潮流的社交电商平台。在这里&#xff0c;你可以发现世界各地的优质好物&#xff0c;从美妆护肤、穿搭时尚&#xff0c;到家居生活、旅行美食&#xff0c;一切应有尽有。同时&#xff0c;这里也是一个分享生活点滴的平台&#xff0c;…