ZigBee案例笔记 - 定时器

news2024/12/26 23:57:13

文章目录

        • 1.片内外设I/O
        • 2.定时器简介
        • 3.定时器1寄存器
        • 4.定时器1操作
          • 自由运行模式
          • 模模式
          • 正计数/倒计数模式
        • 5.16位计数器
          • 定时器1控制LED 示例
        • 6.定时器3概述
          • 自由运行模式
          • 倒计数模式
          • 模模式
          • 正/倒计数模式
        • 7.定时器3寄存器
          • 定时器3控制LED闪烁

1.片内外设I/O

定时器这样的片内外设也需要I/O口来实现功能,同USART一样,定时器也有2个可选择的I/O位置
在这里插入图片描述
当I/O引脚用作通用I/O时,需要把PxSEL对应位置0,如果时用作外设功能则需要将PxSEL对应位置1
在这里插入图片描述
在PERCFG寄存器中可配置定时器引脚是使用位置1还是位置2(引脚映射)
在这里插入图片描述

2.定时器简介

CC2530有T1、T2、T3、T4共4个定时器,用于控制和测量,可用的5个通道的正计数/倒计数模式。
T1为16位定时/计数器,支持输入采样、输出比较和PWM功能,T1有5个独立的输入采样/输出比较通道,每个通道对应一个I/O口
T2位MAC定时器,T3、T4为8位定时器/计数器,支持输出比较和PWM功能,T3、T4有两个独立的输出比较通道,每一个通道对应一个I/O口

定时器1的功能如下:

  • 5个捕获/比较通道
  • 上升沿、下降沿或任何边缘的输入捕获
  • 设置、清除或切换输出比较
  • 自由运行、模或正计数/倒计数操作
  • 可被1、8、32或128整除的时钟分频器
  • 在每个捕获/比较和最终计数上生成中断请求
  • DMA触发功能

3.定时器1寄存器

PERCFG.T1CFG选择是否使用备用位置1或备用位置2。
定时器1由以下寄存器组成:
(1)T1CNTH - 定时器1计数高位。
(2)T1CNTL - 定时器1计数低位。
(3)T1CTL - 定时器1控制。
(4)T1STAT - 定时器1状态。
定时器1寄存器如下图所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.定时器1操作

一般来说,控制寄存器T1CTL用于控制定时器操作。状态寄存器T1STAT保存中断标志。定时器1有三种操作模式,对应不同的定时应用,各种操作模式如下所述。

自由运行模式

在自由运行操作模式下,计数器从0x0000开始,每个活动时钟边沿增加1。当计数器达到0xFFFF(溢出),计数器载入Ox0000,继续递增它的值。当达到最终计数值0xFFFF,设置标志IRCON.T1IF和T1STAT.OVFIF。如果设置了相应的中断屏蔽位TIMIF.OVFIM以及IEN1.T1IE,将产生一个中断请求。自由运行模式可以用于产生独立的时间间隔,输出信号频率。

模模式

当定时器运行在模模式,16位计数器从0x0000开始,每个活动时钟边沿增加1。当计数器达到寄存器T1CC0(溢出)时,寄存器T1CC0H: T1CC0L保存最终计数值,计数器将复位到0x0000,并继续递增。如果定时器开始于T1CC0以上的一个值,当达到最终计数值(0xFFFF)时,设置标志IRCON.T1IF和T1CTL.OVFIF。如果设置了相应的中断屏蔽位TIMIF.OVFIM以及IEN1.T1IE,将产生一个中断请求。模模式被大量用于周期不是0xFFFF的应用程序,模模式计数器的操作如图所示。
在这里插入图片描述

正计数/倒计数模式

在正计数/倒计数模式,计数器反复从0x0000开始,正计数直到达到T1CC0H: T1CCOL保存的值。然后计数器将倒计数达到0x0000,如图所示。这个定时器用于周期必须是对称输出脉冲而不是0xFFFF的应用程序,因为这种模式允许中心对齐的PWM输出应用的实现。在正计数/倒计数模式,当达到最终计数值时,设置标志IRCON.T1IF和T1CTL.OVFIF。如果设置了相应的中断屏蔽位TIMIF.OVFIM以及IEN1.T1EN,将产生一个中断请求。
在这里插入图片描述

