请教SAMD20/D21 48M时钟设置不成功问题
各位大侠在samd21-xpro板子上有32.768khz的晶振,我用ASF建立工程,然后查看时钟配置,的确是用32.768来产生48M时钟 供系统工作
但是通过程序测试发现 系统并未工作在48M 下,苦思不得其解,请高人指点一下。
系统时钟配置代码如下:
#ifndef CONF_CLOCKS_H_INCLUDED
#define CONF_CLOCKS_H_INCLUDED
/* System clock bus configuration */
#define CONF_CLOCK_FLASH_WAIT_STATES 2
#define CONF_CLOCK_CPU_DIVIDER SYSTEM_MAIN_CLOCK_DIV_1
#define CONF_CLOCK_APBA_DIVIDER SYSTEM_MAIN_CLOCK_DIV_1
#define CONF_CLOCK_APBB_DIVIDER SYSTEM_MAIN_CLOCK_DIV_1
#define CONF_CLOCK_APBC_DIVIDER SYSTEM_MAIN_CLOCK_DIV_1
/* SYSTEM_CLOCK_SOURCE_OSC8M configuration - Internal 8MHz oscillator */
#define CONF_CLOCK_OSC8M_PRESCALER SYSTEM_OSC8M_DIV_1
#define CONF_CLOCK_OSC8M_ON_DEMAND true
#define CONF_CLOCK_OSC8M_RUN_IN_STANDBY false
/* SYSTEM_CLOCK_SOURCE_XOSC configuration - External clock/oscillator */
#define CONF_CLOCK_XOSC_ENABLE false
#define CONF_CLOCK_XOSC_EXTERNAL_CRYSTAL SYSTEM_CLOCK_EXTERNAL_CRYSTAL
#define CONF_CLOCK_XOSC_EXTERNAL_FREQUENCY 12000000UL
#define CONF_CLOCK_XOSC_STARTUP_TIME SYSTEM_XOSC_STARTUP_32768
#define CONF_CLOCK_XOSC_AUTO_GAIN_CONTROL true
#define CONF_CLOCK_XOSC_ON_DEMAND true
#define CONF_CLOCK_XOSC_RUN_IN_STANDBY false
/* SYSTEM_CLOCK_SOURCE_XOSC32K configuration - External 32KHz crystal/clock oscillator */
#define CONF_CLOCK_XOSC32K_ENABLE true
#define CONF_CLOCK_XOSC32K_EXTERNAL_CRYSTAL SYSTEM_CLOCK_EXTERNAL_CRYSTAL
#define CONF_CLOCK_XOSC32K_STARTUP_TIME SYSTEM_XOSC32K_STARTUP_4096
#define CONF_CLOCK_XOSC32K_AUTO_AMPLITUDE_CONTROLfalse
#define CONF_CLOCK_XOSC32K_ENABLE_1KHZ_OUPUT false
#define CONF_CLOCK_XOSC32K_ENABLE_32KHZ_OUTPUTtrue
#define CONF_CLOCK_XOSC32K_ON_DEMAND true
#define CONF_CLOCK_XOSC32K_RUN_IN_STANDBY false
/* SYSTEM_CLOCK_SOURCE_OSC32K configuration - Internal 32KHz oscillator */
#define CONF_CLOCK_OSC32K_ENABLE false
#define CONF_CLOCK_OSC32K_STARTUP_TIME SYSTEM_OSC32K_STARTUP_10
#define CONF_CLOCK_OSC32K_ENABLE_1KHZ_OUTPUT true
#define CONF_CLOCK_OSC32K_ENABLE_32KHZ_OUTPUT true
#define CONF_CLOCK_OSC32K_ON_DEMAND true
#define CONF_CLOCK_OSC32K_RUN_IN_STANDBY false
/* SYSTEM_CLOCK_SOURCE_DFLL configuration - Digital Frequency Locked Loop */
#define CONF_CLOCK_DFLL_ENABLE true
#define CONF_CLOCK_DFLL_LOOP_MODE SYSTEM_CLOCK_DFLL_LOOP_MODE_CLOSED
#define CONF_CLOCK_DFLL_ON_DEMAND false
/* DFLL open loop mode configuration */
#define CONF_CLOCK_DFLL_FINE_VALUE (512)
/* DFLL closed loop mode configuration */
#define CONF_CLOCK_DFLL_SOURCE_GCLK_GENERATOR GCLK_GENERATOR_1
#define CONF_CLOCK_DFLL_MULTIPLY_FACTOR 1465//(48000000 / 32768)
#define CONF_CLOCK_DFLL_QUICK_LOCK true
#define CONF_CLOCK_DFLL_TRACK_AFTER_FINE_LOCK true
#define CONF_CLOCK_DFLL_KEEP_LOCK_ON_WAKEUP true
#define CONF_CLOCK_DFLL_ENABLE_CHILL_CYCLE true
#define CONF_CLOCK_DFLL_MAX_COARSE_STEP_SIZE (0x1f / 4)
#define CONF_CLOCK_DFLL_MAX_FINE_STEP_SIZE (0xff / 4)
/* SYSTEM_CLOCK_SOURCE_DPLL configuration - Digital Phase-Locked Loop */
#define CONF_CLOCK_DPLL_ENABLE false
#define CONF_CLOCK_DPLL_ON_DEMAND true
#define CONF_CLOCK_DPLL_RUN_IN_STANDBY false
#define CONF_CLOCK_DPLL_LOCK_BYPASS false
#define CONF_CLOCK_DPLL_WAKE_UP_FAST false
#define CONF_CLOCK_DPLL_LOW_POWER_ENABLE false
#define CONF_CLOCK_DPLL_LOCK_TIME SYSTEM_CLOCK_SOURCE_DPLL_LOCK_TIME_NO_TIMEOUT
#define CONF_CLOCK_DPLL_REFERENCE_CLOCK SYSTEM_CLOCK_SOURCE_DPLL_REFERENCE_CLOCK_REF0
#define CONF_CLOCK_DPLL_FILTER SYSTEM_CLOCK_SOURCE_DPLL_FILTER_DEFAULT
#define CONF_CLOCK_DPLL_REFERENCE_FREQUENCY 32768
#define CONF_CLOCK_DPLL_REFERENCE_DIVIDER 1
#define CONF_CLOCK_DPLL_OUTPUT_FREQUENCY 48000000
/* DPLL GCLK reference configuration */
#define CONF_CLOCK_DPLL_REFERENCE_GCLK_GENERATORGCLK_GENERATOR_1
/* DPLL GCLK lock timer configuration */
#define CONF_CLOCK_DPLL_LOCK_GCLK_GENERATOR GCLK_GENERATOR_1
/* Set this to true to configure the GCLK when running clocks_init. If set to
* false, none of the GCLK generators will be configured in clocks_init(). */
#define CONF_CLOCK_CONFIGURE_GCLK true
/* Configure GCLK generator 0 (Main Clock) */
#define CONF_CLOCK_GCLK_0_ENABLE true
#define CONF_CLOCK_GCLK_0_RUN_IN_STANDBY false
#define CONF_CLOCK_GCLK_0_CLOCK_SOURCE SYSTEM_CLOCK_SOURCE_DFLL
#define CONF_CLOCK_GCLK_0_PRESCALER 1
#define CONF_CLOCK_GCLK_0_OUTPUT_ENABLE false
/* Configure GCLK generator 1 */
#define CONF_CLOCK_GCLK_1_ENABLE true
#define CONF_CLOCK_GCLK_1_RUN_IN_STANDBY false
#define CONF_CLOCK_GCLK_1_CLOCK_SOURCE SYSTEM_CLOCK_SOURCE_XOSC32K
#define CONF_CLOCK_GCLK_1_PRESCALER 1
#define CONF_CLOCK_GCLK_1_OUTPUT_ENABLE false
/* Configure GCLK generator 2 (RTC) */
#define CONF_CLOCK_GCLK_2_ENABLE false
#define CONF_CLOCK_GCLK_2_RUN_IN_STANDBY false
#define CONF_CLOCK_GCLK_2_CLOCK_SOURCE SYSTEM_CLOCK_SOURCE_OSC32K
#define CONF_CLOCK_GCLK_2_PRESCALER 32
#define CONF_CLOCK_GCLK_2_OUTPUT_ENABLE false
/* Configure GCLK generator 3 */
#define CONF_CLOCK_GCLK_3_ENABLE false
#define CONF_CLOCK_GCLK_3_RUN_IN_STANDBY false
#define CONF_CLOCK_GCLK_3_CLOCK_SOURCE SYSTEM_CLOCK_SOURCE_OSC8M
#define CONF_CLOCK_GCLK_3_PRESCALER 1
#define CONF_CLOCK_GCLK_3_OUTPUT_ENABLE false
/* Configure GCLK generator 4 */
#define CONF_CLOCK_GCLK_4_ENABLE false
#define CONF_CLOCK_GCLK_4_RUN_IN_STANDBY false
#define CONF_CLOCK_GCLK_4_CLOCK_SOURCE SYSTEM_CLOCK_SOURCE_OSC8M
#define CONF_CLOCK_GCLK_4_PRESCALER 1
#define CONF_CLOCK_GCLK_4_OUTPUT_ENABLE false
/* Configure GCLK generator 5 */
#define CONF_CLOCK_GCLK_5_ENABLE false
#define CONF_CLOCK_GCLK_5_RUN_IN_STANDBY false
#define CONF_CLOCK_GCLK_5_CLOCK_SOURCE SYSTEM_CLOCK_SOURCE_OSC8M
#define CONF_CLOCK_GCLK_5_PRESCALER 1
#define CONF_CLOCK_GCLK_5_OUTPUT_ENABLE false
/* Configure GCLK generator 6 */
#define CONF_CLOCK_GCLK_6_ENABLE false
#define CONF_CLOCK_GCLK_6_RUN_IN_STANDBY false
#define CONF_CLOCK_GCLK_6_CLOCK_SOURCE SYSTEM_CLOCK_SOURCE_OSC8M
#define CONF_CLOCK_GCLK_6_PRESCALER 1
#define CONF_CLOCK_GCLK_6_OUTPUT_ENABLE false
/* Configure GCLK generator 7 */
#define CONF_CLOCK_GCLK_7_ENABLE false
#define CONF_CLOCK_GCLK_7_RUN_IN_STANDBY false
#define CONF_CLOCK_GCLK_7_CLOCK_SOURCE SYSTEM_CLOCK_SOURCE_OSC8M
#define CONF_CLOCK_GCLK_7_PRESCALER 1
#define CONF_CLOCK_GCLK_7_OUTPUT_ENABLE false
/* Configure GCLK generator 8 */
#define CONF_CLOCK_GCLK_8_ENABLE false
#define CONF_CLOCK_GCLK_8_RUN_IN_STANDBY false
#define CONF_CLOCK_GCLK_8_CLOCK_SOURCE SYSTEM_CLOCK_SOURCE_OSC8M
#define CONF_CLOCK_GCLK_8_PRESCALER 1
#define CONF_CLOCK_GCLK_8_OUTPUT_ENABLE false
#endif /* CONF_CLOCKS_H_INCLUDED */
主程序如下:
system_init();
while (true)
{
port_pin_set_output_level(LED_0_PIN, ledState=!ledState);
double i=0;
for (i=0;i<1000000;i++)
{
}
}
我现在灯8s 才能翻转一下,明显不对。
恳请高人指点 上面都写了,external 12M晶体,你眼是不是选择性失明了? 楼主也载在atmel start这个坑里面呀。感觉这个破玩意好难用呀,除了问题还没有地方问。 wye11083 发表于 2017-12-2 07:39
上面都写了,external 12M晶体,你眼是不是选择性失明了?
/* SYSTEM_CLOCK_SOURCE_XOSC configuration - External clock/oscillator */
#define CONF_CLOCK_XOSC_ENABLE false
#define CONF_CLOCK_XOSC_EXTERNAL_CRYSTAL SYSTEM_CLOCK_EXTERNAL_CRYSTAL
#define CONF_CLOCK_XOSC_EXTERNAL_FREQUENCY 12000000UL
。。。。
感谢你的回复
12M时钟是禁用的 使用的外部的32.768khz时钟 用asf自带的例程 解决了
已经能跑48M了
页:
[1]