开发者社区> 史迪奇2号> 正文

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

简介:
+关注继续查看


 

 

一、实验内容:

  配置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,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第二章:FPGA验证流程与远程实验平台
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第二章:FPGA验证流程与远程实验平台
31 0
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第三章:三态门和多路器
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第三章:三态门和多路器
28 0
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第五章:触发器和寄存器
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第五章:触发器和寄存器
37 0
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第四章:七段译码器
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第四章:七段译码器
41 0
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第六章:移位寄存器
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第六章:移位寄存器
60 0
xilinx小实验——vivado纯逻辑编程第一个demo
xilinx小实验——vivado纯逻辑编程第一个demo
97 0
altera小实验——第一个demo指导书
altera小实验——第一个demo指导书
26 0
蓝桥杯之单片机学习(二十八)——详解A/D、D/A、PCF8591、AD与DA的综合使用(附官方驱动的一个坑)
蓝桥杯之单片机学习(二十八)——详解A/D、D/A、PCF8591、AD与DA的综合使用(附官方驱动的一个坑)
158 0
ESP8266网络通信实验之经典方法(上)
ESP8266网络通信实验之经典方法
106 0
ESP8266网络通信实验之经典方法(下)
ESP8266网络通信实验之经典方法
102 0
GPIO输出端口(简介+结构+配置+电路+软件设计原理)
GPIO输出端口(简介+结构+配置+电路+软件设计原理)
101 0
STM32:TIM输入捕获硬件部分(内含:1.输入捕获简介+2.频率测量+3.通用/高级定时器的输入捕获电路分析(重点)+4.主从触发模式+5.输入捕获基本结构(重点)+6.PWM基本结构)
STM32:TIM输入捕获硬件部分(内含:1.输入捕获简介+2.频率测量+3.通用/高级定时器的输入捕获电路分析(重点)+4.主从触发模式+5.输入捕获基本结构(重点)+6.PWM基本结构)
111 0
CCNP 必备:Linux 网络及 0SI7 层模型深入讲解(三)|学习笔记
快速学习 CCNP 必备:Linux 网络及 0SI7 层模型深入讲解
64 0
CCNP必备:Linux网络及0SI7层模型深入讲解(二)|学习笔记
快速学习CCNP必备:Linux网络及0SI7层模型深入讲解
48 0
CCNP必备:Linux网络及0SI7层模型深入讲解(一)|学习笔记
快速学习CCNP必备:Linux网络及0SI7层模型深入讲解
74 0
+关注
史迪奇2号
文章
问答
视频
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载