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