1
0

board.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #include "board.h"
  2. #include <clock.h>
  3. #include <gclk.h>
  4. #include <system.h>
  5. #include <rtthread.h>
  6. /**
  7. * This is the timer interrupt service routine.
  8. *
  9. */
  10. void SysTick_Handler(void)
  11. {
  12. /* enter interrupt */
  13. rt_interrupt_enter();
  14. rt_tick_increase();
  15. /* leave interrupt */
  16. rt_interrupt_leave();
  17. }
  18. void configure_extosc32k(void);
  19. void configure_dfll_open_loop(void);
  20. //! [setup]
  21. //! [config_extosc32k]
  22. void configure_extosc32k(void)
  23. {
  24. //! [config_extosc32k_config]
  25. struct system_clock_source_xosc32k_config config_ext32k;
  26. //! [config_extosc32k_config]
  27. //! [config_extosc32k_get_defaults]
  28. system_clock_source_xosc32k_get_config_defaults(&config_ext32k);
  29. //! [config_extosc32k_get_defaults]
  30. //! [config_extosc32k_change_defaults]
  31. config_ext32k.startup_time = SYSTEM_XOSC32K_STARTUP_4096;
  32. config_ext32k.on_demand = false;
  33. //! [config_extosc32k_change_defaults]
  34. //! [config_extosc32k_set_config]
  35. system_clock_source_xosc32k_set_config(&config_ext32k);
  36. //! [config_extosc32k_set_config]
  37. system_clock_source_enable(SYSTEM_CLOCK_SOURCE_XOSC32K);
  38. while(!system_clock_source_is_ready(SYSTEM_CLOCK_SOURCE_XOSC32K));
  39. }
  40. //! [config_extosc32k]
  41. #if (!SAMC21)
  42. //! [config_dfll]
  43. void configure_dfll_open_loop(void)
  44. {
  45. //! [config_dfll_config]
  46. struct system_clock_source_dfll_config config_dfll;
  47. //! [config_dfll_config]
  48. //! [config_dfll_get_defaults]
  49. system_clock_source_dfll_get_config_defaults(&config_dfll);
  50. //! [config_dfll_get_defaults]
  51. config_dfll.coarse_value = (*((uint8_t*)(0x806020 + 7))) >> 2;// 0x1f / 4; /* Midpoint */
  52. config_dfll.fine_value = (*((uint32_t*)(0x806020 + 8))) & 0x3FF;//0xff / 4; /* Midpoint */
  53. //! [config_dfll_set_config]
  54. system_clock_source_dfll_set_config(&config_dfll);
  55. //! [config_dfll_set_config]
  56. //! [enable_dfll_main]
  57. system_clock_source_enable(SYSTEM_CLOCK_SOURCE_DFLL);
  58. // while(!system_clock_source_is_ready(SYSTEM_CLOCK_SOURCE_DFLL));
  59. //! [enable_dfll_main]
  60. /* Configure flash wait states before switching to high frequency clock */
  61. //! [set_sys_wait_states]
  62. system_flash_set_waitstates(2);
  63. //! [set_sys_wait_states]
  64. /* Change system clock to DFLL */
  65. //! [set_sys_clk_src]
  66. struct system_gclk_gen_config config_gclock_gen;
  67. system_gclk_gen_get_config_defaults(&config_gclock_gen);
  68. config_gclock_gen.source_clock = SYSTEM_CLOCK_SOURCE_DFLL;
  69. config_gclock_gen.division_factor = 1;
  70. system_gclk_gen_set_config(GCLK_GENERATOR_0, &config_gclock_gen);
  71. //! [set_sys_clk_src]
  72. }
  73. //! [config_dfll]
  74. #endif
  75. void rt_board_init(void)
  76. {
  77. extern void uart_init(void);
  78. // configure_extosc32k();
  79. // configure_dfll_open_loop();
  80. system_init();
  81. /* initialize systick */
  82. SystemCoreClock = system_gclk_gen_get_hz(0);
  83. SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);
  84. uart_init();
  85. rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
  86. }