123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #include "board.h"
- #include <clock.h>
- #include <gclk.h>
- #include <system.h>
- #include <rtthread.h>
- /**
- * This is the timer interrupt service routine.
- *
- */
- void SysTick_Handler(void)
- {
- /* enter interrupt */
- rt_interrupt_enter();
- rt_tick_increase();
- /* leave interrupt */
- rt_interrupt_leave();
- }
- void configure_extosc32k(void);
- void configure_dfll_open_loop(void);
- //! [setup]
- //! [config_extosc32k]
- void configure_extosc32k(void)
- {
- //! [config_extosc32k_config]
- struct system_clock_source_xosc32k_config config_ext32k;
- //! [config_extosc32k_config]
- //! [config_extosc32k_get_defaults]
- system_clock_source_xosc32k_get_config_defaults(&config_ext32k);
- //! [config_extosc32k_get_defaults]
- //! [config_extosc32k_change_defaults]
- config_ext32k.startup_time = SYSTEM_XOSC32K_STARTUP_4096;
- config_ext32k.on_demand = false;
- //! [config_extosc32k_change_defaults]
- //! [config_extosc32k_set_config]
- system_clock_source_xosc32k_set_config(&config_ext32k);
- //! [config_extosc32k_set_config]
- system_clock_source_enable(SYSTEM_CLOCK_SOURCE_XOSC32K);
- while(!system_clock_source_is_ready(SYSTEM_CLOCK_SOURCE_XOSC32K));
- }
- //! [config_extosc32k]
- #if (!SAMC21)
- //! [config_dfll]
- void configure_dfll_open_loop(void)
- {
- //! [config_dfll_config]
- struct system_clock_source_dfll_config config_dfll;
- //! [config_dfll_config]
- //! [config_dfll_get_defaults]
- system_clock_source_dfll_get_config_defaults(&config_dfll);
- //! [config_dfll_get_defaults]
- config_dfll.coarse_value = (*((uint8_t*)(0x806020 + 7))) >> 2;// 0x1f / 4; /* Midpoint */
- config_dfll.fine_value = (*((uint32_t*)(0x806020 + 8))) & 0x3FF;//0xff / 4; /* Midpoint */
- //! [config_dfll_set_config]
- system_clock_source_dfll_set_config(&config_dfll);
- //! [config_dfll_set_config]
- //! [enable_dfll_main]
- system_clock_source_enable(SYSTEM_CLOCK_SOURCE_DFLL);
- // while(!system_clock_source_is_ready(SYSTEM_CLOCK_SOURCE_DFLL));
- //! [enable_dfll_main]
- /* Configure flash wait states before switching to high frequency clock */
- //! [set_sys_wait_states]
- system_flash_set_waitstates(2);
- //! [set_sys_wait_states]
- /* Change system clock to DFLL */
- //! [set_sys_clk_src]
- struct system_gclk_gen_config config_gclock_gen;
- system_gclk_gen_get_config_defaults(&config_gclock_gen);
- config_gclock_gen.source_clock = SYSTEM_CLOCK_SOURCE_DFLL;
- config_gclock_gen.division_factor = 1;
- system_gclk_gen_set_config(GCLK_GENERATOR_0, &config_gclock_gen);
- //! [set_sys_clk_src]
- }
- //! [config_dfll]
- #endif
- void rt_board_init(void)
- {
- extern void uart_init(void);
- // configure_extosc32k();
- // configure_dfll_open_loop();
- system_init();
- /* initialize systick */
- SystemCoreClock = system_gclk_gen_get_hz(0);
- SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);
- uart_init();
- rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
- }
|