CC2530定时器使用笔记

2023-11-07

最近在用2530的定时器做捕捉和生成pwm,其中一块2530负责捕捉,另一块2530负责生成pwm,整理下笔记,方便以后查阅。


一、普通定时

使用定时器来定时将tick自加,获得更精确的时间。代码如下(在其他地方将系统的时钟配置了32M,此处未贴出),说明如下。

1,本例中定时器4的分频值为64,频率为2us,即每隔2us,T4CNT的值加1,直接写入0xC0是为了将其他位清除。
2,定时器的模式选择。简单来说,自由模式是从0到0xFF,倒计数是从T4CC0到0,模模式是从0到T4CC0,正反计数是从0到T4CC0再到0,所以在T4CC0相同的情况下,正反计数模式进入中断的时间为倒计数以及模模式的时间的两倍,当然是在允许中断的情况下,T4CCTLn的bit6为中断使能位。

3,本例子在T4的中断服务函数中将tick值加一(未贴出),每次进中断的时间为2us(定时器基础时钟)*10(T4CC0 的值)*2(正反计数所以乘以2)=40us,在外部获取tick 的值即可计算出精确时间。


static void Init_Timer4(void)  
{ 
      T4CTL = 0xc0;    //定时器预分频值 64;32M/64 = 500k HZ   即2us
      T4CTL |= 0x04;    //计数器清零
      T4CTL |= 0x3;     // 3 使用正反计数模式
    T4IE = 0;         // Disable interrupt    
    T4CCTL0 = (1<<6) | (1<<2);  //使能中断,设置比较模式
    T4CC0 = 10;      // 10*2 = 20 次产生一次中断 = >  gettick的单位为40us(20*2us)
    
    T4CTL = T4CTL | (1<<4);   // Start timer
    T4IE = 1;   //Enable interrupt
}


二、输入捕获。
使用定时器3来捕获,代码如下。需要注意的有以下几个点。
1,确定定时器使用的位置。
2,确定所使用的通道对应的io口,并将该io口设置为复用功能。以及方向。
3,根据需要配置T3CTL和 T3CCTL1n即可,


static void Init_CaptureGPIO(void)  
{  
  P1SEL |= (1<<7);      //复用功能  
  P1DIR &= ~(1<<7);     //设置 GPIO 口为输入  
  P1_7 = 1;  
    
  PERCFG |= (1<<5);     //定时器3的备用位置2,必须设置  
  P2SEL  |= (1<<5);     //定时器3优先  
}  
  
static void Init_Timer3(void)  
{  
  T3CTL = 0X00;        //T3溢出中断屏蔽  
  T3CTL |= (1<<7);      //16分频 - 1MHz  
  T3CTL |= (1<<2);      //清除计数器  
  T3CTL |= (1<<3);      //溢出中断使能  
  T3CTL |= (1<<4);      //启动定时器 T3  
    
  T3CCTL1 &= ~(1<<2);     //捕获模式  
  T3CCTL1 |= 0X01;      //上升沿捕获  
  T3CCTL1 |= (1<<6);     //使能通道1中断  
    
  IRCON = 0;          //清除中断标志  
  
  
  T3IE = 1;     //使能定时器3中断  
} 






三,生成pwm。
本例使用定时器1通道4来生成pwm,大致要注意以下几点。
1,首先要配置io口复用,然后是优先级,以及定时器选择的位置。

2,t1定时器是16位的,和t3、t4有一点要不同要注意,T1CCnL写入之后会先缓存,需要紧接着写对应的T1CCnH才能完全部16位数据的写入。


3,T1CTL 的配置同上,不再重复说明。

4,T1CCTL4 的配置比较简单,参考寄存器说明。模式的选择根据需要自行选择。本例选择的模式6,所以t1cnt从0开始计数时,输出高,到达T1CC4(也就是T1CC4H:T1CC4L,这里方便描述简写成T1CC4,T1CC0同理),输出低,并产生t1通道4的中断(如果允许中断的话),然后t1cnt继续加到T1CC0,输出高,自此一个周期完成。所以生成的pwm的高电平时间为0x7d(即T1CC4)*4us(定时器的频率),低电平的时间为(0xfa(即T1CC0)-0x7d(即T1CC4))*4us(定时器的频率),占空比为50%。



5,因为本例需要同时更改pwm的周期和占空比,以达到循环生成两种pwm的目的。而t1通道4进入中断的时候计数还没有结束,这个时候更改t1cc0的值会无效,所以需要使用t1通道1的中断。做法为关闭t1通道4的中断,并将t1通道1的中断打开。配置成模模式,其t1cc1的默认值为0,所以t1通道1进入中断的时候,t1cnt已经归零,此时在T1的中断服务函数中更改t1cc0和t1cc4的值即可,(中断服务函数未贴出)。

