【发布时间】:2017-02-03 13:41:14
【问题描述】:
我正在尝试将我的 SAMD21 时钟配置为尽可能快。所以我使用内部 8 MHz 振荡器为通用时钟发生器 1(预分频器为 8)提供通用时钟,以生成一个通用时钟来为数字锁相环提供信号,而数字锁相环又为通用时钟发生器 0(我的主时钟)提供信号应该给 CPU 计时,但是 micro 运行速度很慢,我哪里出错了? 我遵循了这个指南http://borkedlabs.com/2014/08/21/asf-samd21-dpll-for-internal-clock-from-internal-8mhz/,但它不起作用。这是我的代码:
void system_clock_init(void)
{
SYSCTRL->INTFLAG.reg = SYSCTRL_INTFLAG_BOD33RDY | SYSCTRL_INTFLAG_BOD33DET | SYSCTRL_INTFLAG_DFLLRDY;
/* switch off all peripheral clocks to save power */
//_switch_peripheral_gclk();
/* configure and enable generic clock generator 1 (GENCTRL and GENDIV registers of GCLK module) */
struct system_gclk_gen_config gclk_gen_config1;
system_gclk_gen_get_config_defaults(&gclk_gen_config1);
gclk_gen_config1.source_clock = SYSTEM_CLOCK_SOURCE_OSC8M;
gclk_gen_config1.division_factor = 8;
gclk_gen_config1.output_enable = false;
system_gclk_gen_set_config(GCLK_GENERATOR_1,&gclk_gen_config1);
system_gclk_gen_enable(GCLK_GENERATOR_1);
/* configure and enable generic clock for DPLL (CLKCTRL of GCLK module) */
struct system_gclk_chan_config gclk_chan_config;
system_gclk_chan_get_config_defaults(&gclk_chan_config);
gclk_chan_config.source_generator = GCLK_GENERATOR_1;
system_gclk_chan_set_config(SYSCTRL_GCLK_ID_FDPLL,&gclk_chan_config);
system_gclk_chan_enable(SYSCTRL_GCLK_ID_FDPLL);
/* configure and enable clock source: DPLL (SYSCTRL registers) */
struct system_clock_source_dpll_config dpll_config;
system_clock_source_dpll_get_config_defaults(&dpll_config);
dpll_config.reference_clock = SYSTEM_CLOCK_SOURCE_DPLL_REFERENCE_CLOCK_GCLK;
dpll_config.reference_divider = 1;
dpll_config.reference_frequency = 1000000;
dpll_config.output_frequency = 30000000;
system_clock_source_dpll_set_config(&dpll_config);
system_clock_source_enable(SYSTEM_CLOCK_SOURCE_DPLL);
/* set NVM wait states */
system_flash_set_waitstates(2);
/* configure and enable generic clock 0 (GCLK_MAIN) */
struct system_gclk_gen_config gclk_gen_config0;
system_gclk_gen_get_config_defaults(&gclk_gen_config0);
gclk_gen_config0.source_clock = SYSTEM_CLOCK_SOURCE_DPLL;
gclk_gen_config0.division_factor = 1;
system_gclk_gen_set_config(GCLK_GENERATOR_0,&gclk_gen_config0);
system_gclk_gen_enable(GCLK_GENERATOR_0);
}
我更新了 conf_clocks.h 标头以反映更改(我不知道这些宏是否在其他地方被引用,以防万一)并且我更改了从 system_init() 调用的 system_clock_init() 函数。
【问题讨论】:
标签: configuration arm clock atmel cortex-m