S3C2443有两个PLL用来发生内部时钟,别离是MPLL和EPLL,其间MPLL为包含ARM,AHB和APB的整体功能模块发生内部时钟,而EPLL为比如是USB,I2S和camera等这些详细的模块发生时钟,咱们能够经过软件编程来操控这个两个PLL的作业频率,能够封闭和敞开内部时钟源来削减功耗。
1.MPLL和EPLL时钟源的挑选
从上图可知首要的时钟源来之外部晶振(XTI)或许外部时钟(EXTCLK),时钟发生器由MPLL和EPLL组成,这两个PLL的作用是能够发生S3C2443所需求的高频时钟信号。由OM[0]来决议MPLL是挑选XTI仍是EXTCLK来作为时钟源,而OM[0]是由硬件规划来确认,下图是咱们项目OM[0]的规划部分:
在此规划中,OM[0]=1,依据下表
可知MPLL的时钟源是由XTI供给,如下图所示:
由上面左图可知EXTCLK是经过0R的电阻直接接地的,所以EPLL只能挑选XTI来作为EPLL的时钟源的,再依据下图:
咱们可知,CLKSRC[8]=0,CLKSRC[7]=X,这儿X能够是0或许1,这是需求在startup.s中做相应的设置的。
2.PLL(phase-locked-loop)
S3C2443的PLL首要由PFD(phase difference detector,相位差检测器)、charge pump(电荷泵)、VCO(voltage controlled oscillator压控振荡器)和off-chip loop filter(外部环路滤波器)。
PFD:又称为比较比较器,它的作用是检测输入信号和输出信号的相位差,并将检测出的相位差信号转换为电压信号输出。
Charge pump:电荷泵改动PFD的电压输出信号成必定份额的电压值发送给VCO和off-chip loop filter。
Off-chip loop filter:PFD输出的电压信号,进入charge pump后,或许会有高频杂波,经过Off-chip loop filter 能够输出VCO需求一个安稳的电压,在这儿,Off-chip loop filter选用典型的RC低通滤波。
VCO:输出电压进入VCO,引起振荡器 频率的改动,压控振荡器的输出频率随其输入电压的改动而改动,当Fref和Fvco没有不同的时分,电压就会坚持安稳下来,PFD就中止输出电压信号给charge pump,这样PLL体系时钟就安稳了。
3.改动PLL设置
S3C2443在往常的作业形式中,咱们能够经过来写PMS的值来改动PLL的输出频率,当咱们经过软件来写PMS的值时,PLL的锁存(lock time)被主动刺进,在这个lock time期间,PLL是没有发生有用的时刻给S3C2443的,在lock time往后,PLL才发生有用和安稳的clock给SYSCLK,见下图。
PMS别离指的是PDIV、MDIV和SDIV,而PDIV是值PLL main divider value,MDIV是指PLL pre-divider value,SDIV是指PLL post-divider value,操控MPLL和EPLL时钟的寄存器MPLLCON和EPLLCON否有这几个值的界说。
4.体系时钟操控
由下图可知ARMCLK是ARM920T的内核时钟,也是S3C2443的CPU时钟;HCLK是内部AHB bus和比如是内存操控器、中止操控器、LCD操控器等外围设备的基准时钟;PCLK是内部APB bus和比如是WDT、IIS、I2C等外围设备的基准时钟;DDRCLK是MDDR内存的data strobe时钟。
4.1 MPLL的时钟操控
从上图可知,MSysClk是ARMCLK、HCLK、PCLK、DDRCLK这些时钟的基准时钟,而ARMCLK、HCLK、PCLK、DDRCLK这些时钟到底有什么联系呢,经过对CLKDIVO操控寄存器的设置能够得到它们之间不同的比值联系,见下表
4.2 EPLL的时钟操控
从上图可知EPLL的时钟ESYSCLK被用作不同的外围操控器供给基准时钟,经过divider的分频能够得到不同外围操控所需求的时钟,而这个分频值是经过对CLKDIV1寄存器的装备来完成的,也能够经过编程SCLKCON寄存器来封闭或许敞开不同外围操控器的时钟。
在stop和sleep形式,EPLL将被主动封闭,在退出stop和sleep形式的时分,假如SCLKCON寄存器中相关位被使能的情况下,那么EPLL将为使能的外围操控器发生时钟。
5. 上电复位PLL时钟的发动流
在电压源供给所需求的电压给体系上电复位后,晶体振荡器在几毫秒之内起振,刚开端的时分MPLL和EPLL都是中止的。当nRESET在晶振时钟安稳后开释(由低电平变为高电平),PLL开端是运用PLL的输入时钟Fin作为SYSCLK时钟的,体系上电复位后,有必要经过软件来装备MPLLCON和EPLLCON运用每个PLL,也即经过写MPLLCON和EPLLCON的PDIV、MDIV和SDIV值,接着会主动刺进PLL的lock time,lock time之后,PLL的输出时钟Fout便是作为SYSCLK时钟来运用了,这些动作一般是在startup.s函数中初始化的,见下图