[nRF51822] 10、基础实验代码解析大全 · 实验15 - RTC
2016-08-09 19:07
537 查看
一、实验内容:
配置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:
RTC初始化:
RTC中断回调函数:
@nRF51822基础实验系列:
[nRF51822] 7、基础实验代码解析大全(前十)
[nRF51822] 8、基础实验代码解析大全 · 实验11 - PPI
[nRF51822] 9、基础实验代码解析大全 · 实验12 - ADC
@beautifulzzzz - 物联网&普适计算实践者
e-mail:beautifulzzzz@qq.com
i-blog:blog.beautifulzzzz.com
配置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, 0, 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] 11、基础实验代码解析大全 · 实验16 - 内部FLASH读写
- [nRF51822] 9、基础实验代码解析大全 · 实验12 - ADC
- [nRF51822] 12、基础实验代码解析大全 · 实验19 - PWM
- [nRF51822] 8、基础实验代码解析大全 · 实验11 - PPI
- [nRF51822] 7、基础实验代码解析大全(前十)
- 代码大全学习-15-基础数据类型(Fundamental Data Types)
- Android的基础学习:采用Pull方式解析XML文件(代码)
- 执行代码[WebKit] JavaScriptCore解析--基础篇(二)解释器基础与JSC核心组件
- mysql_errno返回值的意义 mysql_errno()代码解析大全
- mysql_errno返回值的意义 mysql_errno()代码解析大全
- 黑马程序员_java基础笔记(15)...银行业务调度系统_编码思路及代码
- QX项目实战-10.基础架构实验一:传递消息、序列化对象和数据库封装
- 每天进步一点点------基础实验_10_移位寄存器 :常见普通移位寄存器
- asp.net基础开发中常用代码大全
- STL基础学习(STL中的容器解析、代码展示、例题分析,帮助你学STL)
- STL基础学习(STL中的容器解析、代码展示、例题分析,帮助你学STL)
- Win API 10基础控件大全
- JME基础教程代码分析10高度图
- 网页制作HTML基础标签代码大全
- 超级实用且不花哨的js代码大全 (基础)