nrf51822裸机教程-RTC
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的更多相关文章
- nrf51822裸机教程-IIC
关于IIC总线的核心有以下几点: :时钟线高电平期间必须保持数据线不变. :时钟线低电平期间可以改变数据. :时钟线和数据线上都要接上拉电阻,以使总线不工作时,两根线的电平都处于高电平状态. :每个传 ...
- nrf51822裸机教程-UART
art硬件模块通常都有内置的硬件接收buff,比如51822的硬件uart模块图如下 因为通常接收到uart数据时都会做一些处理.比如保存到数据,或者对数据做一些判断之类的. 如果uart的波特率设置 ...
- nrf51822裸机教程-PWM
先简单介绍一下PWM的原理. 原理很简单. 假设COUNTER是个从0开始递增的计数器. 我们设置两个值 counter0 和counter1 在 COUNTER 计数到counter0的值时候翻转 ...
- nrf51822裸机教程-PPI
Programmable Peripheral Interconnect即可编程外设互联 系统,该模块是51822 提供的一个特性. 目的是为了让51822 的外围模块可以不通过处理器而自动相互作用. ...
- nrf51822裸机教程-GPIOTE
GPIO通常都会具有中断功能,上一讲的GPIO中并没有涉及到中断的相关寄存器. 51822将GPIO的中断相关做成了一个单独的模块GPIOTE,这个模块不仅提供了GPIO的中断功能,同时提供了 通过t ...
- nrf51822裸机教程-SPI(主)
关于SPI总线的介绍这里就不细说了,网上有很多介绍SPI总线时序的. SPI总线的本质就是一个环形总线结构,在时钟驱动下两个双向移位寄存器进行数据交换. 所以SPI总线的特色就是:传输一字节数据的同时 ...
- nrf51822裸机教程-硬件timer
该讲介绍51822的Timer/Counter模块工作在timer模式下(定时器模式,还可以工作为计数器模式) 如何操作 51822的Timer/Counter结构如下图所示 Timer模块从PCLK ...
- nrf51822裸机教程-GPIO
首先看看一下相关的寄存器说明 Out寄存器 输出设置寄存器 每个比特按顺序对应每个引脚,bit0对应的就是 引脚0 该寄存器用来设置 引脚作为输出的时候的 输出电平为高还是低. 与输出设置相关的 还有 ...
- [nRF51822] 10、基础实验代码解析大全 · 实验15 - RTC
一.实验内容: 配置NRF51822 的RTC0 的TICK 频率为8Hz,COMPARE0 匹配事件触发周期为3 秒,并使能了TICK 和COMPARE0 中断. TICK 中断中驱动指示灯D1 翻 ...
随机推荐
- 字符编码GB2312、GBK、UTF-8的区别
本文来自:javaeye网站 UTF8是国际编码,它的通用性比较好,外国人也可以浏览论坛 GBK是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBK大~ 提示:如果您的网站客户群体主要是面 ...
- js:语言精髓笔记5----语言分类
计算模型:源于对计算过程的不同认识: 1.基于不同计算模型一般分为://教科书的一般分类 命令式语言: 函数式语言: 逻辑式语言: 面向对象程序设计语言: 2.基于程序本质分类: //编程的经典法则 ...
- ZOJ 3157 Weapon
题目传送门 题意:就是CF round# 329 B 的升级版,要求出相交点的个数 分析:逆序数用树状数组维护,求出非逆序数,然后所有情况(n * (n - 1)) / 2减之就是逆序数个数. #in ...
- ural 1155. Troubleduons
1155. Troubleduons Time limit: 0.5 secondMemory limit: 64 MB Archangel of the Science is reporting:“ ...
- emacs auto-complete
安装的是autocomplete http://cx4a.org/software/auto-complete/ 是bz2格式压缩的 下载后 在终端输入命令 tar -xjvf auto-compl ...
- BZOJ3821 : 玄学
对操作建立线段树,每个节点维护一个有序的操作表,表示用$[l,r]$的操作在每段区间上的作用效果. 对于一个线段树节点,合并左右儿子信息只在该区间刚刚被填满时进行,利用归并排序,时间复杂度为$O(n\ ...
- winform学习之----Directory
Directory 文件夹目录 几个方法: CreateDirectory,delete,move,getfiles,exists 操作文件:用File 操作路径:用path 操作文件夹:Direct ...
- python 操作mysql
安装模块: #pip install .... MySQLdb(2.x) pymysql(3.x) import MySQLdb as sql con = sql.connect( host = &q ...
- hdu 3415
单调队列即保持队列中的元素单调递增(或递减)的这样一个队列,可以从两头删除,只能从队尾插入.单调队列的具体作用在于,由于保持队列中的元素满足单调性,对于上述问题中的每个j,可以用O(1)的时间找到对应 ...
- [转]发送邮件提示“551 User not local; please try ”错误的原因及解决办法
本文转自:http://www.biglee.cn/blog/article.asp?id=204 一网站要嵌入一个客户反馈系统.为了方便收集反馈信息,并能及时查看信息,我决定以将反馈内容提交到邮箱. ...