1.PHASE LOCKED LOOP(PLL)
S3C6410里包括三个PLL(锁相环),APLL, MPLL, EPLL,经过设置它们将输入时钟同步输出到达操作CPU的作业频率的意图。如图1-1所示。
Voltage Controlled Oscillator (VCO)P[5:0]位来设置FIN进行分频。经过设置Main-Divider分频数,分频压控振荡器发生的输出时钟频率,分频之后的低频进入鉴相器ScalerS[2:0]位设置PLL的输出时钟频率都能够经过
PLL的时钟挑选和输入参照时钟
图1-2描绘了时钟发生逻辑。S3C6410有三个PLL锁相环,作业时钟也分为三组,APLL用来为ARM芯片供给作业时钟,MPLL为AXI,AHB,APB总线上设备供给作业时钟,EPLL为特别外设,如:视频解码器,图片编码器等,供给作业时钟。
图1-2时钟发生逻辑单元
CLK_SRC寄存器的低三位CLK_SRC[2:0]别离操控三种作业时钟。当对应位被置位,则发生对应PLL的作业时钟。不然,不会发生对应的PLL作业时钟。
3.三种作业时钟的发生
ARM1176最高发生667Mhz的作业频率。用户能够经过设置内部时钟分频器的值来操控输出作业时钟,而不必修正PLL的作业频率。分频器能够挑选1~16的分频数。ARM内核能够经过修正分频器的值来削减体系电源的损耗。
S3C6410内部含有AXI,AHB和APB总线,经过不同的总线操控不同的外设,封闭总线上的时钟频率能够到达体系节能的意图。AXI,AHB总线最高作业在133MHz频率下,APB总线最高作业在66MHz频率下。咱们APB和AXI,AHB总线上二者作业频率不一致,在这两种总线打听行数据同步传输时会选用特别逻辑单元,如图1-3所示。
图1-3体系总线作业频率设置
HCLKX2时钟由DDR0,DDR1两个DDR操控器发生,其最高能够以266MHz频率发送和接纳数据。每个HCLKX2时钟能够依据用户需求别离被封闭掉来削减体系损耗。AHB总线上的时钟由DIV(HCLK)分频器分频后输出,相同AHB总线上的外设也能够被封闭掉以节约电源耗费。HCLK_GATE寄存器用来封闭作业在HCLKX2和HCLK时钟上的外设。
慢速设备连接在APB总线上。APB时钟最高作业在66MHz,经过DIV(PCLk)分频器来进行分频设置,经过设置PCLK_GATE寄存器来封闭对应的APB总线上的外设。依据S3C6410硬件手册阐明,AHB总线和APB总线上的频率有必要是偶数,例如,假如DIV(HCLK)对应操控位CLK_DIV[8]设置为1,则DIV(PCLK)对应位CLK_DIV0[15:12]有必要设置为1,3,5,…等奇数。不然,APB总线上的外设不能正解的进行数据传输。
AHB总线上的JPEG和安全相关子体系不能作业在133MHz,AHB总线专门为这样低频子体系供给低频作业时钟,经过设置DIV(CLKJPEG)和DIV(CLKSECUR)分频位来设置其作业频率。因而,相同在APB总线上也有相似的这种约束设定,DIV(CLKJPEG)和DIV(CLKSECUR)对应的CLK_DIV0[27:24]分频位和CLK_DIV0[19:18]分频位有必要是奇数,二者的和是偶数。如表1-1所示,官方给出了引荐的设置参数。
表1-1官方引荐参数
4.MFC模块时钟的发生
MFC模块需求特别的时钟,如图1-5所示。
图1-5 MFC时钟发生逻辑
MFC时钟源能够从HCLKX2和MOUT(EPLL)中挑选。MFC的作业时钟运用HCLKX2来分频。默许HCLKX2时钟频率为266MHz。因而,CLK_DIV0[31:28]有必要设置为b0001来发生MFC作业的133MH时钟。当MFC模块不需求作业在高性能形式下时,有两种方法能够削减MFC模块作业频率来到达削减MFC模块的功耗。第一种方法是设置CLK_SRC[4]运用EPLL的输出时钟,别的一种方法是设置CLK_DIV0[31:28]的分频数,一起,设置CLK_SRC[4]位,这样低频作业时钟就能够供给给MFC模块。EPLL输出时钟是与HCLKX2和HCLK独立的。
5.UART,SPI,MMC作业时钟的发生
如图1-6所示,是上述三种外设作业时钟逻辑。
图1-6 UART,SPI,MMC作业时钟逻辑模块
经过设置CLK_DIV2[19:16]位来设置UART的作业频率的分频数,经过SCLK_GATE[9]来舱位封闭UART时钟源。
该模块中有一个额定的时钟源CLK27M,运用该时钟源能够供给更多的可选作业时钟。
6.时钟的舱位/封闭操控
HCLK_GATE,PCLK_GATE和SCLK_GATE用来操控三种时钟源的发生,假如对应的位被设置,对应时钟就会发生。
HCLK_GATE操控HCLK总线上的外设作业时钟的发生,PCLK_GATE操控PCLK总线上的外设作业时钟的发生,PCLK总线上的外设需求特定的时钟,它们经过SCLK_GATE来设置。
7.同步667MH操作形式
依据S3C6410硬件手册,ARMCLK和HCLK的时钟比有必要是整数,用来同步ARM内核和AXI总线接口二者的时钟。S3C6410没有对CPU作业在533MHz做约束,ARMCLK = 533MHz,HCLKX2=266MHz,HCLK=133MH,不过,关于作业在533MHz以上时,例如667Mhz时,只能支撑1:2.5:5的时钟比(ARMCLK = 667MHz,HCLKX2=266MHz,HCLK=133MH)
8.时钟分频
图1-7时钟分频模块
如图1-7所示,时钟分频模块发生三种时钟,ARMCLK,HCLKX2,HCLK。时钟分频器包括两部分,预分频器组和后分频器组,预分频器包括一个1/2预分频器和1/5预分频器,这两个分频器是固定的不能被软件装备,然后分频器能够经过装备CLK_DIV0寄存器方法进行装备。当MISC_CON的SYNC667MHz位被设置时,两个预分频器一起作业,发生APLL的分频经过预分频器分频的时钟,假如APLL的FOUT输出频率为1.33GHz,预分频器ARMCLK的输出为667Mhz,预分频器HCLK的输出为266MHz。这样经过分频的时钟能够经过CLK_DIV0寄存器进行装备。
咱们计划将ARM内核时钟设置为官方引荐的安稳的533MHz,让APLL为AHB,APB输出作业频率。让MPLL为UART等外设供给作业频率,EPLL不作业。一起设置HCLKX2为266MHz,HCLK为133MHz,PCLK为66.5MHz,UART作业时钟为66.5MHz。
1.挑选HCLKX2, HCLK, PCLK的时钟源,由图1-2可知其时钟源能够经过OTHER[6]挑选是由DOUT_APLL仍是MOUT_MPLL,咱们挑选从DOUT_APLL。
ldrr1, [r0, #OTHERS_OFFSET];挑选MPLL的时钟源
movr2, #0x40
orrr1, r1, r2
strr1, [r0, #OTHERS_OFFSET]
nop
nop
nop
nop
;挑选CPU的同步作业形式
ldrr2, =0x80
orrr1, r1, r2
strr1, [r0, #OTHERS_OFFSET]
;测验是否现已作业在同步形式下
check_syncack
ldrr1, [r0, #OTHERS_OFFSET]
ldrr2, =0xf00
andr1, r1, r2
cmpr1, #0xf00
bnecheck_syncack
2.设置变频确定时刻,当体系时钟修正之后要经过段LOCK时刻
movr1, #0xff00
orrr1, r1, #0xff
strr1, [r0, #APLL_LOCK_OFFSET]
strr1, [r0, #MPLL_LOCK_OFFSET]
strr1, [r0, #EPLL_LOCK_OFFSET]
3.设置ARMCLK, HCLKX2, HCLK, PCLK的分频
各种频率的联系如图1-3所述:
APLL或MPLL发生的输出频率经过OTHER[6]挑选之后再经过MISC_CON[19]挑选是否被1/5分频,发生的输出频率进入DIV_HCLKx2,依据CLK_DIV0的不同位设置HCLKX2,HCLK,PCLK,CLKJPEG,CLKSECUR的输出频率。其值设置状况如CLK_DIV0寄存器描绘内容所述。
l咱们将MPLL挑选DOUT_APLL,MISC_ON[19]不进行分频,DOUT_APLL发生的时钟(533MHz)直接进入到DIV_HCLKX2分频器中。
l依据硬件手册可知,HCLKX2的频率固定为266MHz,所以HCLKX2_RATIO设置为0b1
lHCLK上挂接有内存,Mobile DDR内存最高作业在133MHz,所以HCLK最高主频设置为HCLKX2的1/2,即:HCLK_RATIO = 0b1
l设置PCLK上的作业频率为66.5MHz,即:PCLK_RATIO = 0b11
l设置ARM内核作业频率为553MHz,即:ARM_RATIO = 0b0
l设置DOUT_MPLL为266MHz,为后边UART供给时钟源,即:MPLL_RATIO = 0b0
l其它时钟频率坚持默许值
; DOUT_MPLL = MOUT_MPLL/(MPLL_RATIO + 1)
;即ARMCLK = DOUT_APLL / (ARM_RATIO + 1)
;即ARMCLK = 533MHz, DOUT_MPLL = 266MHz
; HCLKX2_RATIO = 1<<9 , HCLK_RATIO = 1<<8,PCLK_RATIO = 3<<12, HCLKX2IN = 533
;即HCLKX2 = HCLKX2IN / (HCLKX2_RATIO + 1) = 266
;即HCLK = HCLKX2 / (HCLK_RATIO + 1) = 133
;即PCLK = HCLKX2 / (PCLK_RATIO + 1) = 66.5
ldrr1, [r0, #CLK_DIV0_OFFSET]
bicr1, r1, #0xff00
bicr1, r1, #0xff
ldrr2, =0x3300
orrr1, r1, r2
strr1, [r0, #CLK_DIV0_OFFSET]
4.设置UART作业时钟
由图1-6可知,经过设置CLK_SRC[1]挑选DOUT_MPLL的作业时钟是否进行倍频,经过设置CLK_DIV0[4]对时钟进行分频,再经过CLK_SRC[13]挑选UART的作业时钟源,设置CLK_DIV2[19:16]位用于分频UART作业时钟。由前面可知DOUT_MPLL = 266MHz,UART挑选其作为自己作业时钟源,则对其进行1/4分频能够得到66.5MHz。
如下表可知:设置寄存器CLK_DIV2[19:16] = 0b11,一起还要设置CLK_SRC[13] = 0b1即可。
ldrr1, [r0, #CLK_DIV2_OFFSET]
bicr1, r1, #0x70000
orrr1, r1, #0x30000;设置其值为3,即CLKUART = CLKUARTIN / 4
strr1, [r0, #CLK_DIV2_OFFSET]
5.使能APLL,EPLL锁相环
依据硬件手册上的阐明设置APLL, EPLL的M,D,S分频数。
APLL发生533MHz的FOUT_APLL
EPLL发生266MHz的MOUT_EPLL
; APLL_EN = 1<<31, MDIV = 266<<16, PDIV = 3<<8, SDIV = 1
ldrr1, = 0x810a0301
strr1, [r0, #APLL_CON_OFFSET]
;使能MPLL锁相环,装备M,D,S分频数
; MPLL_EN = 1<<31, MDIV = 266<<16, PDIV = 3<<8, SDIV = 2
ldrr1, = 0x810a0302
strr1, [r0, #MPLL_CON_OFFSET]
6.设置对应时钟源寄存器,为各种外设供给时钟频率
; MPLL_SEL = 0b1, APLL_SEL = 0b1
ldrr1, [r0, #CLK_SRC_OFFSET]
ldrr2, =0x2005;一起设置UART的时钟源来自MPLL
orrr1, r1, r2
strr1, [r0, #CLK_SRC_OFFSET]