应用程序篇第五节rtc的使用_第1页
应用程序篇第五节rtc的使用_第2页
应用程序篇第五节rtc的使用_第3页
应用程序篇第五节rtc的使用_第4页
应用程序篇第五节rtc的使用_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

作者 青:淘宝店:技术群硬件平台:青云QY-nRF51822开发rtcn51822虽然是是otx0内核,但是为了节省内部资源,把唤醒中断和滴答时钟ytik给省略掉了,如下图所示。那么为了精确定时,我们就直接采用定时器进行定时了。nRF51822时,你startup文件systick中断,但是本人编写了systick函数证明nRF51822的系统滴答无法开启,硬件准备:如下图所示:QY-nRF51822开发板上,通过管脚P0.27和管P0.26连接低速外部晶振,晶振大小为32.768KHZ。图中SB2和SB3,SB4,SB5分别为外设点,当不软件准备:库文件。打开user文件夹中的RTC如上图所示:只需要自己编写红色框框里的两个文件就OK了,因为采用子函数的方式其中led.c在控制LED灯的时候已经写好,现在我们就来讨论下如何编写RTC.C这个驱动子文件。RTC.C文件主要是要起到两个作用:第一:初始化使能RTC相关参数。第二:设RTC匹配和比较中断。完成这两个功能够就可以在main.c文件中直接调用本驱动了。下面我们就结合寄存器来详细分析下RTC的设置:上图为nrf518222RTC的基本RTC时钟结构,RTC在广义的MCU方面的定义就是一个独立的定时器,因此其寄存器的设置应该和time定时器的设置相似,这个从nrf518222的手册上寄存器定义可以很明显的看出来。回忆一下之前time定时器的内容,time是高速时钟HFCLK提供时钟,RTCLFCLK16MHZ时钟断开的时候才能够运行RTC.下面我们来配置时钟源,设置代码如下/**LFCLK晶振功能void03.NRF_CLOCK->LFCLKSRC=(CLOCK_LFCLKSRC_SRC_XtalCLOCK_LFCLKSRC_SRC_Pos);//设置时钟NRF_CLOCK- 0;//16MNRF_CLOCK- 1;//32Kwhile(NRF_CLOCK->EVENTS_LFCLKSTARTED=={//Do NRF_CLOCK->EVENTS_LFCLKSTARTED=12.上面红色框框的几个寄存器就是代码里定义的寄存器。EVENTS_LFCLKSTARTED高速时钟必须先关掉,因此。TASKS_LFCLKSTART开低速时钟时钟源的选择#defineCLOCK_LFCLKSRC_SRC_RC0UL*!<32KiHzRC时钟#defineCLOCK_LFCLKSRC_SRC_Xtal1UL*!<32KiHz振荡.l#defineCLOCK_LFCLKSRC_SRC_Synth2UL)*!<32KiHzHFCLK系统时钟产生我们选择外部低速时钟振荡作为时钟源。这里就把低速时钟源设置完成了。接下来进行RTC的配置,我们实验的要求是实8HZ的计数频率,也就是计数时间125ms控制led翻转一次,翻转24次接近3000ms,也就是3s的时候进行模拟比较,控制另一个led灯点亮。这个是下面代码设置要用的几个寄存器,解释很清楚,关键是搞清楚怎么用,我们之间对着代码段分析:void17. //RTC中断NRF_RTC0- = //12位预分频器的计数频率(32768/(预分频器+1)//当RTC停止时候才能设//prescalertoaTICKofNRF_RTC0- //置比较寄存器Compare0afterapproxCOMPARE_COUNTERTIME >EVTENSET = >INTENSET ===31.上面一段代码的编写严格按照了寄存器要求进行,首先是使 嵌套中断,这NVIC是cortexm系列处理器通用的中断方式然后我们设计RTC的计数频率,根据手册给出的根据这个,下面举两个例子代入PRESCALER=round(32.768kHz/100Hz)-1=RTC的时钟频率fRTC=99.9Hz10009.576μs 代入PRESCALER=round(32.768kHz/8Hz)–1=RTCfRTC8Hz125ms一个计数周期PRESCALER寄存器设置RTC预分频计数器,这个寄存器是我们需要设置的,在代NRF_RTC0- = #defineLFCLK_FREQUENCY (32768UL)//#define 这个参数是更加上面举的例子2代入PRESCALER=round(32.768kHz/8Hz)–1=4095来设置这个RTC预分频计数器设置CC[0]寄存器的值为24。设置完成后,使能计数器中断和比较中断NRF_RTC0- =NRF_RTC0- =//EnableCOMPARE0eventandCOMPARE0interrupt:启用比较匹配和比较匹配中NRF_RTC0- NRF_RTC0- 并且设置中断功能,中断做的内容就比较简单了,判断中断发生后翻转 灯void41.((NRF_RTC0->INTENSET&RTC_INTENSET_TICK_Msk)!= NRF_RTC0->EVENTS_TICK= PARE[0]!=0)((NRF_RTC0->INTENSET PARE0_Msk)!= NRF_RTC0- PARE[0]= 55.那么主函数就是十分的简单了,直接调用我们写好的驱动函数,LED灯指示定时器/********************CCOPYRIGHT2012*文件名*描 *描 ***:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论