zoukankan      html  css  js  c++  java
  • [nRF51822] 10、基础实验代码解析大全 · 实验15

    一、实验内容:

      配置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 - 物联网&普适计算实践者
    e-mail:beautifulzzzz@qq.com 
    i-blog:blog.beautifulzzzz.com 

  • 相关阅读:
    PTA(Basic Level)1048.数字加密
    PTA(Basic Level)1037.在霍格沃茨找零钱
    PTA(Basic Level)1030.完美数列
    PTA(Basic Level)1047.编程团体赛
    PTA(Basic Level)1087.有多少不同的值
    PTA(Basic Level)1077.互评成绩计算
    PTA(Basic Level)1027.打印沙漏
    PTA(Basic Level)1029.旧键盘
    记录一次排查挖矿:快速跟踪一个进程
    JVM性能、多线程排查常用命令
  • 原文地址:https://www.cnblogs.com/zjutlitao/p/5753994.html
Copyright © 2011-2022 走看看