BLE5.2 1.0
开发文档说明
xc_drv_clock.c
浏览该文件的文档.
1
25/*-----------------------------------------------------------------------------------
26 INCLUDE HEADE FILES
27 ------------------------------------------------------------------------------------*/
28#include "xc_drv_clock.h"
29
30/*------------------------------------------------------------------------------------
31 Local Variables
32 -------------------------------------------------------------------------------------*/
33
34/*------------------------------------------------------------------------------------
35 Global Variables
36 -------------------------------------------------------------------------------------*/
38
39/*------------------------------------------------------------------------------------
40 Func Prototype
41 -------------------------------------------------------------------------------------*/
42
43/*------------------------------------------------------------------------------------
44 Functions
45 -------------------------------------------------------------------------------------*/
57{
58 cpr_bt_clk_ctl__bt_clk_en__setf(ENABLE);
59 cpr_ctlapbclken_grctl__bt_pclk_en__setf(ENABLE);
60 bt_rf_pm_reg__bt_en_pm__setf(ENABLE);
61 cprao_aon_coreldo_en_set(ENABLE);
62}
63
75void xc_clock_bbpll_freq_cfg(CLOCK_HFCLK_Src_Typedef hfclk_src, uint16_t loopdiv,
76 uint8_t clk_div)
77{
78 if (CLOCK_HFCLK_SRC_RC == hfclk_src)
79 rf_ana27__bbpll_16m_sel__setf(ENABLE);
80 else
81 rf_ana27__bbpll_16m_sel__setf(DISABLE);
82
83 if(loopdiv != 0x03)
84 rf_ana27__bbpll_core_96m_en__setf(ENABLE);
85 else
86 rf_ana27__bbpll_core_96m_en__setf(DISABLE);
87 rf_ana26__bbpll_loopdiv__setf(loopdiv);
88 rf_ana26__clk_bbpll_en__setf(ENABLE);
89 rf_ana26__clk_bbpll_rstn__setf(ENABLE);
90 rf_ana26__bbpll_en__setf(ENABLE);
91 rf_ana26__bbpll_core_64m_en__setf(ENABLE);
92
93 cpr_rf_reg4__bbpll_clk_div__setf(clk_div);
94 cpr_rf_reg4__bbpll_clk_en__setf(ENABLE);
95}
96
108{
109 cpr_rf_reg3__mclk_src_sel__setf(CLOCK_SRC_RC16M);
112}
113
125{
127 xc_clock_bbpll_freq_cfg(cb->hfclk_src, 0x08, 0x01);
128
129 cpr_rf_reg3__mclk_src_sel__setf(CLOCK_SRC_BBPLL_DIV);
132}
133
145{
147 xc_clock_bbpll_freq_cfg(cb->hfclk_src, 0x0C, 0x01);
148
149 cpr_rf_reg3__mclk_src_sel__setf(CLOCK_SRC_BBPLL_DIV);
152}
153
165{
167 xc_clock_bbpll_freq_cfg(cb->hfclk_src, 0x08, 0x01);
168
169 cpr_rf_reg3__mclk_src_sel__setf(CLOCK_SRC_BBPLL);
172}
173
185{
187 xc_clock_bbpll_freq_cfg(cb->hfclk_src, 0x0C, 0x01);
188
189 cpr_rf_reg3__mclk_src_sel__setf(CLOCK_SRC_BBPLL);
192}
193
205{
207 xc_clock_bbpll_freq_cfg(cb->hfclk_src, 0x06, 0x05);
208
209 cpr_rf_reg3__mclk_src_sel__setf(CLOCK_SRC_BBPLL_DIV);
212}
213
225{
226 //M0_FCLK
227 cpr_m0_fclk_ctl__m0_fclk_div_p__setf(0x1);
228 cpr_m0_fclk_ctl__m0_fclk_direct_sw__setf(0x1);
229 //CTL_PCLK
230 cpr_ctl_pclk_grctl__ctl_pclk_gr__setf(0x8);
231 cpr_ctl_pclk_grctl__ctl_pclk_gr_upd__setf(0x1);
232
233 cprao_aon_bbldo_adj_set(0x3c);
234 /* The value needs to be configured to 7,
235 otherwise the current drop will be slower during sleep
236 and the clock accuracy of the rc32k will be affected.
237 */
238 cprao_aon_lpoldo_adj_set(0x7);
239
242}
243
255{
256 cpr_rf_reg3__mclk_src_sel__setf(CLOCK_SRC_OSC32M);
259}
260
261#if (CONFIG_HFCLK_IS_OSC32M_PLL_32M)
273{
275 xc_clock_bbpll_freq_cfg(cb->hfclk_src, 0x04, 0x01);
276
277 cpr_rf_reg3__mclk_src_sel__setf(CLOCK_SRC_BBPLL_DIV);
280}
281#endif
282
294{
296 xc_clock_bbpll_freq_cfg(cb->hfclk_src, 0x03, 0x01);
297
298 cpr_rf_reg3__mclk_src_sel__setf(CLOCK_SRC_BBPLL_DIV);
301}
302
314{
316 xc_clock_bbpll_freq_cfg(cb->hfclk_src, 0x04, 0x01);
317
318 cpr_rf_reg3__mclk_src_sel__setf(CLOCK_SRC_BBPLL);
321}
322
334{
336 xc_clock_bbpll_freq_cfg(cb->hfclk_src, 0x03, 0x01);
337
338 cpr_rf_reg3__mclk_src_sel__setf(CLOCK_SRC_BBPLL);
341}
342
354 CLOCK_HFCLK_In_Typedef hfclk_in)
355{
356 uint32_t baudrate, uart_clk, div, mul, clk_ctl, adj_div, m0_fclk_div;
357 CLOCK_InitCfg_t *pclock_cb = &clock_cb;
358 pclock_cb->hfclk_src = hfclk_src;
359
360 switch (hfclk_src) {
361 case CLOCK_HFCLK_SRC_RC: {
362 if (CLOCK_HFCLK_IN_16M == hfclk_in) {
363 xc_clock_set_rc16m(pclock_cb);
364 } else if (CLOCK_HFCLK_IN_32M == hfclk_in) {
366 } else if (CLOCK_HFCLK_IN_48M == hfclk_in) {
368 } else if (CLOCK_HFCLK_IN_64M == hfclk_in) {
370 } else if (CLOCK_HFCLK_IN_96M == hfclk_in) {
372 }
373 } break;
374
376// if(cpr_m0_fclk_ctl__m0_fclk_div__getf( )) {
377// cpr_m0_fclk_ctl__m0_fclk_div_p__setf(0);
378// cpr_m0_fclk_ctl__m0_fclk_direct_sw__setf(0x1);
379// }
380
381 if (CLOCK_HFCLK_IN_16M == hfclk_in) {
383 } else if (CLOCK_HFCLK_IN_32M == hfclk_in) {
384 #if (CONFIG_HFCLK_IS_OSC32M_PLL_32M)
386 #else
387 xc_clock_set_osc32m(pclock_cb);
388 #endif
389 } else if (CLOCK_HFCLK_IN_48M == hfclk_in) {
391 } else if (CLOCK_HFCLK_IN_64M == hfclk_in) {
393 } else if (CLOCK_HFCLK_IN_96M == hfclk_in) {
395 }
396 } break;
397 }
398 m0_fclk_div = cpr_m0_fclk_ctl__m0_fclk_div__getf( );
399 uart_clk = xc_clock_hfclk_in_get() * (m0_fclk_div+1);
400 baudrate = cpr_uart0_clk_ctl_get();
401 mul = (baudrate >> 16) & 0xFFFF;
402 div = (baudrate & 0xFFFF);
403
404 adj_div = uart_clk / 1000000;
405 clk_ctl = (mul << 16) | (div * adj_div / 32);
406 cpr_uart0_clk_ctl_set(clk_ctl);
407}
408
420 CLOCK_LFCLK_In_Typedef lfclk_in)
421{
422 clock_cb.lfclk_src = lfclk_src;
423 clock_cb.lfclk_in = lfclk_in;
424
425 if(lfclk_src == CLOCK_LFCLK_SRC_XTAL)
426 {
427 GPIO_InitCfg_t gpio_cfg = {0};
428
429 gpio_cfg.Mux = GPIO_Mux0;
430 gpio_cfg.FunSel = GPIO_Dx;
431 gpio_cfg.Dir = GPIO_DIR_INPUT;
432 gpio_cfg.Pull = GPIO_NOPULL;
433 gpio_cfg.Int = NOT_INT;
434 gpio_cfg.Pin = 20;
435 xc_gpio_init(&gpio_cfg);
436 gpio_cfg.Pin = 21;
437 xc_gpio_init(&gpio_cfg);
438
439 cprao_aon_xtl32k_val__xtl32k_v__setf(0x01);
440 cprao_aon_xtl32k_val__xtl32k_en__setf(ENABLE);
441 cprao_aon_ctl_clk32k__osc32k_sel__setf(2);
442
443 }
444 else if(lfclk_src == CLOCK_LFCLK_SRC_RC)
445 {
446
447 }
448}
459{
460 xc_clock_hfclk_set(clock_cfg->hfclk_src, clock_cfg->hfclk_in);
461 xc_clock_lfclk_set(clock_cfg->lfclk_src, clock_cfg->lfclk_in);
463}
464
475
486
497
508
CLOCK_LFCLK_Src_Typedef lfclk_src
CLOCK_HFCLK_Src_Typedef hfclk_src
CLOCK_LFCLK_In_Typedef lfclk_in
Systick_Unit_Typedef systick_unit
CLOCK_HFCLK_In_Typedef hfclk_in
GPIO_DIR_TypeDef Dir
GPIO_FUN_SEL_TypeDef FunSel
GPIO_PULL_TypeDef Pull
GPIO_MUX_TypeDef Mux
GPIO_INT_TypeDef Int
CLOCK_LFCLK_Src_Typedef xc_clock_lfclk_src_get(void)
xc_clock_lfclk_src_get
void xc_clock_set_rc16m_bbpll_32m(CLOCK_InitCfg_t *cb)
xc_clock_set_rc16m_bbpll_32m
void xc_clock_set_osc32m_div_16m(CLOCK_InitCfg_t *cb)
xc_clock_set_osc32m_div_16m
void xc_clock_set_osc32m_bbpll_48m(CLOCK_InitCfg_t *cb)
xc_clock_set_osc32m_bbpll_48m
void xc_clock_set_osc32m_bbpll_64m(CLOCK_InitCfg_t *cb)
xc_clock_set_osc32m_bbpll_64m
void xc_clock_set_rc16m(CLOCK_InitCfg_t *cb)
xc_clock_set_rc16m
void xc_clock_bbpll_freq_cfg(CLOCK_HFCLK_Src_Typedef hfclk_src, uint16_t loopdiv, uint8_t clk_div)
xc_clock_bbpll_freq_cfg
CLOCK_InitCfg_t clock_cb
void xc_clock_set_osc32m_bbpll_32m(CLOCK_InitCfg_t *cb)
xc_clock_set_osc32m_bbpll_32m
void xc_clock_hfclk_set(CLOCK_HFCLK_Src_Typedef hfclk_src, CLOCK_HFCLK_In_Typedef hfclk_in)
xc_clock_hfclk_set
void xc_clock_set_rc16m_bbpll_96m(CLOCK_InitCfg_t *cb)
xc_clock_set_rc16m_bbpll_96m
CLOCK_LFCLK_In_Typedef xc_clock_lfclk_in_get(void)
xc_clock_lfclk_in_get
CLOCK_HFCLK_Src_Typedef xc_clock_hfclk_src_get(void)
xc_clock_hfclk_src_get
void xc_clock_set_osc32m_bbpll_96m(CLOCK_InitCfg_t *cb)
xc_clock_set_osc32m_bbpll_96m
void xc_clock_set_osc32m_bbpll_16m(CLOCK_InitCfg_t *cb)
xc_clock_set_osc32m_bbpll_16m
CLOCK_HFCLK_In_Typedef xc_clock_hfclk_in_get(void)
xc_clock_hfclk_in_get
void xc_clock_set_rc16m_bbpll_64m(CLOCK_InitCfg_t *cb)
xc_clock_set_rc16m_bbpll_64m
void xc_clock_lfclk_set(CLOCK_LFCLK_Src_Typedef lfclk_src, CLOCK_LFCLK_In_Typedef lfclk_in)
xc_clock_lfclk_set
Systick_Unit_Typedef xc_systick_unit_get(void)
xc_systick_unit_get
void xc_clock_init_cfg(CLOCK_InitCfg_t *clock_cfg)
xc_clock_init_cfg
void xc_clock_set_osc32m(CLOCK_InitCfg_t *cb)
xc_clock_set_osc32m
void xc_clock_bbpll_common_cfg(void)
xc_clock_bbpll_common_cfg
void xc_clock_set_rc16m_bbpll_48m(CLOCK_InitCfg_t *cb)
xc_clock_set_rc16m_bbpll_48m
The header of xc_drv_clock.c
CLOCK_LFCLK_Src_Typedef
@ CLOCK_LFCLK_SRC_XTAL
@ CLOCK_LFCLK_SRC_RC
CLOCK_HFCLK_Src_Typedef
@ CLOCK_HFCLK_SRC_RC
@ CLOCK_HFCLK_SRC_XTAL
CLOCK_HFCLK_In_Typedef
@ CLOCK_HFCLK_IN_16M
@ CLOCK_HFCLK_IN_96M
@ CLOCK_HFCLK_IN_48M
@ CLOCK_HFCLK_IN_32M
@ CLOCK_HFCLK_IN_64M
Systick_Unit_Typedef
@ SYSTICK_UNIT_IN_96M
@ SYSTICK_UNIT_IN_32M
@ SYSTICK_UNIT_IN_64M
@ SYSTICK_UNIT_IN_48M
@ SYSTICK_UNIT_IN_16M
CLOCK_LFCLK_In_Typedef
void xc_gpio_init(GPIO_InitCfg_t *init_cfg)
xc_gpio_init
Definition xc_drv_gpio.c:63
@ GPIO_DIR_INPUT
@ GPIO_Dx
@ GPIO_NOPULL
@ NOT_INT
@ GPIO_Mux0
Definition xc_drv_gpio.h:96
void xc_pwr_vol_set(void)
Definition xc_drv_pwr.c:36