本节将为系统时钟管理服务提供更为先进的应用案例。这个用例将配置主系统时钟32MHz,使用内部的PLL模块将晶体连接到单片机的频率。外围总线时钟运行的速度与CPU的时钟一样,和USB时钟将被配置为使用内部RC振荡器32MHZ(通常)的校准与框架USB启动校准参考48MHz
这个可以打开时钟管理模块的指导,来进行
首先打开以前的工程,然后看一下conf_clock.h
#ifndef CONF_CLOCK_H_INCLUDED
#define CONF_CLOCK_H_INCLUDED
#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_RC2MHZ
//#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_RC32MHZ
//#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_RC32KHZ
//#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_XOSC
//#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_PLL
/* Fbus = Fsys / (2 ^ BUS_div) */
#define CONFIG_SYSCLK_PSADIV SYSCLK_PSADIV_1
#define CONFIG_SYSCLK_PSBCDIV SYSCLK_PSBCDIV_1_1
//#define CONFIG_PLL0_SOURCE PLL_SRC_XOSC
//#define CONFIG_PLL0_SOURCE PLL_SRC_RC2MHZ
//#define CONFIG_PLL0_SOURCE PLL_SRC_RC32MHZ
/* Fpll = (Fclk * PLL_mul) / PLL_div */
//#define CONFIG_PLL0_MUL (24000000UL / BOARD_XOSC_HZ)
//#define CONFIG_PLL0_DIV 1
/* External oscillator frequency range */
/** 0.4 to 2 MHz frequency range */
//#define CONFIG_XOSC_RANGE XOSC_RANGE_04TO2
/** 2 to 9 MHz frequency range */
//#define CONFIG_XOSC_RANGE XOSC_RANGE_2TO9
/** 9 to 12 MHz frequency range */
//#define CONFIG_XOSC_RANGE XOSC_RANGE_9TO12
/** 12 to 16 MHz frequency range */
//#define CONFIG_XOSC_RANGE XOSC_RANGE_12TO16
/* DFLL autocalibration */
//#define CONFIG_OSC_AUTOCAL_RC2MHZ_REF_OSC OSC_ID_RC32KHZ
//#define CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC OSC_ID_XOSC
/* The following example clock configuration definitions can be used in XMEGA
* devices that contain a USB controller. It configures the USB controller clock
* source to use the internal (nominally) 32MHz RC oscillator, up-calibrated to
* run at 48MHz via the periodic 1ms USB Start Of Frame packets sent by the
* host. The USB controller requires 48MHz for Full Speed operation, or 6MHz
* for USB Low Speed operation.
*
* Note that when the 32MHz RC oscillator is tuned to 48MHz, it cannot be used
* directly as the system clock source; it must either be prescaled down to a
* speed below the maximum operating frequency given in the datasheet, or an
* alternative clock source (e.g. the internal 2MHz RC Oscillator, multiplied
* to a higher frequency via the internal PLL module) must be used instead.
*/
#define CONFIG_USBCLK_SOURCE USBCLK_SRC_RCOSC
//#define CONFIG_OSC_RC32_CAL 48000000UL
//#define CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC OSC_ID_USBSOF
/* Use to enable and select RTC clock source */
//#define CONFIG_RTC_SOURCE SYSCLK_RTCSRC_ULP
#endif /* CONF_CLOCK_H_INCLUDED */
同指导上的还真不一样,按照指导上的步骤来完成。
#ifndef CONF_CLOCK_H_INCLUDED
#define CONF_CLOCK_H_INCLUDED
//#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_RC2MHZ
//#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_RC32MHZ
//#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_RC32KHZ
#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_XOSC
//#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_PLL
/* Fbus = Fsys / (2 ^ BUS_div) */
#define CONFIG_SYSCLK_PSADIV SYSCLK_PSADIV_1
#define CONFIG_SYSCLK_PSBCDIV SYSCLK_PSBCDIV_1_2
#define CONFIG_PLL0_SOURCE PLL_SRC_XOSC
//#define CONFIG_PLL0_SOURCE PLL_SRC_RC2MHZ
//#define CONFIG_PLL0_SOURCE PLL_SRC_RC32MHZ
/* Fpll = (Fclk * PLL_mul) / PLL_div */
#define CONFIG_PLL0_MUL (32000000UL / BOARD_XOSC_HZ)
#define CONFIG_PLL0_DIV 1
/* External oscillator frequency range */
/** 0.4 to 2 MHz frequency range */
//#define CONFIG_XOSC_RANGE XOSC_RANGE_04TO2
/** 2 to 9 MHz frequency range */
//#define CONFIG_XOSC_RANGE XOSC_RANGE_2TO9
/** 9 to 12 MHz frequency range */
//#define CONFIG_XOSC_RANGE XOSC_RANGE_9TO12
/** 12 to 16 MHz frequency range */
//#define CONFIG_XOSC_RANGE XOSC_RANGE_12TO16
/* DFLL autocalibration */
//#define CONFIG_OSC_AUTOCAL_RC2MHZ_REF_OSC OSC_ID_RC32KHZ
//#define CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC OSC_ID_XOSC
/* The following example clock configuration definitions can be used in XMEGA
* devices that contain a USB controller. It configures the USB controller clock
* source to use the internal (nominally) 32MHz RC oscillator, up-calibrated to
* run at 48MHz via the periodic 1ms USB Start Of Frame packets sent by the
* host. The USB controller requires 48MHz for Full Speed operation, or 6MHz
* for USB Low Speed operation.
*
* Note that when the 32MHz RC oscillator is tuned to 48MHz, it cannot be used
* directly as the system clock source; it must either be prescaled down to a
* speed below the maximum operating frequency given in the datasheet, or an
* alternative clock source (e.g. the internal 2MHz RC Oscillator, multiplied
* to a higher frequency via the internal PLL module) must be used instead.
*/
#define CONFIG_USBCLK_SOURCE USBCLK_SRC_RCOSC
#define CONFIG_OSC_RC32_CAL 48000000UL
#define CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC OSC_ID_USBSOF
//#define CONFIG_OSC_AUTOCAL OSC_ID_RC32MHZ
/* Use to enable and select RTC clock source */
//#define CONFIG_RTC_SOURCE SYSCLK_RTCSRC_ULP
#endif /* CONF_CLOCK_H_INCLUDED */
这时编译一下,编译通过,这时系统时钟已经变成32MHz和USB 48MHz啦!!!!
|