[nRF51822] 10、基础实验代码解析大全 · 实验15 - RTC

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介:


 

 

一、实验内容:

  配置NRF51822 的RTC0 的TICK 频率为8Hz,COMPARE0 匹配事件触发周期为3 秒,并使能了TICK 和COMPARE0 中断。

  • TICK 中断中驱动指示灯D1 翻转状态, 即指示灯D1 以8Hz 的速率翻转状态
  • COMPARE0 中断中点亮指示灯D2

 

二、nRF51822的内部RTC结构:

  NRF51822 有两个RTC 时钟:RTC0,RTC1。两个RTC 均为24 位,使用LFCLK 低频时钟,并带有12 位分频器,可产生TICK、compare 和溢出事件。RTC 原理框图如下图所示:

 

三、计数器递增频率的计算:

                       fRTC[KHz]=32.768/(PRESCALER+1)

  由上式可以看出,设置递增频率也就是设置相应的PRESCALER,如设置递增频率为8Hz。那么,PRESCALER 值如下:

    PRESCALER = round(四舍五入) (32.768 kHz / 8 Hz) – 1 = 4095

  此时,递增周期是:125ms。

 

四、核心源码解析:

main:

复制代码
 1 int main(void)
 2 {
 3     leds_config();
 4     lfclk_config();
 5     rtc_config();
 6 
 7     while (true)
 8     {
 9         __SEV();
10         __WFE();
11         __WFE();
12     }
13 }
复制代码

 

RTC初始化:

复制代码
 1 static void rtc_config(void)
 2 {
 3     uint32_t err_code;
 4 
 5     //Initialize RTC instance
 6     err_code = nrf_drv_rtc_init(&rtc, NULL, rtc_handler);//初始化RTC
 7     APP_ERROR_CHECK(err_code);
 8 
 9     //Enable tick event & interrupt
10     nrf_drv_rtc_tick_enable(&rtc, true);//使能tick事件
11 
12     //Set compare channel to trigger interrupt after COMPARE_COUNTERTIME seconds
13     err_code = nrf_drv_rtc_cc_set(&rtc, 0, COMPARE_COUNTERTIME * RTC0_CONFIG_FREQUENCY, true);
14     APP_ERROR_CHECK(err_code);
15 
16     //Power on RTC instance
17     nrf_drv_rtc_enable(&rtc);
18 }
复制代码

 

RTC中断回调函数:

复制代码
 1 /** @brief: Function for handling the RTC0 interrupts.
 2  * Triggered on TICK and COMPARE0 match.
 3  */
 4 static void rtc_handler(nrf_drv_rtc_int_type_t int_type)
 5 {
 6     if (int_type == NRF_DRV_RTC_INT_COMPARE0)
 7     {
 8         nrf_gpio_pin_toggle(COMPARE_EVENT_OUTPUT);
 9     }
10     else if (int_type == NRF_DRV_RTC_INT_TICK)
11     {
12         nrf_gpio_pin_toggle(TICK_EVENT_OUTPUT);
13     }
14 }
复制代码

 

@nRF51822基础实验系列:


[nRF51822] 7、基础实验代码解析大全(前十)

[nRF51822] 8、基础实验代码解析大全 · 实验11 - PPI

[nRF51822] 9、基础实验代码解析大全 · 实验12 - ADC


本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/5753994.html,如需转载请自行联系原作者


相关文章
|
11天前
|
存储 数据管理 数据库
CRUD操作实战:从理论到代码实现的全面解析
【7月更文挑战第4天】在软件开发领域,CRUD代表了数据管理的四个基本操作:创建(Create)、读取(Read)、更新(Update)和删除(Delete)。这四个操作构成了大多数应用程序数据交互的核心。本文将深入讲解CRUD概念,并通过一个简单的代码示例,展示如何在实际项目中实现这些操作。我们将使用Python语言结合SQLite数据库来演示,因为它们的轻量级特性和易用性非常适合教学目的。
35 2
|
11天前
|
文字识别 Java Python
文本,文识08图片保存()上,最方便在于整体生成代码,serivce及实体类,base64编码保存图片文件,调用flask实现内部ocr接口,通过paddleocr识别,解析结果,base64转图片
文本,文识08图片保存()上,最方便在于整体生成代码,serivce及实体类,base64编码保存图片文件,调用flask实现内部ocr接口,通过paddleocr识别,解析结果,base64转图片
|
21天前
|
机器学习/深度学习 数据采集 算法
特征工程与数据预处理全解析:基础技术和代码示例
在机器学习和数据科学的世界里,数据的质量是建模成功与否的关键所在。这就是特征工程和数据预处理发挥作用的地方。本文总结的这些关键步骤可以显著提高模型的性能,获得更准确的预测,我们将深入研究处理异常值、缺失值、编码、特征缩放和特征提取的各种技术。
19 0
|
26天前
结构体\判断日期是否合法(代码分步解析)
结构体\判断日期是否合法(代码分步解析)
12 1
|
17天前
|
C语言
C语言实现猜数字游戏:代码详解与函数解析
C语言实现猜数字游戏:代码详解与函数解析
12 0
|
18天前
|
存储 安全 Java
Java文件操作,让你的代码更“有型”!读写、复制、删除全解析!
【6月更文挑战第27天】在Java中进行文件操作是程序基础功能之一,涉及读写、复制和删除。使用`FileReader/FileWriter`进行文本文件的读写,如示例所示,通过`try-with-resources`保证资源释放。文件复制利用`FileInputStream/FileOutputStream`,而删除文件则依赖`File`的`delete()`方法,确保条件安全执行。这些标准库类提供了高效且健壮的文件管理能力。
|
25天前
|
存储 算法 Java
面试高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 二分 + 哈希表 + 堆 + 优先队列 合集
面试高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 二分 + 哈希表 + 堆 + 优先队列 合集
|
26天前
|
XML Java 数据格式
深度解析 Spring 源码:从 BeanDefinition 源码探索 Bean 的本质
深度解析 Spring 源码:从 BeanDefinition 源码探索 Bean 的本质
28 3
|
11天前
|
存储 安全 Java
深度长文解析SpringWebFlux响应式框架15个核心组件源码
以上是Spring WebFlux 框架核心组件的全部介绍了,希望可以帮助你全面深入的理解 WebFlux的原理,关注【威哥爱编程】,主页里可查看V哥每天更新的原创技术内容,让我们一起成长。
|
12天前
|
关系型数据库 分布式数据库 数据库
PolarDB-X源码解析:揭秘分布式事务处理
【7月更文挑战第3天】**PolarDB-X源码解析:揭秘分布式事务处理** PolarDB-X,应对大规模分布式事务挑战,基于2PC协议确保ACID特性。通过预提交和提交阶段保证原子性与一致性,使用一致性快照隔离和乐观锁减少冲突,结合故障恢复机制确保高可用。源码中的事务管理逻辑展现了优化的分布式事务处理流程,为开发者提供了洞察分布式数据库核心技术的窗口。随着开源社区的发展,更多创新实践将促进数据库技术进步。
18 3

推荐镜像

更多