NRF51822裸机TIMER学习笔记

2023-11-03

外设TIMER

时钟介绍

HFCLK:
① 又称之为高速时钟, 是 nRF5X SOC 的主时钟, 一般是 16MHZ。
② HFCLK 时钟有 2 个来源: 一个是内部 RC 振荡器(RC Oscillator),另一个是外部石英振荡器(Crystal Oscillator)。
③ 16MHZ 时钟信号通过高速时钟控制单元处理输出 3 个时钟信号:

	1) 1MHZ 频率的外设时钟 PCLK1M,给 SOC 的外设使用。
	2) 16MHZ 频率的外设时钟 PCLK16M,给 SOC 的外设使用。 
	3) 16MHZ 的 HCLK 的时钟, 供给 CPU 使用

LFCLK:
① 又称之为低速时钟, 是用来作 RTC 计时和唤醒的时钟信号, 频率为32.768K.LFCLK 。
②有 3 个时钟源:

	 1)一个是内部 RC 振荡器,
	 2)另外一个是外部石英振荡器,
	 3)还有一个是通过 16MHZ 的主时钟频率分频得到 32.768K 的信号。 

③LFCLK 通过低速时钟控制单元输出 32K 的时钟信号给外设使用。

NRF51822定时器

三个定时器,分别是:TIMER0,TIMER1,TIMER2.
不同位宽决定了计数器的最大溢出时间。

instance bit-width capture/compare registers
TIMER0 8/16/24/32 4
TIMER1 8/16 4
TIMER2 8/16 4
定时器结构

在这里插入图片描述
TIMER 有以下几部分组成:
1) 计数时钟源。 有 1M、 16M 2 种时钟源。
2) 时钟源分频器。 用来设置分频, 范围是 2 的 0-9 次方。
3) 定时/计数模式选择。 用来配置 TIMER 工作在定时器模式还是计数器模式。
4) 定时/计数器位数。 8 位、 16 位、 24 位、 32 位可选择。
5) CC[n]寄存器。 CC 是捕捉、 比较的缩写。 CC 寄存器有 4 个。 当执行 CAPUTURE TASK(捕捉任
务)的时候, 当前内部计数器的值将会立刻被拷贝到 CC 寄存器。
6) 各任务、 事件等。

分频器

计算:
在这里插入图片描述
配置:

注:HFCLK无论哪种时钟源,均为16MHz,PRESCALER为一个4位分频器,分频值为0——15。当PRESCALER大于9后,分频始终为2的9次方,即最小频率f=16mhz / 2^9。

工作模式(MODE)

TIMER 有两种工作模式: 定时模式和计数模式。
当处于定时模式, 我们称之为定时器
当处于计数模式, 我们称之为计数器。
在这里插入图片描述
通过寄存器MODE进行设置,MODE = 0—>定时器;MODE= 1 —>计数器。
3 个任务:

1) START:启动定时/计数器
2) STOP:停止定时/计数器
3) SHUTDOWN:让定时/计数器掉电, 后续无法通过 START 来启动该定时/计数器, 除非重新复位。
定时/计数器位数设定

在这里插入图片描述

比较/捕获

定时器模式下设置比较(COMPARE)/捕获(CAPTURE)寄存器CC[n]的值,可以设置定时时间(Timer value),当定时时间的值和CC[n]寄存器的值相等时,将触发一个比较(COMPARE[n] event)事件。

计数器模式下通过设置一个CAPTURE TASK,当计数器的值和比较/捕获寄存器设定的值(Timer value)相等的时候,将产生一个捕获事件(Capture[n] event)。捕获的值将会存储到寄存器CC[n]中读取。

程序的配置

1) 设定工作模式
2) 设定预分频(计数器不适用)
3) 设定 CC[n]寄存器的值
4) 使能中断(中断模式)
5) 启动 START 任务
6) COMPARE EVENT 到来, 清除内部计数器的值, 清除中断(中断模式)

