main.c 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /*!
  2. \file main.c
  3. \brief CTC is used to trim internal 48MHz RC oscillator with LXTAL clock
  4. */
  5. /*
  6. Copyright (C) 2017 GigaDevice
  7. 2017-06-06, V1.0.0, firmware for GD32F3x0
  8. */
  9. #include "gd32f3x0.h"
  10. #include "gd32f3x0_eval.h"
  11. void ctc_config(void);
  12. /*!
  13. \brief main function
  14. \param[in] none
  15. \param[out] none
  16. \retval none
  17. */
  18. int main(void)
  19. {
  20. /* init led1*/
  21. gd_eval_led_init(LED1);
  22. /* enable IRC48M clock */
  23. rcu_osci_on(RCU_IRC48M);
  24. /* wait till IRC48M is ready */
  25. rcu_osci_stab_wait(RCU_IRC48M);
  26. /* LXTAL clock config */
  27. rcu_periph_clock_enable(RCU_PMU);
  28. pmu_backup_write_enable();
  29. /* enable LXTAL clock */
  30. rcu_osci_on(RCU_LXTAL);
  31. /* wait till LXTAL is ready */
  32. rcu_osci_stab_wait(RCU_LXTAL);
  33. /* CTC peripheral clock enable */
  34. rcu_periph_clock_enable(RCU_CTC);
  35. /* CTC config */
  36. ctc_config();
  37. while(1){
  38. /* if the clock trim is OK */
  39. if(ctc_flag_get(CTC_FLAG_CKOK) != RESET){
  40. gd_eval_led_on(LED1);
  41. }else{
  42. gd_eval_led_off(LED1);
  43. }
  44. }
  45. }
  46. /*!
  47. \brief configure the CTC peripheral
  48. \param[in] none
  49. \param[out] none
  50. \retval none
  51. */
  52. void ctc_config(void)
  53. {
  54. /* config CTC reference signal source prescaler */
  55. ctc_refsource_prescaler_config(CTC_REFSOURCE_PSC_OFF);
  56. /* select reference signal source */
  57. ctc_refsource_signal_select(CTC_REFSOURCE_LXTAL);
  58. /* select reference signal source polarity */
  59. ctc_refsource_polarity_config(CTC_REFSOURCE_POLARITY_RISING);
  60. /* config hardware automatically trim mode */
  61. ctc_hardware_trim_mode_config(CTC_HARDWARE_TRIM_MODE_ENABLE);
  62. /* config CTC counter reload value, Fclock/Fref-1 */
  63. ctc_counter_reload_value_config(0x05B8);
  64. /* config clock trim base limit value, Fclock/Fref*0.0012/2 */
  65. ctc_clock_limit_value_config(0x0002);
  66. /* CTC counter enable */
  67. ctc_counter_enable();
  68. }