RTC0被协议栈使用了。所以在跑蓝牙程序的情况下。RTC0不能使用。

RTC相关寄存器如下:

EVTEN,EVTENSET,EVTENCLR.

这三个寄存器用来设置是否使能某个事件。(TICK,OVRFLW,COMPARE0-3 事件)

INTEN,INTENSET,INTENCLR.

这三个寄存器用来设置某个事件发生时是否触发RTC中断。

PRESCALER

该寄存器用来设置RTC的时钟分频

分频公式:fRTC [kHz] = 32.768 / (PRESCALER + 1 )

      

RTC原理跟TIMER基本一致。所以程序的设置也是基本一样

比如需要设置RTC的每个时钟滴答为10ms,即内部counter计数一次为10ms事件。只需设置 PRESCALER = 327;  那么要做一个1s的定时,只需选定一个compare寄存器如compare[0]设置为100就可以了。

关于事件,RTC除了有compare0-3事件(COUNTER计数值与cc[0-3]中的值相等时产生),还存在一个OVRFLW事件,在COUNTER溢出是产生。以及一个TICK事件,即时钟滴答事件。如果使能了这个事件(EVTEN中使能),那么在每个时钟滴答(即COUNTER计数一次)都会产生这个事件。比如,上面设置PRESCALER = 327,则每10ms,COUNTER的技术值就会加1,同时TICK事件也会触发。

RTC的一些task,如clear,stop,start存在us级和ns级的延迟,使用RTC来计时应该考虑这些可能的延迟。具体的延迟事件参考用户手册中RTC部分给的说明。

实际使用RTC时,如果是跑的裸板程序的话,是需要自己主动打开LFCLK.

51822中的 在上电后 会自动启动HFCLK RC oscillator提供给系统所需的时钟。当系统的需要由HFCLK crystal oscillator来提供时钟时,需要用户主动开启HFCLK crystal oscillator。

而对于LFCLK,上电后默认是不开启的。RTC的时钟源是由32768分频得到的。所以在写RTC裸机程序的时候需要主动设置LFCLK的时钟源,并启动LFCLK。

main.c代码细节。

int main(void){

    nrf_gpio_cfg_output(LED);
    nrf_gpio_pin_set(LED);

    //选择LFCLK时钟源为32.768 kHz crystal oscillator
    //并启动LFCLK,等待直到其运行了
    NRF_CLOCK->LFCLKSRC = ;
    NRF_CLOCK->TASKS_LFCLKSTART = ;
    );

    //分频,使每个counter为10ms
    RTC->PRESCALER = ;
    //使能compare0事件
    RTC->EVTENSET = <<;
    //设置compare0事件产生时触发RTC中断。
    RTC->INTENSET = <<;
    RTC->CC[] = ;    //1s定时
    RTC->TASKS_START = ;//启动RTC

    //设置NVIC的RTC中断寄存器,开启RTC中断
    NVIC_SetPriority(RTC1_IRQn, );
    NVIC_ClearPendingIRQ(RTC1_IRQn);
    NVIC_EnableIRQ(RTC1_IRQn);

    );

    ;
}

void RTC1_IRQHandler(void){
    //注意这里需要清除事件。
    RTC->EVENTS_COMPARE[] = ;
    nrf_gpio_pin_toggle(LED);
    //注意这里要主动清0,让其重新计数。
    RTC->TASKS_CLEAR = ;
}