uint8 TickInit(void)
{
  
  //T1做PWM产生
  
  P0SEL |= (1<<6);      //复用功能  
  P2SEL = P2SEL | (1<<3);    //定时器1比定时器4优先
  P2SEL &= ~(1<<4);   //定时器1比uart0优先
  PERCFG &= ~(1<<6); //定时器1位置1
  
  T1CTL = 0x00 ; 
  T1CTL |=(3<<2); //128分频   4us
  T1CTL |=(1<<1); //模模式
  
  T1CC0L  = 0xfa; 
  T1CC0H  = 0x00;
  
  
  T1CC4L=0x7d;
  T1CC4H=0x00;  
  
  T1CCTL4 |=(6<<3);// 6 比较模式3  0或者等于T1CC0时,清除输出(输出1)等于T1CC4时设置输出(输出0)
                           
  
  T1CCTL4 |=0x04;  //比较模式。不捕获
                   //定时器开始运行
  T1CCTL4 &= ~(1<<6); //不允许中断
  
  T1CCTL1 |=0x04;  //比较模式。不捕获
  T1CCTL1 |= (1<<6);//允许中断
  T1IE=1; 
}

同时更改周期和占空比的方法是在TI社区上受大牛指点,然后亲测可行,另外,如果文中我有理解的不对的地方欢迎大家指出。

































本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CC2530定时器使用笔记 的相关文章

  • (1)minikube玩转k8s集群之虚拟机支持嵌套虚拟化

    配套视频教程 1 Minikube介绍 简单说 创建k8s集群很麻烦 minikube可以让我们快速搭建一个k8s集群用于学习 Minikube 是一种可以让您在本地轻松运行 Kubernetes 的工具 Minikube 在笔记本电脑上的
  • openId和unionId的区别

    网友的解释 微信的用户隐私策略 每个接入微信的应用 公众号 APP 就像一个独立的商场 用户使用这些应用就像逛商场 商场用会员卡识别用户 类似的 我们根据商场名字为每个用户生成了一张专属会员卡 openid 每张会员卡只能在对应的商场才能够
  • Navicat for MySQL安装教程

    Navicat for MySQL是一款强大的 MySQL 数据库管理和开发工具 它为专业开发者提供了一套强大的足够尖端的工具 但对于新用户仍然易于学习 Navicat for MySQL 基于Windows平台 为 MySQL 量身订作
  • R语言logistic回归的细节解读

    本文首发于公众号 医学和生信笔记 完美观看体验请至公众号查看本文 医学和生信笔记 专注R语言在临床医学中的使用 R语言数据分析和可视化 文章目录 二项logistic回归 R语言中的 factor 函数可以把变量变为因子类型 默认是没有等级
  • Redis缓存击穿问题及解决思路

    一 什么是缓存击穿 缓存击穿问题也叫热点Key问题 就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了 无数的请求访问会在瞬间给数据库带来巨大的冲击 逻辑分析 假设线程1在查询缓存之后 本来应该去查询数据库 然后把这个数据重新加载
  • 【Java】对象的序列化与反序列化

    对象序列化的含义 对象序列化 Serialize 指将一个Java对象写入IO流中 对象的反序列化 Deserialize 则是指从IO流中恢复该Java对象 如果想让某个Java对象能够序列化 则必须让它的类实现java io Seria
  • 使用docker需要知道的基础知识

    一 docker概念 1 1 docker仓库 镜像 容器的作用和三者之间的关系是什么 答 Docker 仓库 用来保存镜像 可以理解为代码控制中的代码仓库 Docker 镜像 是用于创建 Docker 容器的模板 Docker 容器 是独
  • 前端工程化详解——理解与实践前端工程化

    前言 前端工程化一直是一个老生常谈的问题 不管是面试还是我们在公司做基建都会经常提到前端工程化 那么为什么经常会说到前端工程化 并没有听过后端工程化 Java工程化或者Python工程化呢 我们理解的前端工程化是不是一直都是Webpack的
  • 回望2001年的雪鸟城:引发全球软件革命的“敏捷宣言”是如何诞生的?

    将人们置于流程之上 专注于开发可以工作的软件 而不是软件的文档 和你的客户一起工作 而不是为一份合同而争吵 在此过程中 要对改变持开放态度 编者按 敏捷 Agile 这个对于开发真来说不在陌生的概念 已经提出了近17年了 其背后的哲学理念也
  • [CSDN竞赛]第五期参赛回顾

    CSDN竞赛 第五期参赛回顾 体验感想 第一次参加 本来有点小期待 那天还起晚了 结果登录不上去 发现大家都有问题 对我来说反而是好事 本来早上没有下午晚上更加精神 下面是提的建议 上次的登录问题 希望官方下次不要再出现 一定要准备充足 为
  • Unity Shader:用几何着色器实现复联3灭霸的终极大招灰飞烟灭

    图1 正常渲染 图2 几何着色器粒子化特效进行中 图3 几何着色器粒子化特效进行中 1 用几何着色器进行图元转换 在OpenGL渲染管线中 几何着色器Geometry Shader有一个独一无二的功能 既是图元转换 可简单理解为对基本图元点
  • 微信小程序默认下拉刷新和自定义下拉刷新的方式

    1 默认下拉刷新 在指定页面对应的 json配置文件中加入 enablePullDownRefresh true backgroundTextStyle dark 在对应的 js文件中 写入onPullDownRefresh 如果存在则替换
  • 手把手教你做一套“能源管理系统” A

    hello 大家好 我是CC 今天让CC来手把手教大家设计一套 能源管理系统 上个视频咱们有说到 能源管理系统 的范围很广 可以粗分为面向供给侧和面向消费侧 其中面向消费侧又可以分为 家庭能源管理系统HEMS 社区 园区能源管理系统CEMS
  • EQ频响曲线绘制和DRC特性曲线绘制

    目录 1 EQ 系数计算和频响曲线绘制 1 1 基本流程 1 2 EQ参数输入 1 3 滤波器系数计算 1 4 频率响应计算 1 5 曲线绘制 2 DRC特性曲线绘制 2 1 基本流程 2 2 参数输入 2 3 增益计算 2 4 静态特性曲
  • Java学习书籍推荐(步步为营)

    概述 本文只要介绍 Java学习的书籍 进阶之路 始于行动 编程重在理解加多实践 在当今快速发展的时代 要学会站在巨人的肩膀上 吸取经验 看书就是最快与最低成本的进阶之路 史上没有最好的书籍 只有适合自己的书籍 小伙伴们开始行动吧 Java
  • Qt5.14.2中使用QCamera实现切换相机、分辨率和图像捕获功能

    demo中主要涉及的Qt类有 相机类QCamera 取景器类QCameraViewfinder 图像捕获类QCameraImageCapture 因此添加模块multimedia multimediawidgets QT core gui
  • 在 uni-app 中使用 webview 打开本地文件,打开不成功

    在 uni app 中使用 webview 打开本地文件 打开不成功出现套娃现象的解决方案 小程序仅支持加载网络网页 不支持本地html 排查本地文件是否按照官方给出的路径建立的 uni app 项目根目录 gt hybrid gt htm
  • 全民奇迹修复云服务器跨服,越过服务器来打你 全民奇迹跨服战玩法全面解析...

    在全民奇迹当中 玩家与玩家之间的PK往往是解决问题最好的方法 一言不合就开打才是所有奇迹勇士的特点 本篇全民奇迹跨服战玩法全面解析 973手游网小编就来为大家说说跨服战 全民奇迹 16人的对决 幻影寺院 实力的对决 在幻影寺院中 玩家被分为
  • bluez——dbus接口api

    bluez dbus接口api bluez的api接口的说明文档在 doc 路径下 我这先重点分析下adapter agent和device这几个文件 这里面包含的是常用的api 1 agent c 这里现在注册的几个dbus方法 void

