锁相环配置时钟
时钟-锁相环
时钟时钟--锁相锁相环环时钟时钟((OCXO OCXO,,恒温晶振)的主要部分和功能是一个锁相环的主要部分和功能是一个锁相环。
锁相环是一个可被外来频率相环是一个可被外来频率((基准频率基准频率,,同步频率同步频率))同步的振荡器同步的振荡器((下面讲述的振荡器都是晶振讲述的振荡器都是晶振))。
目前常用的锁相环主要有模拟锁相环目前常用的锁相环主要有模拟锁相环目前常用的锁相环主要有模拟锁相环、、集成电路数字锁相环集成电路数字锁相环、、单片集成电路锁相环单片集成电路锁相环、、有记忆能力的有记忆能力的((微机控制的微机控制的))锁相环锁相环。
模拟锁相环最基本的的方框图如图1。
它包括鉴相器它包括鉴相器、、低通滤波器和压控晶振波器和压控晶振((可通过外加直流电压在一定范围内改变其输出频率)。
同步频率和晶振输出的频率同时加到鉴相器上同步频率和晶振输出的频率同时加到鉴相器上,,在鉴相器里在鉴相器里,,基准频率对晶振进行电压取样基准频率对晶振进行电压取样,,输出一个和它们的相位差成比例关系的电压的电压,,此电压经低通滤波器后变成直流电压此电压经低通滤波器后变成直流电压,,此直流电压控制晶振的频率的频率,,使它与同步频率的频率同步使它与同步频率的频率同步。
模拟锁相环的优点是电路简单有效模拟锁相环的优点是电路简单有效模拟锁相环的优点是电路简单有效,,低通滤波器设计良好时低通滤波器设计良好时,,输出频率纯净稳定出频率纯净稳定,,跟随性能好跟随性能好,,理想情况下输出频率完全等于同步频率,对晶振压控特性的线性要求不高对晶振压控特性的线性要求不高。
缺点是一旦失去基准频率缺点是一旦失去基准频率,,输出频率立刻跳回晶振本身的频率出频率立刻跳回晶振本身的频率。
------------------------------------------------------------------------------------------------------------------------- 摘自:同步频输出。
Cyclone器件中PLL的使用
Cyclone器件中PLL的使用摘要:CycloneFPGA具有锁相环(PLL)和全局时钟网络,提供完整的时钟管理方案。
CyclonePLL具有时钟倍频和分频、相位偏移、可编程占空比和外部时钟输出,进行系统级的时钟管理和偏移控制。
AlteraQuartuII软件无需任何外部器件,就可以启用CyclonePLL和相关功能。
本文将介绍如何设计和使用CyclonePLL功能。
PLL常用于同步内部器件时钟和外部时钟,使内部工作的时钟频率比外部时钟更高,时钟延迟和时钟偏移最小,减小或调整时钟到输出(TCO)和建立(TSU)时间。
关键字:CycloneFPGA锁相环PLL1.硬件结构每个CycloneFPGA包括具有多达两个PLL。
表1为几种型号CycloneFPGA内可用的PLL数量。
表1注释:(1)位于器件的左侧中部(2)位于器件的右侧中部表2:CyclonePLL功能功能时钟倍频和分频相位偏移可编程占空比内部时钟输出数量外部时钟输出数量(4)锁定端口可以输入逻辑阵列PLL 时钟输出可以输入逻辑阵列说明M/(N某后cale计数器)(1)小至156皮秒(p)的增量幅度(2),(3)每个PLL两个输出每个PLL一个输出表2注释:(1)M,N和后cale计数器的值从1至32;(2)最小的相位偏移量为压控振荡器(VCO)周期除以8;(3)对于角度调整,CycloneFPGA的偏移输出频率的增量至少为45o。
更小的角度增量可能取决于PLL时钟输出的倍频/分频系数;(4)100脚的扁平四方封装(TQFP)的EP1C3器件不支持PLLLVDS输出或外部时钟输出,144脚TQFP封装的EP1C6PLL2不支持外部时钟输出。
PLL主要作用就是把内部/外部时钟的相位和频率同步于输入参考时钟。
PLL由许多部分组成,共同完成相位调整。
CyclonePLL采用一个相位频率检测器(PFD)把参考输入时钟的上升沿和反馈时钟对齐。
根据占空比规定确定下降沿。
PLL锁相环时钟设定
PLL锁相环时钟设定未配置锁相环时(OSCCLK_PLLSEL=0):总线频率=外部晶振频率(OSCCLK)/2配置锁相环时(OSCCLK_PLLSEL=1): 系统时钟由锁相环提供,总线频率=倍频后频率(PLLCLK)/2时钟频率计算方法Fvco=2*Fosc*(SYNDIN+1)/(REFDIV+1)Fpll=Fvco/(2*POSTDIV)当POSTDIV=0时,Fpll=FvcoFbus=Fpll/2CRGFLG_LOCK==1时,说明PLLCLK稳定,可输出。
锁相环从设定到稳定需要时间,故期间应加几条空语句。
例程:void CLK_Init(void) {CLKSEL=0x00; //选择OSCCLK为系统时钟源16M PLLCTL_PLLON=1; //开启锁相环,锁相环电路允许//频率设定80M时SYNR = 0xc0 | 0x09;REFDV = 0x80 | 0x01;POSTDIV = 0x00; // PLLCLOCK=2*osc*(1+SYNR)/(1+REFDV)=160MHz; _asm(nop);_asm(nop);while(!CRGFLG_LOCK); // 时钟频率已稳定,锁相环频率锁定CLKSEL_PLLSEL=1; //使能锁相环时钟}PWM模块PWME:PWM允许寄存器,置1时允许输出。
PWMPOL:极性寄存器。
置1时首先输出高电平。
2、3、6、7、置1时clock SB 作为时钟源,置0时clock B作为时钟源PWMCAE:居中对齐允许寄存器,只有当通道输出禁止时才能设置此寄存器置1时为居中对齐,置0时左对齐PWMSCLA:比例因子寄存器A;用于提供clock SA的比例因子Clock SA的时钟频率= clock A/(2*PWMSCLA)当PWMSCLA为0时比例因子默认为256. CLOCKSB 计算方法类似,寄存器为PWMSCLB。
PWMCNTx:通道计数寄存器,一般设置值为0x00;PWMPERx:周期寄存器;左对齐时周期计算方法:PWMxPeriod=指定时钟周期乘以PWMPERx的值居中对齐时=指定时钟周期乘PWMPERx的值再乘2;PWMDTYx:占空比寄存器。
一种基于电荷泵锁相环的时钟调节电路设计
一种基于电荷泵锁相环的时钟调节电路设计王雪萍,王金龙,蔡永涛,马金龙中国电子科技集团公司第58研究所摘要:设计了一种基于电荷泵锁相环(PLL)的独特时钟调节电路,可调节时钟频率和延时,可纠正时钟偏斜,能够输出不同相位(0°,90°,180°,270°)锁定且低抖动的各种频率信号,锁相环可外部动态配置。
该电路可应用于FPGA系统集成电路的时钟发生源电路中,能够提供非常灵活的时钟调节功能。
仿真结果表明,该电路满足设计需求。
关键词:电荷泵;锁相环;时钟;FPGA中图分类号:TN492文献标识码:AA Design of Clock Regulating Circuit Basedon Charge Pump Phase Locked LoopWANG Xue-ping,WANG Jin-long,CAI Yong-tao,MA Jin-longNo.58Research Institute,China Electronics Technology CorporationAbstract:A unique clock adjusting circuit based on charge pump phase-locked loop(PLL)is designed,which can adjust the clock frequency and delay,correct the clock skew,output various frequency signals with different phase locking and low jitter(0°,90°,180°,270°).The PLL can be configured in external dynamic state.The circuit can be used in the clock generator of FPGA system integrated circuit,and can provide very flexible clock adjustment func-tion.The simulation results show that the circuit meets the design requirements.Keywords:Charge Pump;Phase-locked Loop;Clock;FPGA图1时钟调节电路结构1引言锁相环(Phase-locked Loop ,PLL )是FPGA 类系统集成电路中重要的时钟资源,随着FPGA 在通信、自动化控制、航空航天等领域应用越来越广泛[1-2],PLL 电路设计也越来越关键。
fpga内部的锁相环或者时钟管理单元
尊敬的读者,今天我将带你深入探讨FPGA内部的锁相环(PLL)和时钟管理单元(CMU)的重要性及作用。
作为FPGA内部的两个重要模块,它们对于数字电路的稳定运行和高性能至关重要。
1. PLL的基本原理FPGA内部的锁相环(PLL)是一种用于产生稳定、高质量时钟信号的重要模块。
它基本原理是利用反馈控制系统,将输入的参考时钟信号与VCO(Voltage Controlled Oscillator)输出的时钟信号进行比较,通过调节VCO的控制电压,使得两者频率、相位和相位噪声达到稳定态,从而产生与输入信号同频率、同相位、低噪声的时钟输出。
2. CMU的功能和作用时钟管理单元(CMU)则是用于对FPGA内部的时钟进行分配、缓冲和延迟控制的关键模块。
它能够确保时钟信号的稳定性、可靠性和一致性,从而满足不同逻辑单元对时序要求的最大限度地提高系统的性能和可靠性。
3. 重要性与应用FPGA内部的PLL和CMU在数字信号处理、通信系统、视频处理等领域有着广泛的应用。
在通信系统中,PLL可以用于时钟恢复、信号解调和频率合成;而CMU则可以用于时序控制、时钟分频和时钟域的划分和同步。
4. 个人观点与理解作为FPGA设计中的重要组成部分,PLL和CMU的设计与应用对于系统的稳定性和性能有着至关重要的影响。
在实际应用中,我们需要充分了解它们的原理和特性,结合具体的系统要求和性能指标,合理设计和配置PLL和CMU模块,以确保系统的高稳定性、低时钟抖动和低功耗。
总结回顾通过本文的介绍,我们对FPGA内部的PLL和CMU有了更深入的了解。
我们了解了它们的基本原理和重要性,以及在实际应用中的功能和作用。
我们也了解了它们对系统性能和稳定性的重要影响。
深入了解PLL和CMU模块有助于我们更好地设计和应用FPGA系统,提高系统的性能和稳定性。
希望通过本文的阅读,你对FPGA内部的PLL和CMU有了更深入的理解,对于其在数字电路设计和应用中的重要性有了更清晰的认识。
安路fpga锁相环用法
安路fpga锁相环用法
安路FPGA锁相环的使用方法如下:
1. 添加IP核:使用MegaWizard工程规范,将其添加到ipcore文件夹下。
设置相关参数,例如速度等级,以及是否添加异步复位、locked信号等。
locked信号用于表示锁相环的稳定性,并在时钟自锁时自动复位。
2. 配置输出时钟:包括频率、相位和占空比。
3. 编写激励文件模板:在Processing-Start-Start Test Template Writer
中创建并保存。
在Assignment-Setting-Stimulation中编译。
4. 设计复位信号:在系统锁相环不稳定或系统复位信号有效时,输出复位信号。
例如,可以assign rst_n=sys_rst_n&locked来实现这一功能。
建议查阅安路FPGA的技术手册,以获取更多信息。
同时请注意,具体使用步骤可能会根据FPGA型号有所不同,请以实际产品为准。
12_TMS320F28335 的时钟(包你明白)
DSP入门知识之时钟分析及其配置在这里,以ti公司的TMS320F28335为例讲解,TMS320F28335是TI公司推出的一款浮点型DSP,其主频可达150MHz。
在这里,主要对该芯片的时钟进行分析并讲述时钟的配置过程。
在讲述中,XCLKIN为外部时钟输入引脚,OSC为外部晶体振荡器,OSCCLK为时钟源,PLLCLK为锁相环时钟,CLKIN为CPU输入时钟,SYSCLK为系统时钟(CPU输出时钟),HSPCLK为告诉高速外设时钟,LSPCLK为低速外设时钟。
先看一下整个时钟框图:在图一中,可以看到XCLKIN和OSC通过寄存器PLLSTS的OSCOFF位来控制选择时钟源OSCCLK=XCLKIN还是OSCCLK=OSC,接着由寄存器PLLSTS的PLLOFF位控制OSCCLK 是否经过锁相环进行倍频,接着由寄存器PLLCR的DIV位来控制倍频系数,接着由寄存器PLLSTS的DIVSEL位控制CLKIN=OSCCLK是CLKIN=PLLCLK(VCOCLK)。
在图二中,可以看出CPU将输入的时钟CLKIN进行输出得到系统时钟SYSCLK,这个系统时钟就是CPU运行一个指令所需要的时钟,接着就是将SYSCLK进行分频依次得到高速外部时钟HSPCLK和低速外部时钟LSPCLK。
以上就是该芯片的时钟讲解,接下来就是时钟的配置。
时钟配置有一个流程,器件先要检测是否有丢失时钟,如果没有丢失时钟,则检查PLLSTS 的DIVSEL位是否为0,如果是0,就可以关闭主时钟入口进行时钟配置,先设定PLL倍频值,然后检测PLL倍频后的时钟相位是否锁定,如果锁定,则开启主时钟入口,此时,系统时钟也就配置好了,如果需要进行分频,此时用户才可以修改寄存器PLLSTS的DIVSEL位得到需要的时钟频率。
以上为系统时钟的配置,配置完系统时钟后,就可以配置外设时钟了。
高速外设时钟由高速外设时钟预分频寄存器HISPCP的0~2位配置即可。
STM32F072从零配置工程-自定义时钟配置详解
STM32F072从零配置⼯程-⾃定义时钟配置详解从⾃⼰的板⼦STM32F407⼊⼿,参考官⽅的SystemInit()函数:核⼼在SetSysClock()这个函数,官⽅默认是采⽤HSE(设定为8MHz)作为PLL锁相环的输⼊输出168MHz的SYSCLK;/*** @brief Setup the microcontroller system* Initialize the Embedded Flash Interface, the PLL and update the* SystemFrequency variable.* @param None* @retval None*/void SystemInit(void){/* Reset the RCC clock configuration to the default reset state ------------*//* Set HSION bit */RCC->CR |= (uint32_t)0x00000001;/* Reset CFGR register */RCC->CFGR = 0x00000000;/* Reset HSEON, CSSON and PLLON bits */RCC->CR &= (uint32_t)0xFEF6FFFF;/* Reset PLLCFGR register */RCC->PLLCFGR = 0x24003010;/* Reset HSEBYP bit */RCC->CR &= (uint32_t)0xFFFBFFFF;/* Disable all interrupts */RCC->CIR = 0x00000000;/* Configure the System clock source, PLL Multiplier and Divider factors,AHB/APBx prescalers and Flash settings ----------------------------------*/SetSysClock();}这⾥⼤致分析⼀下官⽅默认的SetSysClock()配置:由于我个⼈采⽤的是STM32F407型号的芯⽚,因此精简⼀下函数;总体思路的话:使能HSE;等待HSE初始化完毕,进⾏下⼀步设置;设置HCLK、PCLK1、PCLK2的分频系数;配置PLL,使能PLL,等待PLL初始化完毕;选择PLL作为SYSCLK,等待SYSCLK时钟设置完毕;/*** @brief Configures the System clock source, PLL Multiplier and Divider factors,* AHB/APBx prescalers and Flash settings* @Note This function should be called only once the RCC clock configuration* is reset to the default reset state (done in SystemInit() function).* @param None* @retval None*/static void SetSysClock(void){/******************************************************************************//* PLL (clocked by HSE) used as System clock source *//******************************************************************************/__IO uint32_t StartUpCounter = 0, HSEStatus = 0;/* Enable HSE */RCC->CR |= ((uint32_t)RCC_CR_HSEON);/* Wait till HSE is ready and if Time out is reached exit */do{HSEStatus = RCC->CR & RCC_CR_HSERDY;StartUpCounter++;} while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));if ((RCC->CR & RCC_CR_HSERDY) != RESET){else{HSEStatus = (uint32_t)0x00;}if (HSEStatus == (uint32_t)0x01){/* Select regulator voltage output Scale 1 mode */RCC->APB1ENR |= RCC_APB1ENR_PWREN;PWR->CR |= PWR_CR_VOS;/* HCLK = SYSCLK / 1*/RCC->CFGR |= RCC_CFGR_HPRE_DIV1;/* PCLK2 = HCLK / 2*/RCC->CFGR |= RCC_CFGR_PPRE2_DIV2;/* PCLK1 = HCLK / 4*/RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;/* PCLK2 = HCLK / 1*/RCC->CFGR |= RCC_CFGR_PPRE2_DIV1;/* PCLK1 = HCLK / 2*/RCC->CFGR |= RCC_CFGR_PPRE1_DIV2;/* Configure the main PLL */RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) |(RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24);/* Enable the main PLL */RCC->CR |= RCC_CR_PLLON;/* Wait till the main PLL is ready */while((RCC->CR & RCC_CR_PLLRDY) == 0){}/* Configure Flash prefetch, Instruction cache, Data cache and wait state */FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS; /* Configure Flash prefetch, Instruction cache, Data cache and wait state */FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_2WS; /* Select the main PLL as system clock source */RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));RCC->CFGR |= RCC_CFGR_SW_PLL;/* Wait till the main PLL is used as system clock source */while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);{}}else{ /* If HSE fails to start-up, the application will have wrong clockconfiguration. User can add here some code to deal with this error */}}在官⽅的基础上,直接设定HSE作为SYSCLK时钟:初始化HSE;等待HSE初始化成功后再继续;设置调压器电压输出级别为1以便使器件在最⼤频率⼯作;设置HCLK、PCLK1、PCLK2分频系数;设置HSE作为系统时钟;void HSE_SetSysClock(void){__IO uint32_t HSEStartUpStatus = 0; /* 开启HSE时钟 */ /* 此函数从stm32f0xx_rcc.c获取,⽤于配置外部时钟HSE: * 有三个配置:RCC_HSE_OFF关闭外部HSE时钟 * RCC_HSE_ON开始外部HSE晶振 * RCC_HSE_Bypass开始HSE旁路设置 */ RCC_HSEConfig(RCC_HSE_ON); /* 若时钟配置成功 */if(HSEStartUpStatus == SUCCESS){RCC->APB1ENR |= RCC_APB1ENR_PWREN;PWR->CR |= PWR_CR_VOS;RCC_HCLKConfig(RCC_SYSCLK_Div1);RCC_PCLK2Config(RCC_HCLK_Div1);RCC_PCLK1Config(RCC_HCLK_Div1); /* 将SYSCLK系统时钟设置为HSE */RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE); /* 等待SYSCLK系统时钟设置成功 */while(RCC_GetSYSCLKSource() != 0x04){}}else{while(1);}}使⽤HSI经过PLL配置系统时钟:使能HSI时钟;获取HSI状态并等待HSI稳定;设置调节器电压输出级别配置为1;设置HCLK、PCLK1/2分频系数;设置PLL时钟分频系数;使能PLL并等待PLL稳定后配置PLL状态;设置PLL作为SYSCLK时钟并等待设置完成;void HSI_SetSysClock(uint32_t m, uint32_t n, uint32_t p, uint32_t q) {__IO uint32_t HSIStartUpStatus = 0;/* 去初始化RCC */RCC_DeInit();/* 使能HSI时钟 */RCC_HSICmd(ENABLE);/* 从RCC的CR寄存器中获取HSI配置状态 */HSIStartUpStatus = RCC->CR & RCC_CR_HSIRDY;/* 若HSI配置成功 */if(HSIStartUpStatus == RCC_CR_HSIRDY){/* 配置调节器电压输出级别为1 */RCC->APB1ENR |= RCC_APB1ENR_PWREN;PWR->CR |= PWR_CR_VOS;/* 配置SYSCLK到HCLK的分频系数为1 */RCC_HCLKConfig(RCC_SYSCLK_Div1);/* 配置HCLK到PCLK1/2的分频系数为2/4 */RCC_PCLK2Config(RCC_HCLK_Div2);RCC_PCLK1Config(RCC_HCLK_Div4);/* 配置PLL参数,选⽤HSI作为PLL参数,同时使能PLL */RCC_PLLConfig(RCC_PLLSource_HSI, m, n, p, q);RCC_PLLCmd(ENABLE);/* 等待PLL设置完成 */while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); FLASH->ACR = FLASH_ACR_PRFTEN| FLASH_ACR_ICEN| FLASH_ACR_DCEN| FLASH_ACR_LATENCY_5WS;RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);while(RCC_GetSYSCLKSource() != 0x08);}else{while(1);}}HAL时钟配置分析:与STM32标准外设库不同,HAL库来实现时钟配置需要重新适应配置⽅式,但是本质的寄存器调动是类似不变的,且配置的过程也和STM32标准外设库相似;参考使⽤STMCube⽣成的代码,时钟树如图所⽰:在STM32Cube中设置:HSE设置为Crystal/Ceramic Resonator,Input Frequency设置为16MHz;在⼯程中要配置的参数:第⼀个HSE_VALUE参数位于stm32f0xx_hal_conf.h中,此参数与在STMCube时钟树上定义的⼀致,需要⼿动设置为实际的参数值;第⼆个HSE_VALUE参数位于system_stm32f0xx.c中,此参数默认为8MHz,可以通过⽤户程序来提供和调整;第三个SystemCoreClock参数位于system_stm32f0xx.c中,其默认值也是8MHz,可以根据以下三种⽅式来更新: 调⽤CMSIS函数SystemCoreClockUpdate()、 调⽤HAL API函数HAL_RCC_GetHCLKFreq()、 调⽤HAL_RCC_ClockConfig();/*** @brief Adjust the value of External High Speed oscillator (HSE) used in your application.* This value is used by the RCC HAL module to compute the system frequency* (when HSE is used as system clock source, directly or through the PLL).*/#if !defined (HSE_VALUE)#define HSE_VALUE ((uint32_t)16000000) /*!< Value of the External oscillator in Hz */#endif /* HSE_VALUE */#if !defined (HSE_VALUE)#define HSE_VALUE ((uint32_t)8000000)/*!< Default value of the External oscillator in Hz.This value can be provided and adapted by the user application. */#endif /* HSE_VALUE *//** @addtogroup STM32F0xx_System_Private_Variables* @{*//* This variable is updated in three ways:1) by calling CMSIS function SystemCoreClockUpdate()2) by calling HAL API function HAL_RCC_GetHCLKFreq()3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequencyNote: If you use this function to configure the system clock there is no need to call the 2 first functions listed above, since SystemCoreClock variable is updated automatically.uint32_t SystemCoreClock = 8000000;实际的时钟配置函数如下图:使⽤了三个参数来配置:RCC_OscInitStruct⽤来配置外部时钟参数,这⾥设置晶振类型为HSE、设置HSE的状态为开启状态、不使⽤PLL;RCC_ClkInitStruct⽤来配置系统时钟内的参数(如Sys CLK、HCLK、PCLK1),这⾥设置要配置的时钟类型为HCLK、SYSCLK、PCLK1,选择HSE时钟作为SYSCLK的时钟源,并设置系统时钟SYSCLK分频系数为0、HCLK的分频系数为4;PeriphClkInit⽤来配置外设时钟的时钟源,这⾥设置USART1/2的时钟源为PCLK1;/*** @brief System Clock Configuration* @retval None*/void SystemClock_Config(void){RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};/** Initializes the CPU, AHB and APB busses clocks*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB busses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSE;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK){Error_Handler();}PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_USART2;art1ClockSelection = RCC_USART1CLKSOURCE_PCLK1;art2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK){Error_Handler();}HAL_SYSTICK_Config(SystemCoreClock / 1000);HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);}这⾥加⼊了对SysTick的时钟配置,参考HAL库本⾝的设置:HAL_SYSTICK_Config()⽤来配置使能和配置SysTick寄存器;HAL_SYSTICK_CLKSourceConfig()选择AHB时钟(或AHB时钟除以8)作为SysTick时钟源;HAL_NVIC_SetPriority()配置SysTick_IRQn的中断优先级为0,默认为最⾼;。
STM32时钟配置方法详解
一、在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。
①HSI是高速内部时钟,RC振荡器,频率为8MHz。
②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
③LSI是低速内部时钟,RC振荡器,频率为40kHz。
④LSE是低速外部时钟,接频率为32.768kHz的石英晶体。
⑤PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。
倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。
二、在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法:如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理:①对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。
②对于少于100脚的产品,有2种接法:第1种:OSC_IN和OSC_OUT分别通过10K电阻接地。
此方法可提高EMC性能;第2种:分别重映射OSC_IN 和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出'0'。
此方法可以减小功耗并(相对上面)节省2个外部电阻。
三、用HSE时钟,程序设置时钟参数流程:01、将RCC寄存器重新设置为默认值RCC_DeInit;02、打开外部高速时钟晶振HSE RCC_HSEConfig(RCC_HSE_ON);03、等待外部高速时钟晶振工作HSEStartUpStatus = RCC_WaitForHSEStartUp();04、设置AHB时钟RCC_HCLKConfig;05、设置高速AHB时钟RCC_PCLK2Config;06、设置低速速AHB时钟RCC_PCLK1Config;07、设置PLL RCC_PLLConfig;08、打开PLL RCC_PLLCmd(ENABLE);09、等待PLL工作while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)10、设置系统时钟RCC_SYSCLKConfig;11、判断是否PLL是系统时钟while(RCC_GetSYSCLKSource() != 0x08)12、打开要使用的外设时钟RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()四、下面是STM32软件固件库的程序中对RCC的配置函数(使用外部8MHz晶振)/******************************************************************************** Function Name : RCC_Configuration* Description : RCC配置(使用外部8MHz晶振)* Input : 无* Output : 无* Return : 无*******************************************************************************/void RCC_Configuration(void){/*将外设RCC寄存器重设为缺省值*/RCC_DeInit();/*设置外部高速晶振(HSE)*/RCC_HSEConfig(RCC_HSE_ON); //RCC_HSE_ON——HSE晶振打开(ON)/*等待HSE起振*/HSEStartUpStatus = RCC_WaitForHSEStartUp();if(HSEStartUpStatus == SUCCESS) //SUCCESS:HSE晶振稳定且就绪 {/*设置AHB时钟(HCLK)*/RCC_HCLKConfig(RCC_SYSCLK_Div1); //RCC_SYSCLK_Div1——AHB 时钟= 系统时钟/* 设置高速AHB时钟(PCLK2)*/RCC_PCLK2Config(RCC_HCLK_Div1); //RCC_HCLK_Div1——APB2时钟= HCLK/*设置低速AHB时钟(PCLK1)*/RCC_PCLK1Config(RCC_HCLK_Div2); //RCC_HCLK_Div2——APB1时钟= HCLK / 2/*设置FLASH存储器延时时钟周期数*/FLASH_SetLatency(FLASH_Latency_2); //FLASH_Latency_2 2延时周期/*选择FLASH预取指缓存的模式*/FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); // 预取指缓存使能/*设置PLL时钟源及倍频系数*/RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);// PLL的输入时钟= HSE时钟频率;RCC_PLLMul_9——PLL输入时钟x 9/*使能PLL */RCC_PLLCmd(ENABLE);/*检查指定的RCC标志位(PLL准备好标志)设置与否*/while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){}/*设置系统时钟(SYSCLK)*/RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//RCC_SYSCLKSource_PLLCLK——选择PLL作为系统时钟/* PLL返回用作系统时钟的时钟源*/while(RCC_GetSYSCLKSource() != 0x08) //0x08:PLL作为系统时钟 {}}/*使能或者失能APB2外设时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph _GPIOB |RCC_APB2Periph_GPIOC , ENABLE);//RCC_APB2Periph_GPIOA GPIOA时钟//RCC_APB2Periph_GPIOB GPIOB时钟//RCC_APB2Periph_GPIOC GPIOC时钟//RCC_APB2Periph_GPIOD GPIOD时钟}五、时钟频率STM32F103内部8M的内部震荡,经过倍频后最高可以达到72M。
基于锁相环的时钟相位插值电路设计与实现
用 的 P L的 V O级 数 为 4, 出相 位 数 为 8 L C 输 ,为 了
1 引 言
锁相 环 ( L ) P L 内部 的压 控振荡 器 ( C 级数 不 V O) 能 太多 , 否则 会造 成输 出时 钟 抖 动 的 加 剧 和 电路 功
满足 时钟恢 复 电路 的要 求 , 需要 进行 1 6插值 。文 献
[] 4 中提出了对 P L输 出进行相位插值的思想 , L 但
没有 给 出具 体 的 电路 , 文探 讨 了插值 电路 实 现 的 本 问题 , 计 的相 位插 值 电路 由 P L 差 分放 大器 、 设 L、 8— 4相 位 选 择 器 、 值 电路 和 权重 电流 偏 置 电路 5部 插
分组成。
耗的增加 , 同时锁相环 能够输出的最高频率也会下
降, 多级 V O也 会 给版 图布 局 带 来 一定 的 困难 。 C 通 常情况 下 , 相环 内部 只 有 4级 或 8级 压 控 振 荡 锁
器 , 出时钟信号为 8 输 相或 1 相 。然而在千兆以太 6 网收发器模拟前端的时钟恢复 电路 中, 要求锁相环 能够提供“2 相” 18 等相位差的时钟信号 , 因此必须 对 V O的输 出进行 相位插 值 l , C 3 在不 增 加 V O级 J C 数的基础上 , 得到相位差更小的时钟信号。本文选
D A g R N n t n S N J fi Z U Ye U NY , o GMeg— i , U i e, H u a n—
( e at n f lc o i E g er g h nh i i tn nvri ,hn h i 0 2 0 C i ) D pr t et nc n i ei ,S a ga J oo gU iesy S a ga 2 0 4 , hn me o E r n n a t a
50mhz时钟产生100mhz时钟锁相环工作原理
50mhz时钟产生100mhz时钟锁相环工作原理锁相环(Phase-Locked Loop, PLL)是一种控制系统,它能够生成与输入信号频率相等的输出信号,并保持固定的相位关系。
在将50MHz时钟转换为100MHz时钟的场景中,锁相环的工作原理可以概括为以下几个步骤:
1. 频率比较:锁相环首先通过鉴相器(Phase Detector, PD)比较输入信号的相位与反馈信号的相位。
在这个例子中,输入信号是50MHz的时钟,而反馈信号是锁相环内部振荡器产生的信号。
2. 频率倍增:由于输入信号的频率是50MHz,为了得到100MHz 的输出频率,锁相环内部通常包含一个倍频器。
倍频器的作用是将输入频率翻倍,从而得到所需的输出频率。
3. 相位锁定:当输出信号的频率与输入信号的频率相等时,锁相环会调整振荡器的频率,使得输出电压与输入电压保持固定的相位差值。
这个过程是通过控制振荡器的控制电压来实现的,该电压会根据相位差的大小进行调整。
4. 稳态维持:一旦相位锁定,锁相环会继续监测输入信号和反馈信号的相位差,确保它们保持一致。
如果有任何变化,锁相环会相应地调整振荡器的频率,以维持稳定的相位关系。
需要注意的是,在整个过程中,锁相环内部的分频器也起到关键作用。
分频器可以将较高的频率信号分频成较低的频率信号,以便与
输入的50MHz信号进行比较。
这样,即使参考时钟是100MHz,分频器也可以将其分频到50MHz,以便与输入时钟进行相位比较。
综上所述,锁相环通过精确的反馈控制机制,能够实现输入信号频率的倍增,并且保持输出信号与输入信号的相位同步,从而产生稳定且准确的100MHz时钟信号。
不同频率的pll,对参考时钟摆幅的要求
不同频率的pll,对参考时钟摆幅的要求
PLL(锁相环)是一种反馈电路,用于将一个电路板上的时钟相位与外部时序信号同步。
PLL的工作原理是将外部信号的相位与压控晶体振荡器(VCXO)产生的时钟信号的相位进行比较,然后调整振荡器时钟信号的相位以匹配参考信号的相位,从而实现两个信号的同相。
在PLL中,参考时钟的摆幅会对PLL的性能产生影响。
理论上,参考时钟的摆幅越大,PLL的跟踪速度和噪声抑制能力越强。
因此,对于不同频率的PLL,对参考时钟摆幅的要求可能会有所不同。
一般来说,为了获得更好的性能,建议选择摆幅较大的参考时钟。
然而,在实际应用中,PLL的性能不仅仅取决于参考时钟的摆幅,还受到其他因素的影响,如环路带宽、滤波器设计等。
因此,对于具体的PLL应用,需要根据实际需求和系统要求进行综合设计和考虑。
如果需要更深入和具体的信息,建议查阅相关的锁相环(PLL)设计和应用资料,或者咨询相关领域的专家。
7种时钟的简介
7种时钟的简介1.RTC时钟为芯片内部的RTC提供时钟。
来源:HSE_RTC(HSE分频得到)、LSE(外部32.768KHZ的晶体提供)、LSI(32KHZ)。
控制: RCC备份域控制寄存器RCC_BDCR:RTCSEL位控制2.独立看门狗时钟IWDGCLK,由LSI提供。
I2S时钟:由外部的引脚I2S_CKIN或者PLLI2SCLK提供。
以太网PHY时钟:429没有集成PHY,只能外接PHY芯片,比如LAN8720,那PHY时钟就由外部的PHY芯片提供,大小为50M。
B PHY时钟429的USB没有集成PHY,要想实现USB高速传输,只能外接PHY芯片,比如USB33000。
那USB PHY时钟就由外部的PHY芯片提供。
4.锁相环时钟HSE或者HSI先经过一个分频因子M进行分频,然后再经过一个倍频因子N,然后再经过一个分频因子P,最后成为锁相环时钟PLLCLK = (HSE/M) * N / P = 25/25 * 360 / 2 = 180M5. AHB高速总线时钟为AHB总线的外设提供时钟、为Cortex系统定时器提供时钟(SysTick)、为内核提供时钟(FCLK)。
AHB为advanced high-performance bus。
来源:系统时钟分频得到。
控制: RCC_CFGR 时钟配置寄存器的HPRE位6.PCLK1时钟PCLK1:APB低速总线时钟,最高为45M。
为APB1总线的外设提供时钟。
2倍频之后则为APB1总线的定时器提供时钟,最大为90M。
来源:HCLK分频得到。
控制: RCC_CFGR 时钟配置寄存器的PPRE1位7.PCLK2时钟PCLK2:APB高速总线时钟,最高为90M。
为APB2总线的外设提供时钟。
2倍频之后则为APB2总线的定时器提供时钟,最大为180M。
来源:HCLK分频得到。
控制: RCC_CFGR 时钟配置寄存器的PPRE2位APB1 定时器有 TIM2, TIM3 ,TIM4, TIM5, TIM6, TIM7, TIM12, TIM13,TIM14-90M APB2 定时器有 TIM1, TIM8 ,TIM9, TIM10, TIM11—180M。
STM32时钟配置方法详解
STM32时钟配置方法详解时钟树是STM32微控制器中一系列时钟源和时钟分频器的组成部分。
时钟树包括系统时钟、外设时钟和内核时钟。
系统时钟用于驱动整个微控制器系统的核心,外设时钟用于驱动各种外设,内核时钟用于驱动CPU的运算。
在进行时钟配置之前,首先需要了解系统所需的时钟频率。
在STM32中,系统时钟可以通过多种方式进行配置,例如使用外部晶体、外部时钟、内部RC振荡器或者PLL(锁相环)等方式。
外部晶体是一种常用的时钟源,可以提供高精度的时钟频率。
在使用外部晶体时,首先需要设置PLL的时钟源为外部晶体,并设置PLL输入除频器的分频系数。
然后,再根据系统所需的时钟频率,设置PLL的倍频系数,以得到最终的系统时钟频率。
外部时钟是从外部提供的时钟信号,一般用于测试和调试。
使用外部时钟时,需要设置PLL的时钟源为外部时钟,并设置PLL的倍频系数,以得到所需的系统时钟频率。
内部RC振荡器是一种低成本的时钟源,但是其频率不如外部晶体稳定和精确。
在使用内部RC振荡器时,需要设置PLL的时钟源为内部RC振荡器,并设置PLL的倍频系数,以得到所需的系统时钟频率。
PLL是一种用于产生稳定高频时钟的电路,可以从一个低频时钟源产生一个高频时钟源。
使用PLL时,需要设置其输入时钟源和倍频系数。
系统时钟的分频系数可以通过RCC_CFGR寄存器进行设置。
RCC_CFGR寄存器的各个位域用于配置系统时钟的分频系数,包括分频因子、APB1的分频系数、APB2的分频系数等。
外设时钟是用于驱动外设的时钟,可以由系统时钟分频得到。
外设时钟的分频系数可以通过RCC_CFGR寄存器及各个外设的控制寄存器进行设置。
内核时钟是用于驱动CPU的运算的时钟。
在STM32微控制器中,CPU 时钟可以由系统时钟分频得到,分频系数可以通过RCC_CFGR寄存器和FLASH_ACR寄存器进行设置。
除了上述方法之外,STM32还可以使用时钟配置工具进行时钟配置。
多锁相环可编程时钟在机顶盒、数字电视、家庭网关及消费应用中的多种优势
安森美半导体公司 Ia i Ch n h k Z lt a d o e lj
有 几 种 不 同 的 方 案 都 符 合 机 顶 视 频 接 口要 求2 M H z 7 N钟 ,而PCI 度 ,因为单 个多锁相 环器 件能够替 代 盒( sTB) 、数 字 电视 、家庭在 及消 费 E p es 口要求6 MHz x rs接 6 时钟 。 应 用 的时钟要 求 。传统 上使用 晶体及
的优 势包括缩 短交货 周期及减 少库存 元件数量 。 终端 产 品通 过减 少满足产 品时钟 要求所需 元件数量 , 可以集成更多功
能 ,或是能 够进一步 缩小 产品整体 封 装尺 寸 。多锁相环 可编程 时钟也能 够 将不 同时钟 同步至相 同的参 考频率 或 晶体 输入频率 ,避免 系统 中出现任 何
ADS L, VDS L
2MHz2MHz5MHz 0 ,5 ,0 1MHz2MHz 2 ,4 2MH 7 z
3 M Hz 6
这 些时钟 接 口支援 不 同功 能 。表 1 显示了每种应用的时钟频率 。例如 , US 接 口要求2 MHz 8 B 4 或4 MHz 时钟 ,
钟能够 轻 易地 实现 最后一刻 的时钟 变
诸如安森美半导体FS 3 0 7 这样 的 低 。可编程 能力也 为设计 人 员提 供 灵 6
更 ,为设计 人 员提供 “ 安全 网”及 更 器件 包含 3 时钟产生器 ,能够 产 活性 ,使 他们能够 在设计 流程 的任何 个P L L 高灵 活性 。其 他实 用功能包 括帮 助抑 生最多4 路CMOS 时钟输出 ,使其能够 时 刻解决 频率 问题 ,并能 在 多个产 品
一种基于锁相环的时钟发生装置[发明专利]
专利名称:一种基于锁相环的时钟发生装置专利类型:发明专利
发明人:余娜敏
申请号:CN200610088874.2
申请日:20060721
公开号:CN1889364A
公开日:
20070103
专利内容由知识产权出版社提供
摘要:本发明公开了一种基于锁相环的时钟发生装置,采用单个晶体振荡器便能够满足复杂系统的要求,相对于现有技术,增加了时钟频率的覆盖率和系统的灵活性。
本发明所述装置包括一晶体振荡器、第一锁相环和数字时钟分频器,其特征在于,还包括一时钟频率处理单元,所述晶体振荡器输出的时钟信号经过第一锁相环输入到所述时钟频率处理单元,所述时钟频率处理单元根据所需时钟频率调节第一锁相环输出的时钟信号的频率范围,再由一个或多个数字时钟分频器对所述第一锁相环和时钟频率处理单元的输出信号进行分频,得到所需频率的时钟。
采用本发明所述装置可以产生分布范围很大的频率,满足所有时钟频率的要求。
申请人:北京中星微电子有限公司
地址:100083 北京市海淀区学院路35号世宁大厦15层
国籍:CN
代理机构:北京安信方达知识产权代理有限公司
更多信息请下载全文后查看。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
锁相环配置时钟
锁相环作为一个提供系统时钟的模块,是一个基本的模块,几乎每次编程序都得用到。
下面记一下怎样配置锁相环来设定想要的系统时钟。
锁相环PLL、自时钟模式和前面说的实时中断RTI、看门狗COP都属于系统时钟与复位CRG中的模块,固前面用到的寄存器,这里有些会再用到。
在程序中配置锁相环的步骤如下:
第一、禁止总中断;
第二、寄存器CLKSEL的第七位置0,即CLKSEL_PLLSEL=0。
选择时钟源为外部晶振OSCCLK,在PLL程序执行前,内部总线频率为OSCCLK/2。
CLKSEL_PLLSEL=0时,系统时钟由外部晶振直接提供,系统内部总线频率=OSCCLK/2(OSCCLK为外部晶振频率)。
CLKSEL_PLLSEL=1时,系统时钟由锁相环提供,此时系统内部总线频率=PLLCLK/2 (PLLCLK为锁相环倍频后的频率)。
第三、禁止锁相环PLL,即PLLCTL_PLLON=0。
当PLLCTL_PLLON=0时,关闭PLL电路。
当PLLCTL_PLLON=1时,打开PLL电路。
第四、根据想要的时钟频率设置SYNR和REFDV两个寄存器。
SYNR和REFDV两个寄存器专用于锁相环时钟PLLCLK的频率计算,计算公式是:
PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
其中,PLLCLK为PLL模块输出的时钟频率;OSCCLK为晶振频率;SYNR、REFDV 分别为寄存器SYNR、REFDV中的值。
这两个寄存器只有在PLLSEL=0时才能
够写入(这里就是第二步的设置原因所在了)。
第五、打开PLL,即PLLCTL_PLLON=1。
第六、CRGFLG_LOCK位,确定PLL是否稳定。
当锁相环PLL电路输出的频率达到目标频率的足够小的误差范围内时,LOCK位置1,此时说明PLLCLK已经稳定,可以作为系统的时钟了。
该位在正常情况下为只读位。
第七、PLLCLK稳定后,允许锁相环时钟源PLLCLK为系统提供时钟,即CLKSEL_PLLSEL=1。
到这里,锁相环的设置就完毕了。