1s的定时器中断配置:

 NRF_TIMER0->MODE = TIMER_MODE_MODE_Timer;             //计数器模式
 NRF_TIMER0->PRESCALER = 9;                            //9分频   31250HZ的FTIMER
 NRF_TIMER0->BITMODE = TIMER_BITMODE_BITMODE_16Bit;    //16位
 NRF_TIMER0->CC[0]=31250;                              //CC=31250,1S后产生COMPARE EVENT
 
 NRF_TIMER0->INTENSET = TIMER_INTENSET_COMPARE0_Msk ;  //使能COMPARE 中断
 NVIC_SetPriority(TIMER0_IRQn,3);                      //设定TIMER0中断优先级为3
 NVIC_EnableIRQ(TIMER0_IRQn);                          //使能TIMER0中断
 NRF_TIMER0->TASKS_START =1;                           //启动TIMER0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NRF51822裸机TIMER学习笔记 的相关文章

  • 如何清除ID未知的Interval?

    假设有人 邪恶 给我们设置了一个计时器setInterval 但我们不知道它的 ID 我们没有 setInterval 返回的对象的引用 也没有它的值 function setInterval function console log pw
  • 如何获取时间。立即勾选

    我有一个迭代循环 直到作业启动并运行 ticker time NewTicker time Second 2 defer ticker Stop started time Now for now range ticker C job err
  • 如何测量脚本的执行时间? [复制]

    这个问题在这里已经有答案了 如何测量脚本从开始运行到结束所需的时间 start timing CODE end timing EDIT 2011 年 1 月 这是最佳的可用解决方案 其他解决方案 例如performance now 现在应该
  • 为 Android 实现 Firebase 服务器端倒计时器?

    有没有办法在 Android Studio 中实现 Firebase 服务器端倒计时器 我希望计时器位于服务器端 这意味着每当用户打开我的应用程序时 所有用户的计数器始终会在同一时间 我阅读了以下问题的答案this https stacko
  • WPF C# - 计时器倒计时

    如何在用 WPF C 编写的代码中实现以下内容 我有一个 ElementFlow 控件 在其中实现了 SelectionChanged 事件 该事件 根据定义 在控件的项目选择发生更改时触发特定事件 我想要它做的是 启动计时器 如果计时器达
  • 互动倒计时增加?

    我有一个表单 如果没有完成任何鼠标交互 我想在 5 秒后关闭它 但如果完成任何鼠标交互 我希望它关闭countdown 5 seconds每次交互都会增加 5 秒 这是我到目前为止想到的 int countdown 5 System Tim
  • 计时器、事件和垃圾收集:我错过了什么吗?

    考虑以下代码 class TestTimerGC Form public TestTimerGC Button btnGC new Button btnGC Text GC btnGC Click sender e gt GC Collec
  • 如何在Windows上用C语言实现定时器

    如何在 C 中创建一个计时器 时间到期后 我应该能够调用回调函数 平台是windows 有人可以指导我吗 问候 米敦 看一眼SetTimer http msdn microsoft com en us library ms644906 28
  • 如何从 Angular 计时器获取当前时间

    我正在测试角度计时器 http siddii github io angular timer 并且发现自己想知道如何在控制器中获取当前时间 以便将其用于我可能有的任何目的 例如 我想当达到特定的分钟数时 将计时器的字体颜色设置为红色 但我完
  • 定时器时间不作为变量改变?

    这是我的代码 private int V Time 1 try final Timer V Timer final Handler V Handler V Timer new Timer V Handler new Handler Loop
  • 无法将 (Timer!) -> Void 转换为 ((CFRunLoopTimer?) -> Void)! - 将 NSTimer 扩展转换为 Swift 3

    我正在尝试将我在项目中使用的 Pod 转换为 Swift 3 它不是我编写的 但原作者尚未更新它 所以我将它分叉为我自己尝试的任何内容 但 我在尝试将扩展名转换为NSTimer到斯威夫特 3 Cannot convert value of
  • Fortran 内部计时例程,哪个更好? cpu_time 或 system_clock

    当对 FORTRAN 程序进行计时时 我通常只使用命令call cpu time t 然后我偶然发现call system clock count count rate count max 这似乎做了同样的事情 然而 在更加困难的庄园里 我
  • 为什么用java日历解析时会得到错误的月份

    Date fakeDate sdf parse 15 07 2013 11 00 AM Calendar calendar Calendar getInstance calendar setTime fakeDate int current
  • WPF:按钮单击+双击问题

    我必须处理 WPF 应用程序中按钮的单击和双击 并具有不同的反应 不幸的是 在双击时 WPF 会触发两个单击事件和一个双击事件 因此很难处理这种情况 它试图使用计时器来解决它 但没有成功 我希望你能帮助我 我们看一下代码 private v
  • 全局变量上的 Linux 定时器

    我在互联网上找到了下面的代码 我试图了解Linux计时器是如何工作的 无论如何 正如你在下面看到的counter1是全局变量 如果while正在处理它并且计时器关闭并改变 会发生什么counter1的值 我需要在那里加锁吗 timertst
  • xx 秒后恢复到之前的控制器

    我有一个非常简单的应用程序 代码很少 在我的 ViewController 中 我没有执行任何代码 我只添加了一个导航栏 其中包含一个带有视频控制器模式的下一个按钮 我想要实现的是在 ViewController 中按下下一个按钮后 允许用
  • Python 日志记录中的准确时间戳

    我最近一直在构建一个错误日志应用程序 并且正在寻找一种准确地为传入数据添加时间戳的方法 当我说准确时 我的意思是每个时间戳相对于彼此应该是准确的 不需要同步到原子钟或类似的东西 我一直在使用 datetime now 作为第一次尝试 但这并
  • STM32F4 定时器 - 计算周期和预分频,以生成 1 ms 延迟

    我在用STM32F407VGT6 with CubeMX 因此 我从通用定时器开始 但我被预分频值和周期值所困扰 基本上我想每隔一段时间生成一个定时器中断n 其中 n 1 2 3 ms 并执行一些任务 计算周期和预分频值的公式有很多变化 公
  • 创建一个从用户输入开始的 java gui 倒计时器

    这是github link https github com syedsadman16 CountdownTimer 所以我试图创建一个应用程序并将其分为 3 个部分 其中之一是创建一个计时器 该计时器有两个字段 一个用于输入分钟 一个用于
  • 如何知道Matlab中系统命令执行过程中经过的时间?

    我有一个运行系统脚本的 Matlab 代码 该脚本可能会因命令运行而停止 我想知道是否有一种方法可以让程序知道它是否花费了很长时间并执行其他操作 这是代码 tic status cmdout system iperfcmd The prog

