一、实验内容:

  配置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:

 int main(void)
{
leds_config();
lfclk_config();
rtc_config(); while (true)
{
__SEV();
__WFE();
__WFE();
}
}

RTC初始化:

 static void rtc_config(void)
{
uint32_t err_code; //Initialize RTC instance
err_code = nrf_drv_rtc_init(&rtc, NULL, rtc_handler);//初始化RTC
APP_ERROR_CHECK(err_code); //Enable tick event & interrupt
nrf_drv_rtc_tick_enable(&rtc, true);//使能tick事件

//Set compare channel to trigger interrupt after COMPARE_COUNTERTIME seconds
err_code = nrf_drv_rtc_cc_set(&rtc, , COMPARE_COUNTERTIME * RTC0_CONFIG_FREQUENCY, true);
APP_ERROR_CHECK(err_code); //Power on RTC instance
nrf_drv_rtc_enable(&rtc);
}

RTC中断回调函数:

 /** @brief: Function for handling the RTC0 interrupts.
* Triggered on TICK and COMPARE0 match.
*/
static void rtc_handler(nrf_drv_rtc_int_type_t int_type)
{
if (int_type == NRF_DRV_RTC_INT_COMPARE0)
{
nrf_gpio_pin_toggle(COMPARE_EVENT_OUTPUT);
}
else if (int_type == NRF_DRV_RTC_INT_TICK)
{
nrf_gpio_pin_toggle(TICK_EVENT_OUTPUT);
}
}

@nRF51822基础实验系列:


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

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

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


@beautifulzzzz - 物联网&普适计算实践者
e-mail:beautifulzzzz@qq.com 
i-blog:blog.beautifulzzzz.com

[nRF51822] 10、基础实验代码解析大全 · 实验15 - RTC的更多相关文章

  1. [nRF51822] 12、基础实验代码解析大全 · 实验19 - PWM

    一.PWM概述: PWM(Pulse Width Modulation):脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形. PWM 的几个基本概念: 1) 占空比:占空比是指 ...

  2. [nRF51822] 11、基础实验代码解析大全 · 实验16 - 内部FLASH读写

     一.实验内容: 通过串口发送单个字符到NRF51822,NRF51822 接收到字符后将其写入到FLASH 的最后一页,之后将其读出并通过串口打印出数据. 二.nRF51822芯片内部flash知识 ...

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

    一.本实验ADC 配置 分辨率:10 位. 输入通道:5,即使用输入通道AIN5 检测电位器的电压. ADC 基准电压:1.2V. 二.NRF51822 ADC 管脚分布 NRF51822 的ADC ...

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

    前一篇分析了前十个基础实验的代码,从这里开始分析后十个~ 一.PPI原理: PPI(Programmable Peripheral Interconnect),中文翻译为可编程外设互连. 在nRF51 ...

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

    实验01 - GPIO输出控制LED 引脚输出配置:nrf_gpio_cfg_output(LED_1); 引脚输出置高:nrf_gpio_pin_set(LED_1); 引脚电平转换:nrf_gpi ...

  6. 基础Gan代码解析

    initializer总结: #f.constant_initializer(value) 将变量初始化为给定的常量,初始化一切所提供的值. #tf.random_normal_initializer ...

  7. MYSQL常见出错mysql_errno()代码解析

    如题,今天遇到怎么一个问题, 在理论上代码是不会有问题的,但是还是报了如上的错误,把sql打印出來放到DB中却可以正常执行.真是郁闷,在百度里面 渡 了很久没有相关的解释,到时找到几个没有人回复的 & ...

  8. 【原创】大数据基础之Spark(4)RDD原理及代码解析

    一 简介 spark核心是RDD,官方文档地址:https://spark.apache.org/docs/latest/rdd-programming-guide.html#resilient-di ...

  9. 【原创】大数据基础之Spark(5)Shuffle实现原理及代码解析

    一 简介 Shuffle,简而言之,就是对数据进行重新分区,其中会涉及大量的网络io和磁盘io,为什么需要shuffle,以词频统计reduceByKey过程为例, serverA:partition ...

随机推荐

  1. EF for MySql 开发配置手册

    执行MySQL安装程序,安装MySQL For Visual Studio和Connector/NET 执行命令: Install-Package EntityFramework Install-Pa ...

  2. 【Hibernate框架】关联映射(一对多,多对一)

    根据我们的总结计划,上篇文章我们总结了有关于一对一映射相关知识,接下来,我们进行下一个阶段,一对多.多对一映射相关知识. 场景设定: 国家规定,一个人只能在一个公司上班,一个公司可以拥有很多员工.我们 ...

  3. linux进程

    E: 进程------->进程控制块PCB   结构体 进程控制块中,存放的是指针数组------>是已经打开的文件的结构体的指针 文件描述符实际上就是指针数组的索引 e1: ps命令(进 ...

  4. ASP.NET中使用UpdatePanel实现局部异步刷新方法和攻略(转)

    asp.net UpdatePanel实现异步局部刷新 如有雷同,不胜荣欣,若转载,请注明 鉴于最近项目需要,研究了一下UpdatePanel控件的使用方法,现总结如下,可能有很多地方不足,还望大家斧 ...

  5. linux 高性能服务器编程

    1. 高性能定时器:时间轮,时间堆 (處理超時時間,如nginx使用紅黑樹,找出最可能超時的事件) 2. 高性能服务器程序框架:(nginx 使用的是基於事件模型,epoll,不阻塞,異步處理) 两种 ...

  6. Android四种点击事件和五中存储方式

    Android点击事件的四种实现方式 1.内部类实现onClickListenter接口 bt_login.setOnClickListener(new MyListener()); class My ...

  7. WebApi防重复提交方案

    使用Redis锁机制. 偽代碼: void post { var key = GetKey(); var value = Redis.Incre(key); if(value == 1) { var ...

  8. ASP.NET图形验证码的生成

    效果: 调用方法: int[] r = QAPI.VerifImage.RandomList();//取得随机数种子列 );//产生验证码字符 pictureBox1.Image = QAPI.Ver ...

  9. postman 断言解析

    最近在学习postman官方文档, 顺势翻译出来,以供学习! postman断言是JavaScript语言编写的,在postman客户端指定区域编写即可. 断言会在请求返回之后,运行,并根据断言的pa ...

  10. SecurityContextHolder.getContext().getAuthentication() return null

    <security:http> <security:intercept-url pattern="/web/**" access="IS_AUTHENT ...