5.16位计数器

定时器1包括一个16位计数器,在每个活动时钟边沿递增或递减。活动时钟边沿周期由寄存器位CLKCON.TICKSPD定义,它设置全球系统时钟的划分,提供了从0.25MHz到32MHz的不同的时钟标记频率(可以使用32MHz XOSC作为时钟源)。这在定时器1中由TICTL.DIV设置的分频器值进一步划分。这个分频器值可以为1、8、32或128。因此当32MHz晶振用作系统时钟源时,定时器1可以使用的最低时钟频率是1953.125Hz,最高是32MHz。当16MHz RC振荡器用作系统时钟源时,定时器1可以使用的最高时钟频率是16MHz。
读取16位的计数器值:T1CNTH和T1CNTL,分别包含在高位字节和低位字节中。当读取T1CNTL时,计数器的高位字节在那时被缓冲到T1CNTH,以便高位字节可以从T1CNTH中读出。因此T1CNTL必须在读取T1CNTH之前首先读取。对TICNTL寄存器的所有写入访问将复位16位计数器。
当达到最终计数值(溢出)时,计数器产生一个中断请求。可以用T1CTL控制寄存器设置启动并停止该计数器。当一个不是00的值写入到TICTL.MODE时,计数器开始运行。如果00写入到T1CTL.MODE,计数器停止在它现在的值上。

定时器1控制LED 示例

在TI定时器处于8分频下,计数器每8/(32x10^6)s增加1,当计数到0xFFFF发生溢出中断约0.16s,中断300次约5s时间

#include<ioCC2530.h>

#define LED1 P1_0

unsigned int counter = 0;		// 溢出次数

void LED_Init()
{
  	P1SEL &= ~0x01;
  	P1DIR |= 0x01;
  
  	LED1 = 0;
}

void T1_Init()
{
	CLKCONCMD &= ~0x7f;			// 晶振设置为32MHz
	while(CLKCONSTA & 0x40);	// 等待晶振稳定

	EA = 1;						// 开总中断
	T1IE = 1;					// 开T1溢出中断
	T1CTL |= 0x01;				// 设定时器1为自由运行模式
	T1CTL |= 0x04;				// 设置8分频启动定时器1
}

void main()
{
	LED_Init();
	T1_Init();

	while(1);
}

#pragma vector = T1_VECTOR
__interrupt void T1_ISR()
{
	IRCON = 0x00;		// 清除中断标志

	if(counter<300)		counter++;		// 每300次中断切换LED1状态,约5s
	else{
		counter = 0;					// 计数清零
		LED1 = !LED1;					// LED1状态反转
	}
}

6.定时器3概述

定时器3和定时器4的所有定时器功能都是基于8位计数器建立的,所以定时器3和定时器4的最大计数值要远远小于定时器1,常用于较短时间间隔的定时。定时器3和定时器4各有0、1两个通道,功能较定时器1要弱。计数器在每个时钟边沿递增或递减。活动时钟边沿的周期由寄存器位CLKCONCMD.TICKSPD[2:0]定义,由TxCTL.DIV[2:0](其中x指的是定时器号码,3或4)设置的分频器值进一步划分。计数器可以作为一个自由运行计数器、倒计数器、模计数器或正/倒计数器运行。
可以通过寄存器TxCNT读取8位计数器的值,其中,x指的是定时器号码: 3或4。计数器开始和停止是通过设置TxCTL控制寄存器的值实现的。当TxCTL.START写入1时,计数器开始。当TxCTL.START写入0时,计数器停留在它的当前值。

自由运行模式