随机推荐

  • TEASER-plusplus 安装

    https github com MIT SPARK TEASER plusplus 下载https codeload github com MIT SPARK TEASER plusplus zip v2 0 下载GoogleTest太慢
  • 测试开发概念篇

    目录 前言 几个常见的名词 需求 什么是BUG 测试用例 软件生命周期 开发模型 瀑布模型 螺旋模型 增量和迭代模型 敏捷模型 前言 什么是软件测试 软件测试就是验证产品特性是否满足用户需求 开发软件是为了盈利 必须满足用户才会盈利 测试和
  • LiunxQT开发篇—QT网络编程TCP实现(三)客户端代码

    需要包含三个头文件 include
  • 操作系统——第2章 操作系统用户界面

    目录 第2章 操作系统用户界面 基本概念 系统调用 基本概念 执行过程 第2章 操作系统用户界面 基本概念 一般将计算机系统的用户分为两类 使用和管理计算机应用程序的用户 包括普通用户与管理员用户 程序开发人员 操作系统为第一类用户提供命令
  • 日本半导体行业衰落的原因分析

    90年代初 半导体市场几乎是日本厂商的天下 在排名前十的半导体公司里曾经有6家是日本公司 日本半导体行业衰落的原因分析 那什么导致了今天日本半导体产业的衰落 来看看一些知名调查机构的分析 罪魁祸首1 高层管理人员的傲慢 我们谈过的许多行业观
  • hyperledger fabric Failed to generate orderer genesis block

    当使用configtxgen工具进行生成创世区块和channel tx等时出现错误 具体如下 Generating Orderer Genesis block
  • 解决:Echarts打包后出现白屏

    Echarts打包后出现白屏 原因 这是由于图表的容器节点被移除导致的 即使之后该节点被重新添加 图表所在的节点也已经不存在了 解决方法 利用钩子函数在页面销毁之前将其销毁即可 import onBeforeUnmount from vue
  • QT学习之经典控件源码(如此强大)

    进来好好学习了QT 研究了很多别人的源码 在绘图方面原来QT也是如此强大 源码下载 Files feiyangqingyun myValueControl zip FROM http www cnblogs com feiyangqingy
  • 自动化测试(四):pytest结合allure生成测试报告

    Allure 报告框架的名称 allure noun U 诱惑 魅力 吸引力 文章目录 1 allure下载 2 pytest框架使用allure 3 生成allure报告 1 allure下载 下载前需要先安装JDK 这里可以参考自动化测
  • 图的常用遍历——广度优先遍历和深度优先遍历

    目录 一 遍历图可能遇到的问题 二 图的常用遍历 三 深度优先遍历 DFS 四 广度优先遍历 BFS 一 遍历图可能遇到的问题 图的特点 图中可能存在回路 且图的任一顶点都可能与其它顶点相通 在访问完某个顶点之后可能会沿着某些边又回到了曾经
  • Qt中嵌入web网页的几种实现方式

    1 背景 Web网页的界面交互相比较Qt客户端而言有着比较大的优势 更加的多样化和更高的使用便捷性使得我们即使在客户端中也可以考虑将web网页嵌入到客户端的界面当中 如此便能将web的优势和客户端进行结合 更加丰富客户端的界面及功能 以下将
  • 小程序项目实战(三)

    此文章用于总结自己的知识点 有这个项目有兴趣的伙伴可以点击下方链接购买学习 小程序音乐项目开发实战 大神coderwhy新课 学习视频教程 腾讯课堂课程简介正在上传 重新上传取消https ke qq com course 4162214h
  • mysql数据库里空值变成0_MySQL数据库 null转为0,及一些case when用法

    1 如果为空返回0 select ifnull null 0 应用情景 如果在进行右连接或者左连接时 有一些为空的字段 可以进行这样的处理 select ifnull B submission time A submission time
  • 互联网时代知识付费如何卖课——Python卖课指南

    Python卖课指南 Python作为一门流行且广泛应用的编程语言 吸引了越来越多的人加入学习Python的行列 因此 通过卖课来教授Python编程技巧成为了许多人的选择 在这篇博客中 我们将详细介绍如何成功地卖出Python课程 以下是
  • 关于STM32WB55一些测评评价

    关于STM32WB55一些测评评价 部分内容转载自http bbs eeworld com cn thread 1076335 1 1 html 简单介绍下 STM32WB系支持无线功能的双核 MCU 内嵌 工作频率为 64 MHz 的 A
  • Docker-compose配置springboot项目

    Docker compose从入门到入土 准备环境 一 在springboot添加docker插件 1 安装docker插件 2 在pom xml中添加配置 二 在项目下创建docker文件 1 Dockerfile 2 docker co
  • java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.hbase.util.ByteStringer

    java lang NoClassDefFoundError Could not initialize class org apache hadoop hbase util ByteStringer java lang NoClassDef
  • 【Qt】样式表的使用——设置样式的方法

    Qt 之 样式表的使用 设置样式的方法 一 简述 二 开始总结 1 先谈谈我们设置样式有几种方法 a 最简单 也是最直接 在Qt Designer 中添加样式 b 在代码中添加样式 c 将样式写在文件中 通过读取文件的方式设置样式 2 再谈
  • 在jquery中使用$.each循环数组展示

    定义和用法 jQuery each 函数用于遍历指定的对象和数组 语法 each object callback 参数 描述 object Object类型 指定需要遍历的对象或数组 callback Function类型 指定的用于循环执
  • NRF51822裸机TIMER学习笔记

    外设TIMER 时钟介绍 HFCLK 又称之为高速时钟 是 nRF5X SOC 的主时钟 一般是 16MHZ HFCLK 时钟有 2 个来源 一个是内部 RC 振荡器 RC Oscillator 另一个是外部石英振荡器 Crystal Os