7.定时器
定时器资源
CC2530有四个定时器TIM1~TIM4和休眠定时器
TIM1
定时器1 是一个独立的16 位定时器,支持典型的定时/计数功能,比如输入捕获,输出比较和PWM 功能。定时器有五个独立的捕获/比较通道。每个通道定时器使用一个I/O 引脚。定时器用于范围广泛的控制和测量应用,可用的五个通道的正计数/倒计数模式将允许诸如电机控制应用的实现
- 五个捕获/比较通道
- 上升沿、下降沿或任何边沿的输入捕获
- 设置、清除或切换输出比较
- 自由运行、模或正计数/倒计数操作
- 可被 1,8,32 或 128 整除的时钟分频器
- 在每个捕获/比较和最终计数上生成中断请求
- DMA 触发功能
TIM3和TIM4
定时器3 和4 是两个8 位的定时器。每个定时器有两个独立的比较通道,每个通道上使用一个I/O 引脚。
- 两个捕获/比较通道
- 设置、清除或切换输出比较
- 时钟分频器,可以被 1,2,4,8,16,32,64,128 整除
- 在每次捕获/比较和最终计数事件发生时产生中断请求
- DMA 触发功能
TIM2和休眠定时器
定时器2 主要用于为802.15.4 CSMA-CA 算法提供定时,以及为802.15.4 MAC 层提供一般的计时功能。当定时器2 和休眠定时器一起使用时, 即使系统进入低功耗模式也会提供定时功能。定时器运行在CLKCONSTA.CLKSPD 指明的速度上。如果定时器2 和睡眠定时器一起使用,时钟速度必须设置为32 MHz,且必须使用一个外部32 kHz XOSC 获得精确结果。
- 16 位定时器正计数提供的符号/帧周期,例如:16μs/320μs
- 可变周期可精确到 31.25ns
- 2×16 位定时器比较功能
- 24 位溢出计数
- 2×24 位溢出计数比较功能
- 帧首定界符捕捉功能
- 定时器启动/停止同步于外部 32kHz 时钟以及由睡眼定时器提供定时
- 比较和溢出产生中断
- 具有 DMA 触发功能
- 通过引入延迟可调整定时器值
定时器触发方式
基础知识
定时器基础理论
(1)系统时钟频率
时钟发生器会以恒定的时间间隔产生脉冲,这个间歇性的脉冲可以形象理解为芯片的心跳,时钟频率则是用来描述这个心跳的速率。大家通常用1s内时钟发生器产生的脉冲数量来描述时钟频率,例如“时钟频率10 MHz”表示1s内的心跳次数为10 000 000次。CC2530有两种时钟频率可供开发者使用:32MHz和16MHz。
(2)分频系数
分频是指将时钟频率降低为原来的1/N,也称为N分频。比如当时钟频率是16MHz的时候,那么2分频是8MHz。分频系数则是用1/N来表示,比如2分频的分频系数为:1/2。
(3)系统时钟周期
周期和频率的关系可以用公式表示: T = 1 / f,其中T为时钟周期,f为时钟频率。时钟周期和时钟频率成倒数关系。举个例子说明一下,时钟频率为16MHz时表示在1s内时钟发生器可以产生16 000 000个脉冲,而时钟周期则可以表示产生一个脉冲所需要的时间,即1 / 160 000 00s。
(4)计数器
计数器是定时器的核心,用于记录时钟发生器产生的脉冲数量。由于脉冲的时钟周期是恒定的,因此计算定时时间的公式是:t=nT,其中t为定时时间,n为计数次数,T为时钟周期
(5)溢出
由于计数器的范围是有限的,当计数次数超过最大值时就会产生溢出。例如当计数器的大小是16位时,那么计数范围是0~65535,因此计数次数超过65535后计数器就会产生溢出。在产生溢出后,计算器的值会从最大值变为0。
定时原理
利用公式对频率和周期的关系作进一步的解释。我们利用f表示时钟频率,T来表示时钟周期,那么可以用此关系式来表示它们的关系:
- T = 1 / f (1)
我们计时t秒后,假设此时计数器从0开始计数了N次(假设此时计数器没有溢出)。前面已经讲解过,时钟周期T表示心跳1次所需要时间,因此t与N的关系如下:
- t = N × T (2)
接着,我们可以推导出:
- N = t / T (3)
CC2530的默认系统时钟频率是16MHz(16000000Hz),其定时器1使用128分频,因此定时器的时钟频率是 16000000 / 128 Hz。
- 根据公式(1)T = 1 / f 可以算出定时器1时钟周期为T = 128/16000000 秒。
- 在定时5秒的情况下(即t=5秒),根据公式(2)N = t / T,计数器的计数值N = 5 / (128/16000000) = 625000。
处理溢出
当定时器溢出时会发生中断,此时寄存器IRCON的Bit1位会由原先的0被设置为1,因此我们只需要检测这个标志位即可判断是否发生了溢出,定时器1是一个16位定时器,每溢出一次计数65536次,所以定时5秒后将会溢出: 625000 / 65536 = 9.54,取整数,即9次。反过来,如果溢出了9次,我们可以大约第认为时间过了5秒。
查询触发(以TIM1为例)
实现代码
#include<iocc2530.h>void initTimer1(void);void main()
{P1SEL &= ~0x01;//P1_0设置为通用I/O口P1DIR |= 0X01;//配置P1_0位输出initTimer1();while(1){if (!(IRCON & 0x02)) continue; // Timer1 interrupt not pendingIRCON &= ~(0x02); // Clear timer1 interrupt flagif (++Counter < 9) continue; // ~5 secondelse Counter = 0;P1_0 = ~ P1_0;};
}static void initTimer1(void)
{T1CTL = 0x0D; // Tick frequency/128, // Free-running, repeatedly count from 0x0000 to 0xFFFFT1STAT= 0x21; // T1 counter-overflow interrupt flag, writing a 1 has no effect.// T1 channel 0 interrupt flag, writing a 1 has no effect.
}
相关寄存器
T1CTL定时器 1 控制寄存器
T1STAT 定时器 1 状态寄存器
中断标志寄存器
中断触发(以TIM3为例)
实现代码
#include<iocc2530.h>
#include <stdio.h>
#include"74LS164_8LED.h"int counter_g = 0;
int i = 0;
void Delay()
{int y,x;for(y=1000;y>0;y--)for(x=30;x>0;x--);
}void initTimer3(void)
{T3CTL = 0xE8;//128分频 溢出中断屏蔽开T3IE = 1; // 定时器3中断使能EA = 1; // 中断总允许T3CTL |= 0x10; // 开启中断
}void main(){initTimer3();P1SEL &= ~0x01;//P1_0设置为通用I/O口P1DIR |= 0X01;//配置P1_0位输出while(1);
}/** Timer3 interrupt service function */
#pragma vector = T3_VECTOR
__interrupt void Timer3_ISR(void)
{// ~5sif (++counter_g == 2441) {counter_g = 0;i++;if(i > 10) i = 0;P1_0 = ~ P1_0;}
}
相关寄存器
T3CTL定时器3控制寄存器
定时器3中断使能
相关文章:

7.定时器
定时器资源 CC2530有四个定时器TIM1~TIM4和休眠定时器 TIM1 定时器1 是一个独立的16 位定时器,支持典型的定时/计数功能,比如输入捕获,输出比较和PWM 功能。定时器有五个独立的捕获/比较通道。每个通道定时器使用一个I/O 引脚。定时器用于…...

计算机网络 | 网络层
计算机网络 | 网络层 计算机网络 | 网络层功能概述SDN(Software-Defined Networking)路由算法与路由协议IPv4IPv4 分组IPv4 分组的格式IPv4 数据报分片 参考视频:王道计算机考研 计算机网络 参考书:《2022年计算机网络考研复习指…...

21GA-ELM,遗传算法优化ELM预测,并和优化前后以及真实数值进行对比,确定结果,基于MATLAB平台,程序已经调通,可以直接运行,需要直接拍下。
GA-ELM,遗传算法优化ELM预测,并和优化前后以及真实数值进行对比,确定结果,基于MATLAB平台,程序已经调通,可以直接运行,需要直接拍下。 21matlab时间序列预测极限学习遗传优化算 (xiaohongshu.co…...
287_C++_TaskQueue管理任务队列和定时器(头文件.h)
#ifndef TASKQUEUE_H #define TASKQUEUE_H#include <sys/types.h> #include <stdlib.h> #include <pthread.h>...
Hadoop+Zookeeper+HA错题总结(一)
题目3: 下列哪项通常是hadoop集群运行时的最主要瓶颈?() [单选题] A、CPU B、网络 C、磁盘 IO D、内存 【参考答案】: C 【您的答案】: D 这道题的答案取决于集群的性能,一般来说运行时的主要瓶颈是网络。但是如果集群的磁盘IO性能较差&am…...

React高级特性之context
例1: createContext // 跨组件通信Context引入createContext import React, { createContext } from react// App传数据给组件C App -- A -- C// 1. 创建Context对象 const { Provider, Consumer } createContext()function SonA () {return (<div>我是…...

【OS】操作系统课程笔记 第五章 并发性——互斥、同步和通信
并发性:并发执行的各个进程之间,既有独立性,又有制约性; 独立性:各进程可独立地向前推进; 制约性:一个进程会受到其他进程的影响,这种影响关系可能有3种形式: 互斥&am…...
RabbitMQ概述原理
RabbitMQ是一种消息队列中间件,其主要作用是在应用程序之间传输数据。它基于AMQP(高级消息队列协议)实现,可以用于不同语言和不同操作系统之间的通信。 RabbitMQ的工作原理是生产者将消息发送到队列中,消费者从队列中接…...

8.Covector Transformation Rules
上一节已知,任意的协向量都可以写成对偶基向量的线性组合,以及如何通过计算基向量穿过的协向量线来获得协向量分量,且看到 协向量分量 以 与向量分量 相反的方式进行变换。 现要在数学上确认协向量变换规则是什么。 第一件事:…...
RustDay04------Exercise[21-30]
21.使用()对变量进行解包 // primitive_types5.rs // Destructure the cat tuple so that the println will work. // Execute rustlings hint primitive_types5 or use the hint watch subcommand for a hint.fn main() {let cat ("Furry McFurson", 3.5);// 这里…...

OpenAI科学家谈GPT-4的潜力与挑战
OpenAI Research Scientist Hyung Won Chung 在首尔国立大学发表的一场演讲。 模型足够大,某些能力才会显现,GPT-4 即将超越拐点并在其能力上实现显着跳跃。GPT-3 和 GPT-4 之间的能力仍然存在显着差距,并且尝试弥合与当前模型的差距可能是无…...

Java电子病历编辑器项目源码 采用B/S(Browser/Server)架构
电子病历(EMR,Electronic Medical Record)是用电子技术保存、管理、传输和重现的数字化的病人的医疗记录,取代手写纸张病历,将医务人员在医疗活动过程中,使用医疗机构管理系统生成的文字、符号、图表、图形、数据、影像等数字化内…...
使用 AWS DataSync 进行跨区域 AWS EFS 数据传输
如何跨区域EFS到EFS数据传输 部署 DataSync 代理 在可以访问源 EFS 和目标 EFS 的源区域中部署代理。转至AWS 代理 AMI 列表并按 AWS 区域选择您的 AMI。对于 us-west-1,单击 us-west-1 前面的启动实例。 启动实例 2. 选择您的实例类型。AWS 建议使用以下实例类型之…...
设计模式~解释器模式(Interpreter)-19
解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。 【俺有一个《泡MM真经》&#x…...
对象混入的实现方式
对象混入(Object mixins)是一种在面向对象编程中用于组合和重用代码的技术。它允许你将一个对象的属性和方法混合(或合并)到另一个对象中,从而创建一个具有多个来源的对象,这些来源可以是不同的类、原型或其…...

Mac 远程 Ubuntu
1. Iterm2 添加ssh 参考:https://www.javatang.com/archives/2021/11/29/13063392.html 2. Finder 添加远程文件管理 2.1 ubuntu 配置 安装samba sudo apt-get install samba配置 [share]path /home/USER_NAME/shared_directoryavailable yesbrowseable ye…...
黑豹程序员-h5前端录音、播放
H5支持页面中调用录音机进行录音 H5加入录音组件,录音后可以进行播放,并形成录音文件,其采样率固化48000,传言是google浏览器的BUG,它无法改动采样率。 大BUG,目前主流的支持16000hz的采样率。 录音组件 …...

Leetcode622.设计循环队列
本专栏内容为:leetcode刷题专栏,记录了leetcode热门题目以及重难点题目的详细记录 💓博主csdn个人主页:小小unicorn ⏩专栏分类:Leetcode 🚚代码仓库:小小unicorn的代码仓库🚚 &…...

二十二、【形状工具组】
文章目录 基础图形多边形直线工具自定义形状工具 形状工具组画的图形是矢量图形,在放大和缩小后像素不变看起来不会模糊,位图和矢量图形的存储方式不一样,位图的存储方式是按各个像素的数据来进行存储的,而矢量图形是根据算法来进…...
设计模式~迭代器模式(Iterator)-20
目录 迭代器模式(Iterator) (1)优点 (2)缺点 (3)使用场景 (4)注意事项 (5)应用实例: 代码 迭代器模式(Iterator) 迭代器模式(…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...