在自由运行模式操作下,计数器从0x00开始,每个活动时钟边沿递增。当计数器达到0xFF,计数器载入0x00,并继续递增。当达到最终计数值0xFF(比如,发生了一个溢出),就设置中断标志TIMIF.TxOVFIF。如果设置了相应的中断屏蔽位TxCTL.OVFIM,就产生一个中断请求。自由运行模式可以用于产生独立的时间间隔和输出信号频率。

倒计数模式

在倒计数模式,定时器启动之后,计数器载入TxCC0的内容。然后计数器倒计时,直到0x00。当达到0x00时,设置标志TIMIF.TxOVFIF。如果设置了相应的中断屏蔽位TxCTL.OVFIM,就产生一个中断请求。定时器倒计数模式一般用于需要事件超时间隔的应用程序。

模模式

当定时器运行在模模式,8位计数器在0x00启动,每个活动时钟边沿递增。当计数器达到寄存器TxCC0所含的最终计数值时,计数器复位到0x00,并继续递增。当发生这个事件时,设置标志TIMIF.TxOVFIF。如果设置了相应的中断屏蔽位TxCTL.OVFIM,就产生一个中断请求。模模式可以用于周期不是0xFF的应用程序。

正/倒计数模式

在正/倒计数定时器模式下,计数器反复从0x00开始正计数,直到达到TxCC0所含的值,然后计数器倒计数,直到达到0x00。这个定时器模式用于需要对称输出脉冲,且周期不是0xFF的应用程序。因此它允许中心对齐的PWM输出应用程序的实现。
通过写入TxCTL.CLR清除计数器也会复位计数方向,即从0x00模式正计数。
这两个定时器各分配了一个中断向量。当以下定时器事件之一发生时,将产生一个中断。
(1)计数器达到最终计数值。
(2)比较事件。
(3)捕获事件。
SFR 寄存器 TIMIF 包含定时器 3 和定时器 4 的所有中断标志。寄存器位TIMIF.TxOVFIF 和 TIMIF.TxCHnIF分别包含 2 个最终计数值事件,以及四个通道捕获/比较事件的中断标志。仅当设置了相应的中断屏蔽位时,才会产生一个中断请求。如果有其它未决的中断,必须通过 CPU,在一个新的中断请求产生之前,清除相应的中断标志。而且,如果设置了相应的中断标志,使能一个中断屏蔽位将产生一个新的中断请求。

7.定时器3寄存器

在这里插入图片描述
在这里插入图片描述

定时器3控制LED闪烁

定时器3是8为计数器,在自由模式下计数到0xFF产生溢出中断时间约为0.000064秒,定时器3控制的LED闪烁会比定时器1控制的LED闪烁快很多,300次中断约0.0192s

#include<ioCC2530.h>

#define LED1 = P1_0

unsigned int counter = 0;

void LED_Init()
{
  	P1SEL &= ~0x01;
  	P1DIR |= 0x01;
  
  	LED1 = 0;
}

void T3_Init()
{
	CLKCONCMD &= ~0x7f;			// 晶振设置为32MHz
	while(CLKCONSTA & 0x40);	// 等待晶振稳定

	EA = 1;						// 开总中断
	T3IE = 1;					// 开T1溢出中断
	T3CTL |= 0x7C;				// 设定时器3为8分频 自由运行模式 启动定时器3
}

void main()
{
	LED_Init();
	T3_Init();
	
	while(1);
}

#pragma vector = T3_VECTOR
 __interrupt void T3_ISR()
{
	IRCON = 0x00; 	// 清除中断
	if(counter < 300)	counter++;
	else{
		counter = 0;
		LED1 = !LED1;
	}
}

将中断次数counter大小修改为30000时,约每2s LED状态改变一次

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

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

相关文章

微信小程序原生开发功能合集十五:个人主页功能实现

本章个人主页功能实现,展示当前登录用户信息、个人主页、修改密码、浏览记录、我的收藏、常见问题、意见反馈、关于我们等界面及对应功能实现。   另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实现等内容,具体如…

django ORM框架 第四章 聚合函数