nrf51822裸机教程-RTC的更多相关文章

  1. nrf51822裸机教程-IIC

    关于IIC总线的核心有以下几点: :时钟线高电平期间必须保持数据线不变. :时钟线低电平期间可以改变数据. :时钟线和数据线上都要接上拉电阻,以使总线不工作时,两根线的电平都处于高电平状态. :每个传 ...

  2. nrf51822裸机教程-UART

    art硬件模块通常都有内置的硬件接收buff,比如51822的硬件uart模块图如下 因为通常接收到uart数据时都会做一些处理.比如保存到数据,或者对数据做一些判断之类的. 如果uart的波特率设置 ...

  3. nrf51822裸机教程-PWM

    先简单介绍一下PWM的原理. 原理很简单. 假设COUNTER是个从0开始递增的计数器.  我们设置两个值 counter0 和counter1 在 COUNTER 计数到counter0的值时候翻转 ...

  4. nrf51822裸机教程-PPI

    Programmable Peripheral Interconnect即可编程外设互联 系统,该模块是51822 提供的一个特性. 目的是为了让51822 的外围模块可以不通过处理器而自动相互作用. ...

  5. nrf51822裸机教程-GPIOTE

    GPIO通常都会具有中断功能,上一讲的GPIO中并没有涉及到中断的相关寄存器. 51822将GPIO的中断相关做成了一个单独的模块GPIOTE,这个模块不仅提供了GPIO的中断功能,同时提供了 通过t ...

  6. nrf51822裸机教程-SPI(主)

    关于SPI总线的介绍这里就不细说了,网上有很多介绍SPI总线时序的. SPI总线的本质就是一个环形总线结构,在时钟驱动下两个双向移位寄存器进行数据交换. 所以SPI总线的特色就是:传输一字节数据的同时 ...

  7. nrf51822裸机教程-硬件timer

    该讲介绍51822的Timer/Counter模块工作在timer模式下(定时器模式,还可以工作为计数器模式) 如何操作 51822的Timer/Counter结构如下图所示 Timer模块从PCLK ...

  8. nrf51822裸机教程-GPIO

    首先看看一下相关的寄存器说明 Out寄存器 输出设置寄存器 每个比特按顺序对应每个引脚,bit0对应的就是 引脚0 该寄存器用来设置 引脚作为输出的时候的 输出电平为高还是低. 与输出设置相关的 还有 ...

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

    一.实验内容: 配置NRF51822 的RTC0 的TICK 频率为8Hz,COMPARE0 匹配事件触发周期为3 秒,并使能了TICK 和COMPARE0 中断. TICK 中断中驱动指示灯D1 翻 ...

随机推荐

  1. CodeForces 222B Cosmic Tables

    Cosmic Tables Time Limit:3000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Subm ...

  2. 克隆或拷贝的VMware虚拟机IP问题解决

    克隆的虚拟机或是将虚拟机通过快照回到过去某个状态后,会上不了网. 如果不想看细节,可直接跳到小结部分. 问题描述: 运行service network restart时 Device eth0 doe ...

  3. HDU3251 Being a Hero(最小割)

    题目大概一个国家n个城市由m条单向边相连,摧毁每条边都有一个费用.现在你可以选择所给的f个城市中的若干个,每个城市选择后都有一定的价值,但首都1号城市必须到达不了你选择的城市,因为你可能需要摧毁一些边 ...

  4. ssh org.springframework.beans.TypeMismatchException

    这个问题我搜了一上午都木有解决 后来找到一个英文网站 It seems that some other bean (one that is not shown) has a property of t ...

  5. BZOJ4295 : [PA2015]Hazard

    第i轮,a[i%n]+=b[i%m]. 枚举i,计算它变为0的次数,假设为t,那么有t=i+kn. 对于所有的i和k,(i+kn)%m形成了若干个总长度为m的环. 对于每个a[i],先在环中求出一轮最 ...

  6. PHPUnit在Windows下的配置及使用

    由于我们项目涉及到php,因此需要对php代码进行单元测试.经过一番了解,决定用PHPUnit来测试php.PHPUnit花了不少时间摸索如何配置PHPUnit,看官网的文档也是一把泪.但知道怎么配置 ...

  7. QMessageBox 使用方法

    在Qt中经常需要弹出窗口,QMessageBox可以实现此功能,一共有三种窗口,information, question, 和 warning,critical, about分别对应感叹号,问号和叉 ...

  8. css样式表:样式分类,选择器。样式属性,格式与布局

    样式表分类: 1.内联样式表, 和html联合显示,例:<p style="font-size:14px;">内联样式表</p> 2.内嵌样式表 作为一个独 ...

  9. [转] - QPixmap全局变量载入多张图片失效问题

    我想qt 中QPixmap这个类大家都很熟悉,它可以很简单的在标签上贴图:例如: QPixmap p; p.load("1.png"): label->setPixmap(p ...

  10. eval(gzinflate(base64_decode N层,自动解密

    <?php header("Content-type: text/html; charset=utf-8"); $decode = 'DZdFEsRWEkT3vojt0EJM ...