1,时钟系统 任何嵌入式系统要正常运行都必须需要一个稳定的时钟系统。下面简单介绍一下xmega的时钟系统及初始化过程。 Xmega时钟系统时钟源包括内部时钟源和外部时钟源。 内部时钟源有: 32MHz内部RC振荡器; 2MHZ内部RC振荡器; 32768kHz内部RC振荡器; 32Khz内部ULP低功耗振荡器; 外部时钟源: 0.4~16MHZ晶体振荡器;引脚XTAL1和XTAL2; 32.768kHZ晶体振荡器;引脚为TOSC1和TOSC2; 还可以从外部直接接入时钟。 通过上述时钟源通过锁相环(PLL)可以倍频到32MHz。 时钟分系统时钟、CPU时钟、外设时钟、外设分频时钟,同步时钟。 系统时钟选择与分频:所有时钟源及PLL都可以作为系统时钟CLK(sys),选择时钟源后,进入分频器进行分频。分频后作为各种外设时钟频率。
0
|
|
|
|
下面说一下PLL的倍频配置:
F(pll)=F(in)*PLL_FAC
下面4个时钟源可以作为锁相环的输入时钟:
MHz internal oscillator ,
32 MHz internal oscillator divided by 4
0.4 - 16 MHz Crystal Oscillator
External clock
要使用PLL,必须遵循下面几个步骤:
1,使能输入时钟源;
2,选择输入时钟源和设置倍频因子;
3,等待时钟源稳定;
4,使能PLL;
|
|
|
|
|
相关操作参见相关寄存器操作。具体的寄存器请到官网下载数据手册和用户手册查阅。下面我在Atmel Studio 6.2的基础上举例初始化时钟,初始化使用PLL到32MHz。参照上一章节的介绍在项目中添加时钟系统的驱动模块。
在系统时钟模块中的配置文件conf_clock.h中定义宏定义:
看着上面代码量很大,其实根据宏定义,执行的没有几句,很少的语句。读起来很简单的。
初始化后可以通过sysclk_get_main_hz这个函数读取系统时钟,该函数返回的就是系统时钟频率,看是否与初始化是否成功。
|
|
|
|
|