nrf5X自动选择32k为内部或者外部晶体

2018-05-11  本文已影响0人  嵌入式工作

1判断外部晶体是否工作,如果外部32k晶体工作,x32k_ok赋值为1,否则保持0

uint8_t x32k_ok=0;
void Open32768(void)
{
    uint32_t i = 0;
    NRF_CLOCK->LFCLKSRC = (CLOCK_LFCLKSRC_SRC_Xtal << CLOCK_LFCLKSRC_SRC_Pos);
    NRF_CLOCK->EVENTS_LFCLKSTARTED = 0;
    NRF_CLOCK->TASKS_LFCLKSTART = 1;
    i=0;
    // Wait for the external oscillator to start up.
    while (NRF_CLOCK->EVENTS_LFCLKSTARTED == 0)
    {
  
        delay_us(10);
        i++;
        if(i>500000)
        {
        break;
        }
    
        
    }
    
    if(i<500000)
    {
    x32k_ok=1;
    }
}

2 根据x32k_ok的值是否为真,决定使用内部或者外部32k

    nrf_clock_lf_cfg_t clock_lf_cfg =  
    {.source        = NRF_CLOCK_LF_SRC_XTAL,            \
    .rc_ctiv       = 0,                                \
    .rc_temp_ctiv  = 0,                                \
    .xtal_accuracy = NRF_CLOCK_LF_XTAL_ACCURACY_20_PPM,
    };
    
    
                             
    nrf_clock_lf_cfg_t clock_lf_cfg_rc = 
    {
        .source = NRF_CLOCK_LF_SRC_RC,
        .rc_ctiv = 16, // Interval in 0.25 s, 16 * 0.25 = 4 sec
        .rc_temp_ctiv = 2, // Check temperature every .rc_ctiv, but calibrate every .rc_temp_ctiv 
        .xtal_accuracy = NRF_CLOCK_LF_XTAL_ACCURACY_250_PPM,
    };
上一篇 下一篇

猜你喜欢

热点阅读