上一章&#xff1a;django ORM框架 第三章 关联表的数据创建与查询_做测试的喵酱的博客-CSDN博客 一、聚合函数类型&#xff1a; from django.db.models import Q, Count, Avg, Max, Min 班级表&#xff1a; 学生信息表&#xff1a; 1.1 Count 模版&#xff1a; QuerySet.…

如何将m4a音频转换mp3格式,5种简单方法帮你处理

如何将m4a音频转换mp3格式&#xff1f;这个问题想必在工作生活中经常遇到吧。为什么要将m4a音频转换mp3格式呢&#xff1f;首先&#xff0c;M4A是一种较新的高质量音频文件格式&#xff0c;通常用于存储高保真度的音频文件&#xff0c;例如音乐录音室的原始录制。但是&#xff…

基于C#制作一个ChatGPT桌面助手

基于C#制作一个ChatGPT桌面助手&#xff0c;在工作或者学习时提升自己的效率&#xff0c;工欲善其事&#xff0c;必先利其器。 一、前言1.1、什么是ChatGPT1.2、ChatGPT官网及key申请 二、后台项目2.1、项目创建2.2、界面设置2.3、获取版本2.4、发送信息 一、前言 1.1、什么是…

深度学习实战31-开发基于机器学习的在线图像识别工具

大家好,我是微学AI,今天给大家讲一下深度学习实战31-开发基于机器学习的在线图像识别工具,本文开发一个基于机器学习的在线图像识别工具,用户可以上传一张图片,并得到对应的标签或分类信息。该工具应该支持多种图像类型,例如自然风景、动物、物品等,并且在处理复杂图像时…

面向移动机器人的道路环境感知

分享嘉宾 | 范睿 文稿整理 | William 自动驾驶感知 首先&#xff0c;三维几何模型背后的机理是多视图几何学&#xff0c;多视图几何学是指想要得到对应模型的三维几何架构&#xff0c;则必须要用相机在两个不同的位置进行拍照。如图1&#xff0c;可以通过利用两个相机在不同位…

【HarmonyOS】【JS】小白的鸿蒙学习之路2--小小的图片啊,动呀动起来

【关键字】 image组件、动画 【介绍】 今天和大家分享下&#xff0c;我在官网上学习的一篇Codelab。这篇帖子通过一个代码示例&#xff0c;实现image组件的平移、缩放、旋转和透明度变化效果。话不多说&#xff0c;我们一起学起来吧&#xff01; 【成果展示】 【开发步骤】 …

FE_VUE路由 细致解读router/index.js的配置

1 安装vue-router插件 安装vue-router&#xff0c;命令&#xff1a;npm i vue-router 【npm i vue-router3】&#xff0c;在main.js 中引入路由文件&#xff1a; import router from ./router&#xff0c; 注意router 不要变且为小写&#xff1b;注册路由&#xff08;因为main…

商场室内地图导航如何实现?商场室内导航地图怎么做?

商场室内地图导航如何实现&#xff1f;现在&#xff0c;消费者的消费观念和消费心理日趋成熟&#xff0c;对于购物商场的要求也愈加挑剔。电子地图作为大家最喜闻乐见的高效应用形式&#xff0c;能够在顾客购物的过程中带来非常大的帮助和体验&#xff0c;对于在大型的综合商场…

抖音电商的新增量在哪里?

“抖音电商涨不动了&#xff0c;才提出做货架”&#xff0c;“抖音做不好货架”……去年&#xff0c;抖音电商提出做“全域兴趣电商”&#xff0c;当时业内外有鼓励&#xff0c;也有不看好的声音。一年过去&#xff0c;5月16日&#xff0c;抖音电商总裁魏雯雯回应了质疑&#x…

Python可视化工具分享

今天和大家分享几个实用的纯python构建可视化界面服务&#xff0c;比如日常写了脚本但是不希望给别人代码&#xff0c;可以利用这些包快速构建好看的界面作为服务提供他人使用。有关于库的最新更新时间和当前star数量。 1、 streamlit (23.3k Updated 2 hours ago) Streamlit…