随机推荐

  • Winform SplitContainer控件可调整大小

    IsSpliterFixed属性设为False FixedPannel属性设为Pannel1 要固定的面板的名称 之后鼠标移动到控件中间的分隔线 就可以调整大小了
  • 多项式加法

    多项式的加法 一 创建链表 二 初始化链表 三 打印链表 四 打印结点 五 添加数据 六 相加 七 测试代码 八 测试结果 一 创建链表 typedef struct LinkNode int coefficient int exponen
  • MIT6.824分布式系统lecture1笔记:Intro,MapReduce

    lecture1先对分布式系统的设计进行了概述 然后介绍了MapReduce的案例 Intro 为什么要使用分布式系统 1 追求高性能 通过分布式系统进行并行计算 2 使系统具有容错性 一台计算机计算错误 可以转移到另一台计算机 3 一些问
  • Docker部署Redis单机版

    1 拉取镜像 docker pull redis latest 2 创建挂载目录 mkdir r home egn redis conf mkdir r home egn redis data 3 修改配置文件 新建redis conf 节
  • 关于java.lang.NoClassDefFoundError: Could not initialize class xxx错误的原因和处理办法

    关于NoClassDefFoundError错误出现的原因有多种 网上其他博主也给出各种答案 但说的都比较广泛 这里博主说一下由于初始化失败而造成的NoClassDefFoundError错误 博主在一个Test这个类中使用了静态代码块 类
  • C#集合总结

    1 为什么引入集合 因为数组长度是固定的 为了建立一个动态的 数组 所以引入了集合 2 为什么引入ArrayList 非泛型集合 ArrayList可以填补数组的不足 进行元素的动态维护 数组的长度是固定的 而ArrayList的容量可以根
  • Android WebSocket状态管理框架 - WebSocketGo

    阅读本文需要 Integer MAX VALUE 分钟 故事背景 笔者所在的公司主营业务是智能家居 笔者在公司负责的Android端App的开发 关于智能家居 估计现在百分之八九十的童鞋都听过 但真正了解或者使用过的估计就不占多数了 本文不
  • 基于Python+WaveNet+CTC+Tensorflow智能语音识别与方言分类—深度学习算法应用(含全部工程源码)

    目录 前言 总体设计 系统整体结构图 系统流程图 运行环境 Python 环境 Tensorflow 环境 模块实现 1 方言分类 数据下载及预处理 模型构建 模型训练及保存 2 语音识别 数据预处理 模型构建 模型训练及保存 3 模型测试
  • ESXI使用shell查看虚拟机

    1 按F2登录 选择Troubleleshooting Options 2 选择Enable ESXi Shell 回车启动Shell 3 返回登录界面 按Alt F1 进入Shell 4 输入用户名和密码登录 5 查看虚拟机清单 vim
  • SQL中 EXISTS 的用法简介

    EXISTS 作用是判断某个对象是否存在 常用于判断表或在WHERE子句等条件中使用 分别介绍如下 1 可以判断某个表或某对象是否存在 if exists select from sys tables where name xTable p
  • Eclipse设置:背景与字体大小和xml文件中字体大小调整

    Eclipse中代码编辑背景颜色修改 代码编辑界面默认颜色为白色 对于长期使用电脑编程的人来说 白色很刺激我们的眼睛 所以改变workspace的背景色 可以使眼睛舒服一些 设置方法如下 1 打开window Preference 弹出Pr
  • VMware虚拟机安装win10系统教程(超详细)

    VMware虚拟机安装win10系统教程 1 在VM中的安装与设置 1 1创建新的虚拟机 1 2典型 自定义 1 3选择客户机操作系统 1 4位置和命名 1 5指定磁盘容量 1 6确认界面 1 7虚拟机设置 2 win10系统界面的配置 2
  • 【深度学习】语义分割 PASCAL Context 数据集

    数据集介绍 PASCAL Context数据集 1 由两部分组成 PASCAL VOC 2010 语义分割数据集 Context 标注 PASCAL Context 总共有459个标注类别 包含 10103 张图像 其中 4998 用于训练
  • Java Swing实现美化版绘图工具

    美化版画图工具功能模块分析 gitee https gitee com Guo HongYan javaShape git github https github com 229976762 Java git aliyun https ww
  • R语言基础4 (R运算符)

    R运算符 算数运算符 算数算符 算符含义 乘幂 乘 除 加 减 模运算 取余数 整数除法 例子 gt a lt 10 gt b lt 2 gt c lt 3 gt a b 1 100 gt a b 1 20 gt a c 1 3 33333
  • pc端和移动端抓包工具

    客户端与服务器端 CydiaSubstrate框架 Frida Native层HOOK Frida hook Java层 需要相关资料的朋友 可以 加入此处即可打包获取 一 抓包工具概述 http https fiddler burpsui
  • ssl证书过期;申请以及Nginx配置。

    1 登录阿里云 工作台找SSL证书或者安全下找CA证书 2 点击创建证书 或购买证书 创建好以后点击证书申请 3 设置配置以及域名信息 仅填写圈住内容 其他默认即可 4 随后等待一会 查看状态 是否为 已签发 5 为已签发时 点击下载选择下
  • Linux — 【进程信号】

    目录 一 信号的概念 那么生活中的信号有哪些呢 如何把上面的概念迁徙到进程中呢 signal函数 二 信号的产生 1 通过终端按键产生信号 2 调用系统函数向进程发信号 kill函数 raise函数 abort函数 3 硬件异常产生的信号
  • Django Vue corsheaders跨域问题

    跨域问题 记录一下在我自己的django vue项目里面出现的跨域问题 我的项目之前一直是在本地跑的 因为需要上线测试 所以我就运行在同一个vlan里面 ip段 192 168 1 0 24 突然发现存在跨域问题 我django的接口访问被
  • CC2530定时器使用笔记

    最近在用2530的定时器做捕捉和生成pwm 其中一块2530负责捕捉 另一块2530负责生成pwm 整理下笔记 方便以后查阅 一 普通定时 使用定时器来定时将tick自加 获得更精确的时间 代码如下 在其他地方将系统的时钟配置了32M 此处