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,
};