看完这篇文章你就彻底懂啦{保姆级讲解}-----(I.MX6U驱动GPT定时器中断实现高精度延时) 2023.5.19

目录 前言整体文件结构源码分析&#xff08;保姆级讲解&#xff09;初始化延时函数部分&#xff1a;微秒(us)级延时部分毫秒(ms)级延时部分主函数main部分 编译下载结束语 前言 在上一讲过程中我们使用了EPIT定时器来实现了定时器中断&#xff0c;从而解决了按键消抖的问题。但…

ChatGPT与深度学习的完美融合:打造智能化推荐系统新时代

PNN | AutoRec | 推荐算法 NFM | ChatGPT | 深度学习 新技术如ChatGPT、LLM、AIGC等的兴起&#xff0c;使推荐系统拥有更强的学习和预测能力。然而&#xff0c;推荐算法仍然是深度学习推荐系统中不可或缺的关键技术。推荐算法和这些技术应相辅相成&#xff0c;相互补充。推荐…

五大向量数据库入门横评

本文内容节选自 Paxi.ai 文章分享&#xff0c;Paxi.ai是一个基于GPT-4打造的帮助用户快速使用AI的AI工具&#xff0c;对内容感兴趣的朋友可以上他们官网查看。 从OpenAI发布GPT以来&#xff0c;AI尤其以LLM为代表的项目发展迅速&#xff0c;相信大家已经了解到大语言模型的魅力…

apk 作为资源提供 aar 的过程

1&#xff1a;参考&#xff1a;Android将APK项目封装为SDK(AAR) https://blog.csdn.net/weixin_51522235/article/details/128216091 四大点&#xff1a;1: apply plugin:com.android.library 2:去掉&#xff1a;applicationId 3:去掉&#xff1a;applicationVariants.all…

MySQL:触发器、权限管理

一、学习目标 了解什么是触发器掌握创建触发器的方法掌握查看触发器的方法掌握触发器的使用技巧掌握删除触发器的方法熟练掌握使用触发器的方法和技巧了解什么是权限表掌握权限表的用法掌握账户管理的方法掌握权限管理的方法掌握访问控制的方法熟练掌握新建用户的方法和技巧了…

小程序加weui或者TDesign安装

WeUI样式库展示&#xff1a;https://weui.io/ 微信官方WeUI相关文档&#xff1a;https://wechat-miniprogram.github.io/weui/docs/ WeUI-wxss 项目地址&#xff1a;https://github.com/Tencent/weui-wxss 安装 &#xff0c;1.先安装node.js 2.建立或者打开已经有的项目。…

【SolVES 模型】生态系统服务功能社会价值评估(基于多源环境QGIS、PostgreSQL、ArcGIS、Maxent、R语言)

SolVES模型&#xff08;Social Values for Ecosystem Services&#xff09;全称为生态系统服务社会价值模型&#xff0c;是由美国地质勘探局和美国科罗拉多州立大学联合开发的一款地理信息系统应用程序&#xff0c;开发该模型的目的主要是对生态系统服务功能中的社会价值进行空…

敏捷与瀑布:哪种项目管理方法适合你的企业?

​良好的项目管理可以改变企业的工作流&#xff0c;在减少混乱因素的同时注入方向和组织性。 同时&#xff0c;"项目管理 "对每个人来说并不意味着完全相同的事情。在企业及其客户中&#xff0c;最重要的两种项目管理方法是敏捷和瀑布。而这两种风格之间的差异很大&…

Redis是单线程还是多线程?揭开性能之谜!

大家好&#xff0c;我是小米&#xff0c;在这个充满技术乐趣的小天地里&#xff0c;今天我们来探讨一个备受争议的话题——Redis是单线程还是多线程&#xff1f;这个问题一直困扰着Redis的用户&#xff0c;让我们一起揭开性能之谜吧&#xff01; Redis作为一款高性能键值存储系…