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

文章目录

  • 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-0xFFFFT1STAT= 0x21; //通道0,中断有效
}
void main(void) {uchar count=0;InitLed(); //调用初始化函数InitT1();while(1) {if(IRCON > 0) { //查询溢出标志IRCON=0;     //溢出后清0if(count++ >= 1) { //约1s (2 * 0.52s)周期性闪烁,示波器测约为1025MScount=0;LED3 = !LED3; //LED3闪烁
} } } }

6.2 中断方式

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

配置流程如下

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

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

使能定时器1的溢出中断

使能定时器1中断

使能全局中断

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

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

相关文章

网络报文分析程序的设计与实现(2024)

1.题目描述 在上一题的基础上,参照教材中各层报文的头部结构,结合使用 wireshark 软件(下载地址 https://www.wireshark.org/download.html#releases)观察网络各层报文捕获,解析和分析的过程(如下 图所示&a…

【Linux基础】Linux主要指令的详解(指令补充)

1.cp指令(重要) 语法: cp [选项] 源文件或目录 目标文件或目录 功能: 复制文件或目录 说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指…

pytorch集智-2单车预测器

完整代码在个人主页简介链接pytorch路径下可找到 1 单车预测器1.0 1.1 人工神经元 对于sigmoid函数来说,w控制函数曲线的方向,b控制曲线水平方向位移,w控制曲线在y方向的幅度 1.2 多个人工神经元 模型如下 数学上可证,有限神经…

Linux查找命令@which、find

目录 which概念语法作用 find概念语法按文件名查找按文件大小查找 作用演示一演示二演示三 通配符 which 概念 which 是一个常用的 Linux/Unix 命令,用于查找并显示指定命令的绝对路径。 语法 which 要查找的命令 》无参数。 》 which后面,跟要查找绝对…

【CentOS 7.9】死机卡住如何处理

一、解决办法 1.打开tty2 按下组合键:ctrl alt F2 进入 tty2 2.进入 root 权限 su root3.杀死该用户的所有进程(相当于 windows 里面的注销用户) 请注意,用户名应该全部使用小写字母,如我的用户名叫 Ragdoll&am…

摄像头视频录制程序使用教程(Win10)

摄像头视频录制程序-Win10 🥗介绍🍛使用说明🚩config.json 说明🚩启动🚩关闭🚩什么时候开始录制?🚩什么时候触发录制?🚩调参 🥗介绍 检测画面变化…

Javaweb之Mybatis的基础操作之查询操作的详细解析

1.6 查询 1.6.1 根据ID查询 在员工管理的页面中,当我们进行更新数据时,会点击 “编辑” 按钮,然后此时会发送一个请求到服务端,会根据Id查询该员工信息,并将员工数据回显在页面上。 SQL语句: select id,…

大型语言模型的幻觉问题

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

求两个数之间的最小公约数

目录 前言 方法:求两个数之间的最小公约数 1.欧几里得算法 2.枚举法 3.公共因子积 4.更相减损术 5.Stein算法 解题:在链表中插入最大公约数 总结 前言 今天刷每日一题:2807. 在链表中插入最大公约数 - 力扣(LeetCode)…

基于X86的助力智慧船载监控系统

船载综合监控系统结合雷达、AIS、CCTV、GPS等探测技术,以及高度融合的实时态势与认知技术,实现对本船以及范围内船舶的有效监控,延伸岸基监控中心监管范围,保障行船安全,为船舶安全管理部门实现岸基可控的数据通信和动…

第 121 场 LeetCode 双周赛题解

A 大于等于顺序前缀和的最小缺失整数 模拟&#xff1a;先求最长顺序前缀的和 s s s &#xff0c;然后从 s s s 开始找没有出现在 n u m s nums nums 中的最小整数 class Solution { public:int missingInteger(vector<int> &nums) {unordered_set<int> vis(…

如何批量自定义视频画面尺寸

在视频制作和编辑过程中&#xff0c;对于视频画面尺寸的调整是一项常见的需求。有时候&#xff0c;为了适应不同的播放平台或满足特定的展示需求&#xff0c;我们需要对视频尺寸进行批量调整。那么&#xff0c;如何实现批量自定义视频画面尺寸呢&#xff1f;本文将为您揭示这一…

LLM之RAG实战(十三)| 利用MongoDB矢量搜索实现RAG高级检索

想象一下&#xff0c;你是一名侦探&#xff0c;身处庞大的信息世界&#xff0c;试图在堆积如山的数据中找到隐藏的一条重要线索&#xff0c;这就是检索增强生成&#xff08;RAG&#xff09;发挥作用的地方&#xff0c;它就像你在人工智能和语言模型世界中的可靠助手。但即使是最…

小心JDK20 ZipOutputStream

Oracle 團隊竟然這麽粗心&#xff0c;編譯JDK 20 時ZipOutputStream沒有編譯成功就發佈了。 所以這個20版本不可以使用ZipOutputStream。 GZIPInputStream 只能做最後的壓縮&#xff0c;不能添加多個附件ZipEntry。 下一個版本21不存在這個問題。 try(var zipOut new ZipOu…

数据分析——火车信息

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

案例102:基于微信小程序的旅游社交管理系统设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

解决VMware 虚拟机 ubuntu 20.04 异常关闭导致虚拟网卡 ens33 无法工作问题

问题描述 由于经常使用 SSH 远程链接 VMware 中的虚拟机 ubuntu&#xff0c;每次关闭都是挂起&#xff0c;时间久了&#xff0c;虚拟机运行有些卡顿了&#xff0c;此时可以通过 Linux 命令重启或者关闭 ubuntu&#xff0c;也可以之间使用 VMWare 中的【虚拟机】-- 【电源】-&g…

SiC电机控制器(逆变器)发展概况及技术方向

SiC电机控制器&#xff08;逆变器&#xff09;发展概况及技术方向 1.概述2.电动汽车动力系统设计趋势3.栅极驱动器和驱动电源配置4.结论 tips&#xff1a;资料来自网上搜集&#xff0c;仅供学习使用。 1.概述 2022年到2023年&#xff0c;第三代半导体碳化硅被推上了新的热潮。…

前端uniapp的tab选项卡for循环切换、开通VIP实战案例【带源码/最新】

目录 效果图图1图2 源码最后 这个案例是uniapp&#xff0c;同样也适用Vue项目&#xff0c;语法一样for循环&#xff0c;点击切换 效果图 图1 图2 源码 直接代码复制查看效果 <template><view class"my-helper-service-pass"><view class"tab…

第14课 利用openCV快速数豆豆

除了检测运动&#xff0c;openCV还能做许多有趣且实用的事情。其实openCV和FFmpeg一样都是宝藏开源项目&#xff0c;貌似简单的几行代码功能实现背后其实是复杂的算法在支撑。有志于深入学习的同学可以在入门后进一步研究算法的实现&#xff0c;一定会受益匪浅。 这节课&#…