SmartSnippets DA1459x SDK
hw_clk_da1459x.h
Go to the documentation of this file.
1 
42 #ifndef HW_CLK_DA1459x_H_
43 #define HW_CLK_DA1459x_H_
44 
45 
46 #if dg_configUSE_HW_CLK
47 
48 #include "sdk_defs.h"
49 #include "hw_sys.h"
50 #if (dg_configHW_FCU_WAIT_CYCLES_MODE)
51 #include "../src/hw_sys_internal.h"
52 #endif
53 
54 #define HW_CLK_DELAY_OVERHEAD_CYCLES (72)
55 #define HW_CLK_CYCLES_PER_DELAY_REP (4)
56 
67 #define XTAL32M_USEC_TO_250K_CYCLES(x) ((uint16_t)((x * (dg_configRC32M_FREQ/1000000) + 127) / 128))
68 
79 #define XTALRDY_CYCLES_TO_LP_CLK_CYCLES(x, lp_freq) ((((uint32_t)(x)) * lp_freq + dg_configRC32M_FREQ_MIN/(128) - 1) / (dg_configRC32M_FREQ_MIN/128))
80 
89 typedef enum sys_clk_is_type {
90  SYS_CLK_IS_XTAL32M = 0,
91  SYS_CLK_IS_RC32,
92  SYS_CLK_IS_LP,
93  SYS_CLK_IS_DBLR,
94  SYS_CLK_IS_INVALID
95 } sys_clk_is_t;
96 
104 typedef enum cal_clk_sel_type {
105  CALIBRATE_RCLP = 0,
106  CALIBRATE_RC32M,
107  CALIBRATE_XTAL32K,
108  CALIBRATE_RCX,
109  CALIBRATE_RCOSC,
110 } cal_clk_t;
111 
115 typedef enum cal_ref_clk_sel_type {
116  CALIBRATE_REF_DIVN = 0,
117  CALIBRATE_REF_RCLP,
118  CALIBRATE_REF_RC32M,
119  CALIBRATE_REF_XTAL32K,
120  CALIBRATE_REF_RCOSC,
121  CALIBRATE_REF_EXT,
122 } cal_ref_clk_t;
123 
129 typedef enum sysclk_type {
133  sysclk_LP = 255,
134 } sys_clk_t;
135 
141 typedef enum rclp_mode_type {
143  RCLP_FORCE_SLOW = REG_MSK(CRG_TOP, CLK_RCLP_REG, RCLP_LOW_SPEED_FORCE),
144  RCLP_FORCE_FAST = REG_MSK(CRG_TOP, CLK_RCLP_REG, RCLP_HIGH_SPEED_FORCE),
145 } rclp_mode_t;
146 
151 typedef enum cpu_clk_type {
152  cpuclk_2M = 2,
153  cpuclk_4M = 4,
154  cpuclk_8M = 8,
155  cpuclk_16M = 16,
156  cpuclk_32M = 32,
158 } cpu_clk_t;
159 
165 __STATIC_INLINE bool hw_clk_check_rc32_status(void)
166 {
167  return REG_GETF(CRG_TOP, CLK_RC32M_REG, RC32M_ENABLE);
168 }
169 
173 __STATIC_INLINE void hw_clk_enable_rc32(void)
174 {
175  REG_SET_BIT(CRG_TOP, CLK_RC32M_REG, RC32M_ENABLE);
176 }
177 
181 __STATIC_FORCEINLINE void hw_clk_disable_rc32(void)
182 {
183  REG_CLR_BIT(CRG_TOP, CLK_RC32M_REG, RC32M_ENABLE);
184 }
185 
196 void hw_clk_set_xtalm_settling_time(uint8_t cycles, bool high_clock);
197 
208 __STATIC_FORCEINLINE uint16_t hw_clk_get_xtalm_settling_time(void)
209 {
210  uint32_t val = CRG_XTAL->XTAL32M_IRQ_CTRL_REG;
211  uint16_t cycles = REG_GET_FIELD(CRG_XTAL, XTAL32M_IRQ_CTRL_REG, XTAL32M_IRQ_CNT, val);
212 
213  if (REG_GET_FIELD(CRG_XTAL, XTAL32M_IRQ_CTRL_REG, XTAL32M_IRQ_CLK, val) == 1) {
214  // 31.25kHz clock cycles. Convert them to 250kHz clock cycles.
215  cycles *= 8;
216  }
217  return cycles;
218 }
219 
225 __STATIC_INLINE bool hw_clk_check_xtalm_status(void)
226 {
227  return REG_GETF(CRG_XTAL, XTAL32M_STAT0_REG, XTAL32M_READY) == 1;
228 }
229 
233 __STATIC_INLINE void hw_clk_enable_xtalm(void)
234 {
235  /* Do nothing if XTAL32M is already up and running. */
236  if (REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_XTAL32M)) {
237  return;
238  }
239 
240  // Check if TIM power domain is enabled
241  ASSERT_WARNING(REG_GETF(CRG_TOP, SYS_STAT_REG, TIM_IS_UP));
242 
243  // Check the power supply
244 
245  /* Enable the XTAL oscillator. */
246  REG_SET_BIT(CRG_XTAL, XTAL32M_CTRL_REG, XTAL32M_ENABLE);
247 }
248 
252 __STATIC_INLINE void hw_clk_disable_xtalm(void)
253 {
254  REG_CLR_BIT(CRG_XTAL, XTAL32M_CTRL_REG, XTAL32M_ENABLE);
255 }
256 
262 __STATIC_INLINE bool hw_clk_is_xtalm_started(void)
263 {
264  return (REG_GETF(CRG_XTAL, XTAL32M_STAT0_REG, XTAL32M_READY) &&
265  REG_GETF(CRG_XTAL, XTAL32M_IRQ_STAT_REG, XTAL32M_IRQ_COUNT_STAT) == 0);
266 }
267 
273 __STATIC_FORCEINLINE sys_clk_is_t hw_clk_get_sysclk(void)
274 {
275  static const uint32_t freq_msk = CRG_TOP_CLK_CTRL_REG_RUNNING_AT_LP_CLK_Msk |
279 
280  static __RETAINED_CONST_INIT const sys_clk_is_t clocks[] = {
281  SYS_CLK_IS_LP, // 0b000
282  SYS_CLK_IS_RC32, // 0b001
283  SYS_CLK_IS_XTAL32M, // 0b010
284  SYS_CLK_IS_INVALID,
285  SYS_CLK_IS_DBLR // 0b100
286  };
287 
288  // drop bit0 to reduce the size of clocks[]
289  uint32_t index = (CRG_TOP->CLK_CTRL_REG & freq_msk) >> (CRG_TOP_CLK_CTRL_REG_RUNNING_AT_LP_CLK_Pos + 1);
290  ASSERT_WARNING(index <= 4);
291 
292  sys_clk_is_t clk = clocks[index];
293  ASSERT_WARNING(clk != SYS_CLK_IS_INVALID);
294  return clk;
295 }
296 
305 __RETAINED_CODE sys_clk_t hw_clk_get_system_clock(void);
306 
312 __STATIC_INLINE bool hw_clk_lp_is_xtal32k(void)
313 {
314  return REG_GETF(CRG_TOP, CLK_XTAL32K_REG, XTAL32K_ENABLE) &&
315  (REG_GETF(CRG_TOP, CLK_CTRL_REG, LP_CLK_SEL) == LP_CLK_IS_XTAL32K);
316 }
317 
323 __STATIC_INLINE bool hw_clk_lp_is_rclp(void)
324 {
325  return (!REG_GETF(CRG_TOP, CLK_RCLP_REG, RCLP_DISABLE)) &&
326  (REG_GETF(CRG_TOP, CLK_CTRL_REG, LP_CLK_SEL) == LP_CLK_IS_RCLP);
327 }
328 
334 __STATIC_INLINE bool hw_clk_lp_is_rcx(void)
335 {
336  return REG_GETF(CRG_TOP, CLK_RCX_REG, RCX_ENABLE) &&
337  (REG_GETF(CRG_TOP, CLK_CTRL_REG, LP_CLK_SEL) == LP_CLK_IS_RCX);
338 }
339 
345 __STATIC_INLINE bool hw_clk_lp_is_external(void)
346 {
347  return REG_GETF(CRG_TOP, CLK_CTRL_REG, LP_CLK_SEL) == LP_CLK_IS_EXTERNAL;
348 }
349 
358 __STATIC_INLINE void hw_clk_lp_set_rcx(void)
359 {
360  ASSERT_WARNING(__get_PRIMASK() == 1 || __get_BASEPRI());
361  ASSERT_WARNING(REG_GETF(CRG_TOP, CLK_RCX_REG, RCX_ENABLE));
362 
363  REG_SETF(CRG_TOP, CLK_CTRL_REG, LP_CLK_SEL, LP_CLK_IS_RCX);
364 }
365 
374 __STATIC_INLINE void hw_clk_lp_set_xtal32k(void)
375 {
376  ASSERT_WARNING(__get_PRIMASK() == 1 || __get_BASEPRI());
377  ASSERT_WARNING(REG_GETF(CRG_TOP, CLK_XTAL32K_REG, XTAL32K_ENABLE));
378 
379  REG_SETF(CRG_TOP, CLK_CTRL_REG, LP_CLK_SEL, LP_CLK_IS_XTAL32K);
380 }
381 
388 __STATIC_INLINE void hw_clk_lp_set_ext32k(void)
389 {
390  ASSERT_WARNING(__get_PRIMASK() == 1 || __get_BASEPRI());
391 
392  REG_SETF(CRG_TOP, CLK_CTRL_REG, LP_CLK_SEL, LP_CLK_IS_EXTERNAL);
393 }
394 
400 __STATIC_INLINE void hw_clk_set_rclp_mode(rclp_mode_t mode)
401 {
403  switch (mode) {
404  case RCLP_DEFAULT:
405  REG_SET_MASKED(CRG_TOP, CLK_RCLP_REG, (RCLP_FORCE_SLOW | RCLP_FORCE_FAST), RCLP_DEFAULT);
406  break;
407  case RCLP_FORCE_SLOW:
408  REG_SET_MASKED(CRG_TOP, CLK_RCLP_REG, (RCLP_FORCE_SLOW | RCLP_FORCE_FAST), RCLP_FORCE_SLOW);
409  break;
410  case RCLP_FORCE_FAST:
411  REG_SET_MASKED(CRG_TOP, CLK_RCLP_REG, (RCLP_FORCE_SLOW | RCLP_FORCE_FAST), RCLP_FORCE_FAST);
412  break;
413  default:
414  ASSERT_WARNING(0);
415  break;
416  }
418 }
419 
425 __STATIC_INLINE rclp_mode_t hw_clk_get_rclp_mode(void)
426 {
427  return (CRG_TOP->CLK_RCLP_REG & (RCLP_FORCE_SLOW | RCLP_FORCE_FAST));
428 }
429 
433 __STATIC_INLINE void hw_clk_enable_rclp(void)
434 {
435  REG_CLR_BIT(CRG_TOP, CLK_RCLP_REG, RCLP_DISABLE);
436 }
437 
443 __STATIC_INLINE void hw_clk_disable_rclp(void)
444 {
445  ASSERT_WARNING(REG_GETF(CRG_TOP, CLK_CTRL_REG, LP_CLK_SEL) != LP_CLK_IS_RCLP);
446 
447  REG_SET_BIT(CRG_TOP, CLK_RCLP_REG, RCLP_DISABLE);
448 }
449 
458 __STATIC_INLINE void hw_clk_lp_set_rclp(void)
459 {
460  ASSERT_WARNING(__get_PRIMASK() == 1 || __get_BASEPRI());
461  ASSERT_WARNING(!REG_GETF(CRG_TOP, CLK_RCLP_REG, RCLP_DISABLE));
462 
463  REG_SETF(CRG_TOP, CLK_CTRL_REG, LP_CLK_SEL, LP_CLK_IS_RCLP);
464 }
465 
469 __STATIC_INLINE void hw_clk_configure_rcx(void)
470 {
471  // Reset values for CLK_RCX_REG register should be used
472 }
473 
477 __STATIC_INLINE void hw_clk_enable_rcx(void)
478 {
479  REG_SET_BIT(CRG_TOP, CLK_RCX_REG, RCX_ENABLE);
480 }
481 
487 __STATIC_INLINE void hw_clk_disable_rcx(void)
488 {
489  ASSERT_WARNING(REG_GETF(CRG_TOP, CLK_CTRL_REG, LP_CLK_SEL) != LP_CLK_IS_RCX);
490 
491  REG_CLR_BIT(CRG_TOP, CLK_RCX_REG, RCX_ENABLE);
492 }
493 
497 __STATIC_INLINE void hw_clk_configure_xtal32k(void)
498 {
499  // Configure xtal.
500  uint32_t reg = CRG_TOP->CLK_XTAL32K_REG;
501  REG_SET_FIELD(CRG_TOP, CLK_XTAL32K_REG, XTAL32K_CUR, reg, 5);
502  REG_SET_FIELD(CRG_TOP, CLK_XTAL32K_REG, XTAL32K_RBIAS, reg, 3);
503 
504  REG_SET_FIELD(CRG_TOP, CLK_XTAL32K_REG, XTAL32K_DISABLE_AMPREG, reg, dg_configEXT_LP_IS_DIGITAL);
505 
506  CRG_TOP->CLK_XTAL32K_REG = reg;
507 }
508 
512 __STATIC_INLINE void hw_clk_enable_xtal32k(void)
513 {
514  REG_SET_BIT(CRG_TOP, CLK_XTAL32K_REG, XTAL32K_ENABLE);
515 }
516 
522 __STATIC_INLINE void hw_clk_disable_xtal32k(void)
523 {
524  ASSERT_WARNING(REG_GETF(CRG_TOP, CLK_CTRL_REG, LP_CLK_SEL) != LP_CLK_IS_XTAL32K);
525  REG_CLR_BIT(CRG_TOP, CLK_XTAL32K_REG, XTAL32K_ENABLE);
526 }
527 
532 __STATIC_INLINE void hw_clk_calibration_enable_irq(void)
533 {
534  REG_SET_BIT(ANAMISC_BIF, CLK_CAL_IRQ_REG, CLK_CAL_IRQ_EN);
535 }
536 
541 __STATIC_INLINE void hw_clk_calibration_clear_irq(void)
542 {
543  REG_SET_BIT(ANAMISC_BIF, CLK_CAL_IRQ_REG, CLK_CAL_IRQ_CLR);
544 }
545 
551 __STATIC_INLINE bool hw_clk_calibration_status_irq(void)
552 {
553  return REG_GETF(ANAMISC_BIF, CLK_CAL_IRQ_REG, CLK_CAL_IRQ_STATUS) == 0;
554 }
555 
561 __STATIC_INLINE bool hw_clk_calibration_finished(void)
562 {
563  return REG_GETF(ANAMISC_BIF, CLK_REF_SEL_REG, REF_CAL_START) == 0;
564 }
565 
579 void hw_clk_start_calibration(cal_clk_t clk_type, cal_ref_clk_t clk_ref_type, uint16_t cycles);
580 
589 uint32_t hw_clk_get_calibration_data(void);
590 
599 __STATIC_INLINE void hw_clk_set_sysclk(sys_clk_is_t mode)
600 {
601  /* Make sure a valid sys clock is requested */
602  ASSERT_WARNING(mode <= SYS_CLK_IS_DBLR);
603 
604  /* Switch to Doubler is only allowed when current system clock is XTAL32M */
605  ASSERT_WARNING(mode != SYS_CLK_IS_DBLR ||
606  REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_XTAL32M) ||
607  REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_DBLR64M))
608 
609  /* Switch to Doubler is only allowed when HDIV and PDIV are 0 */
610  ASSERT_WARNING(mode != SYS_CLK_IS_DBLR || (hw_clk_get_hclk_div() == ahb_div1 && hw_clk_get_pclk_div() == apb_div1));
611 
612  /* Switch from Doubler is only allowed when new system clock is XTAL32M */
613  ASSERT_WARNING(!REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_DBLR64M) ||
614  mode == SYS_CLK_IS_XTAL32M ||
615  mode == SYS_CLK_IS_DBLR);
616 
617 #if dg_configHW_FCU_WAIT_CYCLES_MODE
618  hw_sys_fcu_set_max_wait_cycles();
619 #endif
620  if (mode == SYS_CLK_IS_XTAL32M && REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_RC32M)) {
621  REG_SET_BIT(CRG_TOP, CLK_SWITCH2XTAL_REG, SWITCH2XTAL);
622  }
623  else {
625  REG_SETF(CRG_TOP, CLK_CTRL_REG, SYS_CLK_SEL, mode);
627  }
628 
629  /* Wait until the switch is done! */
630  switch (mode) {
631  case SYS_CLK_IS_XTAL32M:
632  while (!REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_XTAL32M)) {
633  }
634  break;
635 
636  case SYS_CLK_IS_RC32:
637  while (!REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_RC32M)) {
638  }
639  break;
640 
641  case SYS_CLK_IS_LP:
642  while (!REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_LP_CLK)) {
643  }
644  break;
645 
646  case SYS_CLK_IS_DBLR:
647  while (!REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_DBLR64M)) {
648  }
649  break;
650  default:
651  ASSERT_WARNING(0);
652  }
653 #if dg_configHW_FCU_WAIT_CYCLES_MODE
654  hw_sys_fcu_set_optimum_wait_cycles();
655 #endif
656 }
657 
663 __STATIC_FORCEINLINE void hw_clk_set_hclk_div(ahb_div_t div)
664 {
665  ASSERT_WARNING(div <= ahb_div16);
667 #if dg_configHW_FCU_WAIT_CYCLES_MODE
668  hw_sys_fcu_set_max_wait_cycles();
669  REG_SETF(CRG_TOP, CLK_AMBA_REG, HCLK_DIV, div);
670  hw_sys_fcu_set_optimum_wait_cycles();
671 #else
672  REG_SETF(CRG_TOP, CLK_AMBA_REG, HCLK_DIV, div);
673 #endif
675 }
676 
680 __STATIC_FORCEINLINE void hw_clk_dblr_sys_on(void)
681 {
683 
684  /* XTAL32M_LDO_LEVEL voltage must be set to 0.9V prior to enabling DBLR */
685  ASSERT_WARNING(REG_GETF(CRG_TOP, POWER_LEVEL_REG, XTAL32M_LDO_LEVEL) > 2);
686 
687  /* Release the reset of the Doubler Control Logic */
688  REG_SET_BIT(CRG_XTAL, CLKDBLR_CTRL1_REG, RESET_N);
689 
690  /* Turn on DBLR. */
691  REG_SET_BIT(CRG_XTAL, CLKDBLR_CTRL1_REG, ENABLE);
692 
694 }
695 
701 __STATIC_FORCEINLINE void hw_clk_dblr_sys_off(void)
702 {
704 
705  // The DBLR is not the system clk.
706  ASSERT_WARNING(!REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_DBLR64M));
707 
708  /* Reset the Doubler Control Logic. */
709  REG_CLR_BIT(CRG_XTAL, CLKDBLR_CTRL1_REG, RESET_N);
710 
711  /* Turn off DBLR. */
712  REG_CLR_BIT(CRG_XTAL, CLKDBLR_CTRL1_REG, ENABLE);
713 
715 }
716 
722 __STATIC_INLINE bool hw_clk_check_dblr_status(void)
723 {
724  return REG_GETF(CRG_XTAL, CLKDBLR_CTRL1_REG, ENABLE);
725 }
726 
732 __STATIC_INLINE bool hw_clk_is_dblr_ready(void)
733 {
734  return REG_GETF(CRG_XTAL, CLKDBLR_STATUS_REG , OUTPUT_READY);
735 }
736 
742 __STATIC_INLINE void hw_clk_enable_sysclk(sys_clk_is_t clk)
743 {
744  switch (clk) {
745  case SYS_CLK_IS_XTAL32M:
747  return;
748  case SYS_CLK_IS_RC32:
750  return;
751  case SYS_CLK_IS_DBLR:
753  return;
754  default:
755  /* An invalid clock is requested */
756  ASSERT_WARNING(0);
757  }
758 }
759 
765 __STATIC_INLINE void hw_clk_disable_sysclk(sys_clk_is_t clk)
766 {
767  switch (clk) {
768  case SYS_CLK_IS_XTAL32M:
770  return;
771  case SYS_CLK_IS_RC32:
773  return;
774  case SYS_CLK_IS_DBLR:
776  return;
777  default:
778  /* An invalid clock is requested */
779  ASSERT_WARNING(0);
780  }
781 }
782 
788 __STATIC_INLINE bool hw_clk_is_enabled_sysclk(sys_clk_is_t clk)
789 {
790  switch (clk) {
791  case SYS_CLK_IS_XTAL32M:
792  return hw_clk_check_xtalm_status();
793  case SYS_CLK_IS_RC32:
794  return hw_clk_check_rc32_status();
795  case SYS_CLK_IS_DBLR:
796  return hw_clk_check_dblr_status();
797  default:
798  /* An invalid clock is requested */
799  ASSERT_WARNING(0);
800  return false;
801  }
802 }
803 
807 __STATIC_FORCEINLINE void hw_clk_configure_ext32k_pins(void)
808 {
809  GPIO-> P1_14_MODE_REG = 0;
810 }
811 
832 int8_t hw_clk_xtalm_configure_cur_set(void);
833 
851 void hw_clk_xtalm_configure_irq(void);
852 
857 __STATIC_INLINE void hw_clk_xtalm_irq_enable(void)
858 {
859  REG_SET_BIT(CRG_XTAL, XTAL32M_IRQ_CTRL_REG, XTAL32M_IRQ_ENABLE);
860 }
861 
862 #endif /* dg_configUSE_HW_CLK */
863 
864 
865 #endif /* HW_CLK_DA1459x_H_ */
866 
hw_clk_configure_rcx
__STATIC_INLINE void hw_clk_configure_rcx(void)
Configure RCX. This must be done only once since the register is retained.
Definition: hw_clk_da1459x.h:469
REG_SET_MASKED
#define REG_SET_MASKED(base, reg, mask, value)
Sets register bits, indicated by the mask, to a value.
Definition: sdk_defs.h:794
hw_clk_disable_rc32
__STATIC_FORCEINLINE void hw_clk_disable_rc32(void)
Deactivate the RC32M.
Definition: hw_clk_da1459x.h:181
hw_clk_lp_is_xtal32k
__STATIC_INLINE bool hw_clk_lp_is_xtal32k(void)
Check whether the XTAL32K is the Low Power clock.
Definition: hw_clk_da1459x.h:312
cpuclk_4M
4 MHz
Definition: hw_clk_da1459x.h:153
REG_SETF
#define REG_SETF(base, reg, field, new_val)
Set the value of a register field.
Definition: sdk_defs.h:738
REG_CLR_BIT
#define REG_CLR_BIT(base, reg, field)
Clear a bit of a register.
Definition: sdk_defs.h:781
hw_clk_calibration_enable_irq
__STATIC_INLINE void hw_clk_calibration_enable_irq(void)
Enable the clock calibration interrupt.
Definition: hw_clk_da1459x.h:532
REG_SET_BIT
#define REG_SET_BIT(base, reg, field)
Set a bit of a register.
Definition: sdk_defs.h:766
hw_clk_is_enabled_sysclk
__STATIC_INLINE bool hw_clk_is_enabled_sysclk(sys_clk_is_t clk)
Check if a System clock is enabled.
Definition: hw_clk_da1459x.h:788
hw_clk_enable_xtalm
__STATIC_INLINE void hw_clk_enable_xtalm(void)
Activate the XTAL32M.
Definition: hw_clk_da1459x.h:233
sysclk_RC32
RC32.
Definition: hw_clk_da1459x.h:130
hw_clk_calibration_finished
__STATIC_INLINE bool hw_clk_calibration_finished(void)
Check the status of a requested calibration.
Definition: hw_clk_da1459x.h:561
hw_clk_enable_rcx
__STATIC_INLINE void hw_clk_enable_rcx(void)
Enable RCX but does not set it as the LP clock.
Definition: hw_clk_da1459x.h:477
hw_sys.h
System Driver header file.
hw_clk_start_calibration
void hw_clk_start_calibration(cal_clk_t clk_type, cal_ref_clk_t clk_ref_type, uint16_t cycles)
Start calibration of a clock.
hw_clk_check_xtalm_status
__STATIC_INLINE bool hw_clk_check_xtalm_status(void)
Check if the XTAL32M is enabled.
Definition: hw_clk_da1459x.h:225
sysclk_type
sysclk_type
The system clock type.
Definition: hw_clk_da1459x.h:129
sdk_defs.h
Central include header file with platform definitions.
hw_clk_set_rclp_mode
__STATIC_INLINE void hw_clk_set_rclp_mode(rclp_mode_t mode)
Configure RCLP.
Definition: hw_clk_da1459x.h:400
CRG_TOP_CLK_CTRL_REG_RUNNING_AT_LP_CLK_Pos
#define CRG_TOP_CLK_CTRL_REG_RUNNING_AT_LP_CLK_Pos
Definition: DA1459x-00.h:1958
RCLP_FORCE_SLOW
32kHz
Definition: hw_clk_da1459x.h:143
hw_clk_enable_xtal32k
__STATIC_INLINE void hw_clk_enable_xtal32k(void)
Enable XTAL32K but do not set it as the LP clock.
Definition: hw_clk_da1459x.h:512
cpuclk_64M
64 MHz
Definition: hw_clk_da1459x.h:157
sys_clk_is_t
enum sys_clk_is_type sys_clk_is_t
The type of the system clock.
CRG_TOP_CLK_CTRL_REG_RUNNING_AT_LP_CLK_Msk
#define CRG_TOP_CLK_CTRL_REG_RUNNING_AT_LP_CLK_Msk
Definition: DA1459x-00.h:1959
hw_clk_get_sysclk
__STATIC_FORCEINLINE sys_clk_is_t hw_clk_get_sysclk(void)
Return the clock used as the system clock.
Definition: hw_clk_da1459x.h:273
cpuclk_2M
2 MHz
Definition: hw_clk_da1459x.h:152
hw_clk_lp_set_ext32k
__STATIC_INLINE void hw_clk_lp_set_ext32k(void)
Set an external digital clock as the Low Power clock.
Definition: hw_clk_da1459x.h:388
apb_div1
Divide by 1.
Definition: hw_clk.h:88
hw_clk_configure_xtal32k
__STATIC_INLINE void hw_clk_configure_xtal32k(void)
Configure XTAL32K. This must be done only once since the register is retained.
Definition: hw_clk_da1459x.h:497
sysclk_XTAL32M
32MHz
Definition: hw_clk_da1459x.h:131
cal_ref_clk_sel_type
cal_ref_clk_sel_type
The reference clock used for calibration.
Definition: hw_clk_da1459x.h:115
hw_clk_lp_is_rclp
__STATIC_INLINE bool hw_clk_lp_is_rclp(void)
Check whether the RCLP is the Low Power clock.
Definition: hw_clk_da1459x.h:323
hw_clk_check_dblr_status
__STATIC_INLINE bool hw_clk_check_dblr_status(void)
Check if the Doubler is enabled.
Definition: hw_clk_da1459x.h:722
CRG_TOP_CLK_CTRL_REG_RUNNING_AT_XTAL32M_Msk
#define CRG_TOP_CLK_CTRL_REG_RUNNING_AT_XTAL32M_Msk
Definition: DA1459x-00.h:1955
sys_clk_is_type
sys_clk_is_type
The type of the system clock.
Definition: hw_clk_da1459x.h:89
hw_clk_xtalm_irq_enable
__STATIC_INLINE void hw_clk_xtalm_irq_enable(void)
Enable XTAL32M interrupt generation.
Definition: hw_clk_da1459x.h:857
hw_clk_get_pclk_div
__STATIC_FORCEINLINE apb_div_t hw_clk_get_pclk_div(void)
Get the divider of the AMBA Peripheral Bus.
Definition: hw_clk.h:110
hw_clk_disable_xtal32k
__STATIC_INLINE void hw_clk_disable_xtal32k(void)
Disable XTAL32K.
Definition: hw_clk_da1459x.h:522
__RETAINED_CONST_INIT
#define __RETAINED_CONST_INIT
Constant data retained memory attribute.
Definition: sdk_defs.h:329
hw_clk_dblr_sys_on
__STATIC_FORCEINLINE void hw_clk_dblr_sys_on(void)
Enable the Doubler.
Definition: hw_clk_da1459x.h:680
hw_clk_get_rclp_mode
__STATIC_INLINE rclp_mode_t hw_clk_get_rclp_mode(void)
Get RCLP mode of operation.
Definition: hw_clk_da1459x.h:425
cal_ref_clk_t
enum cal_ref_clk_sel_type cal_ref_clk_t
The reference clock used for calibration.
hw_clk_disable_rcx
__STATIC_INLINE void hw_clk_disable_rcx(void)
Disable RCX.
Definition: hw_clk_da1459x.h:487
hw_clk_enable_rclp
__STATIC_INLINE void hw_clk_enable_rclp(void)
Enable RCLP.
Definition: hw_clk_da1459x.h:433
cpuclk_32M
32 MHz
Definition: hw_clk_da1459x.h:156
cpuclk_16M
16 MHz
Definition: hw_clk_da1459x.h:155
hw_clk_get_hclk_div
__STATIC_FORCEINLINE ahb_div_t hw_clk_get_hclk_div(void)
Get the divider of the AMBA High Speed Bus.
Definition: hw_clk.h:100
sys_clk_t
enum sysclk_type sys_clk_t
The system clock type.
CRG_TOP_CLK_CTRL_REG_RUNNING_AT_DBLR64M_Msk
#define CRG_TOP_CLK_CTRL_REG_RUNNING_AT_DBLR64M_Msk
Definition: DA1459x-00.h:1953
cpuclk_8M
8 MHz
Definition: hw_clk_da1459x.h:154
hw_clk_set_xtalm_settling_time
void hw_clk_set_xtalm_settling_time(uint8_t cycles, bool high_clock)
Set the XTAL32M settling time.
ahb_div_t
enum ahbdiv_type ahb_div_t
The AMBA High-Performance Bus (AHB) clock divider.
hw_clk_is_dblr_ready
__STATIC_INLINE bool hw_clk_is_dblr_ready(void)
Check if the Doubler is available.
Definition: hw_clk_da1459x.h:732
hw_clk_check_rc32_status
__STATIC_INLINE bool hw_clk_check_rc32_status(void)
Check if the RC32M is enabled.
Definition: hw_clk_da1459x.h:165
hw_clk_disable_xtalm
__STATIC_INLINE void hw_clk_disable_xtalm(void)
Deactivate the XTAL32M.
Definition: hw_clk_da1459x.h:252
REG_MSK
#define REG_MSK(base, reg, field)
Access register field mask.
Definition: sdk_defs.h:583
mode
HW_GPIO_MODE mode
Definition: hw_gpio.h:211
cal_clk_sel_type
cal_clk_sel_type
The type of clock to be calibrated.
Definition: hw_clk_da1459x.h:104
hw_clk_get_calibration_data
uint32_t hw_clk_get_calibration_data(void)
Return the calibration results.
hw_clk_lp_is_external
__STATIC_INLINE bool hw_clk_lp_is_external(void)
Check whether the RCX is the Low Power clock.
Definition: hw_clk_da1459x.h:345
rclp_mode_t
enum rclp_mode_type rclp_mode_t
The RCLP mode.
REG_GET_FIELD
#define REG_GET_FIELD(base, reg, field, var)
Access register field value.
Definition: sdk_defs.h:607
hw_clk_xtalm_configure_irq
void hw_clk_xtalm_configure_irq(void)
Configure XTAL32M IRQ counter start value.
hw_clk_set_hclk_div
__STATIC_FORCEINLINE void hw_clk_set_hclk_div(ahb_div_t div)
Set the divider of the AMBA High Speed Bus.
Definition: hw_clk_da1459x.h:663
cal_clk_t
enum cal_clk_sel_type cal_clk_t
The type of clock to be calibrated.
hw_clk_enable_rc32
__STATIC_INLINE void hw_clk_enable_rc32(void)
Activate the RC32M.
Definition: hw_clk_da1459x.h:173
hw_clk_lp_is_rcx
__STATIC_INLINE bool hw_clk_lp_is_rcx(void)
Check whether the RCX is the Low Power clock.
Definition: hw_clk_da1459x.h:334
GLOBAL_INT_RESTORE
#define GLOBAL_INT_RESTORE()
Macro to restore all interrupts.
Definition: sdk_defs.h:477
hw_clk_get_xtalm_settling_time
__STATIC_FORCEINLINE uint16_t hw_clk_get_xtalm_settling_time(void)
Get the XTAL32M settling time (in 250kHz clock cycles).
Definition: hw_clk_da1459x.h:208
hw_clk_lp_set_xtal32k
__STATIC_INLINE void hw_clk_lp_set_xtal32k(void)
Set XTAL32K as the Low Power clock.
Definition: hw_clk_da1459x.h:374
sysclk_DBLR64
64MHz
Definition: hw_clk_da1459x.h:132
REG_GETF
#define REG_GETF(base, reg, field)
Return the value of a register field.
Definition: sdk_defs.h:711
hw_clk_disable_rclp
__STATIC_INLINE void hw_clk_disable_rclp(void)
Disable RCLP.
Definition: hw_clk_da1459x.h:443
hw_clk_disable_sysclk
__STATIC_INLINE void hw_clk_disable_sysclk(sys_clk_is_t clk)
Deactivate a System clock.
Definition: hw_clk_da1459x.h:765
hw_clk_enable_sysclk
__STATIC_INLINE void hw_clk_enable_sysclk(sys_clk_is_t clk)
Activate a System clock.
Definition: hw_clk_da1459x.h:742
hw_clk_lp_set_rcx
__STATIC_INLINE void hw_clk_lp_set_rcx(void)
Set RCX as the Low Power clock.
Definition: hw_clk_da1459x.h:358
__get_PRIMASK
__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void)
Get Priority Mask.
Definition: cmsis_gcc.h:390
hw_clk_configure_ext32k_pins
__STATIC_FORCEINLINE void hw_clk_configure_ext32k_pins(void)
Configure pin to connect an external digital clock.
Definition: hw_clk_da1459x.h:807
hw_clk_lp_set_rclp
__STATIC_INLINE void hw_clk_lp_set_rclp(void)
Set RCLP as the Low Power clock.
Definition: hw_clk_da1459x.h:458
sysclk_LP
not applicable
Definition: hw_clk_da1459x.h:133
rclp_mode_type
rclp_mode_type
The RCLP mode.
Definition: hw_clk_da1459x.h:141
REG_SET_FIELD
#define REG_SET_FIELD(base, reg, field, var, val)
Set register field value.
Definition: sdk_defs.h:626
CRG_TOP_CLK_CTRL_REG_RUNNING_AT_RC32M_Msk
#define CRG_TOP_CLK_CTRL_REG_RUNNING_AT_RC32M_Msk
Definition: DA1459x-00.h:1957
ahb_div1
Divide by 1.
Definition: hw_clk.h:76
hw_clk_calibration_status_irq
__STATIC_INLINE bool hw_clk_calibration_status_irq(void)
Read the status of the clock calibration interrupt.
Definition: hw_clk_da1459x.h:551
hw_clk_calibration_clear_irq
__STATIC_INLINE void hw_clk_calibration_clear_irq(void)
Clear the clock calibration interrupt.
Definition: hw_clk_da1459x.h:541
dg_configEXT_LP_IS_DIGITAL
#define dg_configEXT_LP_IS_DIGITAL
External LP type.
Definition: bsp_defaults.h:174
RCLP_DEFAULT
32kHz/512kHz
Definition: hw_clk_da1459x.h:142
hw_clk_is_xtalm_started
__STATIC_INLINE bool hw_clk_is_xtalm_started(void)
Check if the XTAL32M has settled.
Definition: hw_clk_da1459x.h:262
cpu_clk_t
enum cpu_clk_type cpu_clk_t
The CPU clock type (speed)
GLOBAL_INT_DISABLE
#define GLOBAL_INT_DISABLE()
Macro to disable all interrupts.
Definition: sdk_defs.h:452
hw_clk_dblr_sys_off
__STATIC_FORCEINLINE void hw_clk_dblr_sys_off(void)
Disable the Doubler.
Definition: hw_clk_da1459x.h:701
hw_clk_set_sysclk
__STATIC_INLINE void hw_clk_set_sysclk(sys_clk_is_t mode)
Set System clock.
Definition: hw_clk_da1459x.h:599
hw_clk_xtalm_configure_cur_set
int8_t hw_clk_xtalm_configure_cur_set(void)
Configure XTAL32M current setting.
cpu_clk_type
cpu_clk_type
The CPU clock type (speed)
Definition: hw_clk_da1459x.h:151
RCLP_FORCE_FAST
512kHz
Definition: hw_clk_da1459x.h:144
hw_clk_get_system_clock
__RETAINED_CODE sys_clk_t hw_clk_get_system_clock(void)
Get the current system clock.
ahb_div16
Divide by 16.
Definition: hw_clk.h:80