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 = 1;
    NRF_CLOCK->TASKS_LFCLKSTART = 1;
    while( (NRF_CLOCK->LFCLKSTAT&0x01) != 1);
   
//分频,使每个counter为10ms
    RTC->PRESCALER = 327;   
//使能compare0事件     
    RTC->EVTENSET = 1<<16;
//设置compare0事件产生时触发RTC中断。
    RTC->INTENSET = 1<<16;
    RTC->CC[0] = 100;    //1s定时
    RTC->TASKS_START = 1;//启动RTC
   
    //设置NVIC的RTC中断寄存器,开启RTC中断
    NVIC_SetPriority(RTC1_IRQn, 1);
    NVIC_ClearPendingIRQ(RTC1_IRQn);
    NVIC_EnableIRQ(RTC1_IRQn);
      
    while(1);
   
    return 0;
}
 
 
void RTC1_IRQHandler(void){
    //注意这里需要清除事件。
    RTC->EVENTS_COMPARE[0] = 0;
    nrf_gpio_pin_toggle(LED);
//注意这里要主动清0,让其重新计数。
    RTC->TASKS_CLEAR = 1;          
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值