PAGE1
PAGE1
SAME系列的时钟系统
时钟系统概述
时钟系统是单片机(MCU)中非常关键的组成部分,它直接影响到系统的性能、功耗和可靠性。在SAME系列单片机中,时钟系统的设计非常灵活,支持多种时钟源和时钟配置。本节将详细介绍SAME系列单片机的时钟系统,包括时钟源、时钟树、时钟配置和时钟监控等方面。
时钟源
SAME系列单片机支持多种时钟源,主要包括内部RC振荡器、外部晶体振荡器、外部时钟信号和PLL(锁相环)。这些时钟源可以单独使用,也可以组合使用,以满足不同的应用需求。
内部RC振荡器
内部RC振荡器是单片机内置的时钟源,通常用于启动时钟或低功耗模式。SAME系列单片机通常提供多个内部RC振荡器,例如8MHz的慢速RC振荡器和48MHz的快速RC振荡器。
配置内部RC振荡器
//配置8MHz慢速RC振荡器
voidconfigure_8MHz_SlowRC(void){
//使能8MHz慢速RC振荡器
PMC-CKGR_SCSR|=PMC_CKGR_SCSR_SCS;
//等待8MHz慢速RC振荡器稳定
while(!(PMC-CKGR_SCSRPMC_CKGR_SCSR_OSCS)){
//等待稳定
}
}
//配置48MHz快速RC振荡器
voidconfigure_48MHz_FastRC(void){
//使能48MHz快速RC振荡器
PMC-CKGR_UCKR|=PMC_CKGR_UCKR_UPLLEN;
//等待48MHz快速RC振荡器稳定
while(!(PMC-PMC_SRPMC_SR_LOCKU)){
//等待稳定
}
}
外部晶体振荡器
外部晶体振荡器通过外部连接的晶体提供精确的时钟源。SAME系列单片机支持多种频率的外部晶体振荡器,例如4MHz、12MHz和20MHz等。
配置外部晶体振荡器
//配置12MHz外部晶体振荡器
voidconfigure_12MHz_Xtal(void){
//使能外部晶体振荡器
PMC-CKGR_MOR|=PMC_CKGR_MOR_MOSCEN|PMC_CKGR_MOR_OSCOUNT(0x80);
//等待外部晶体振荡器稳定
while(!(PMC-PMC_SRPMC_SR_MOSCS)){
//等待稳定
}
}
外部时钟信号
外部时钟信号是通过外部引脚输入的时钟信号,可以用于特定的应用场景,例如同步外部设备或作为系统时钟源。
配置外部时钟信号
//配置外部时钟信号
voidconfigure_ExternalClock(void){
//使能外部时钟信号
PMC-CKGR_MOR|=PMC_CKGR_MOR_MOSCEN|PMC_CKGR_MOR_OSCSEL;
//等待外部时钟信号稳定
while(!(PMC-PMC_SRPMC_SR_MOSCS)){
//等待稳定
}
}
PLL(锁相环)
PLL用于将低频时钟源倍频到高频时钟源,以满足高性能应用的需求。SAME系列单片机通常提供多个PLL,可以通过配置实现不同的倍频效果。
配置PLL
//配置PLL
voidconfigure_PLL(void){
//使能PLL
PMC-CKGR_PLLAR|=PMC_CKGR_PLLAR_MULA(47)|PMC_CKGR_PLLAR_DIVA(1);
//选择PLL时钟源
PMC-CKGR_PLLAR|=PMC_CKGR_PLLAR_PLLEN|PMC_CKGR_PLLAR_ONE;
//等待PLL稳定
while(!(PMC-PMC_SRPMC_SR_LOCKA)){
//等待稳定
}
}
时钟树
时钟树是描述时钟源如何通过各种分频器和选择器传递到系统各部分的结构。SAME系列单片机的时钟树设计复杂,但非常灵活,可以满足多种时钟配置需求。
主时钟
主时钟是系统的主要时钟源,通常由外部晶体振荡器、内部RC振荡器或PLL提供。主时钟的选择和配置通过PMC(PowerManagementController)寄存器进行。
选择主时钟源
//选择主时钟源
voidsele