裸板程序记录之时钟初始化-s3c2440

2017-08-15  本文已影响0人  sgy1993

时钟初始化

  1. 首先需要选择时钟源的来源,jz2440选择的是00,使用晶振的模式
上电时钟源选择
  1. 时钟相关的寄存器设置
时钟相关的寄存器

3.注意事项

  1. CLKDIVN should be set carefully not to exceed the limit of HCLK and PCLK.
  2. If HDIVN is not 0, the CPU bus mode has to be changed from the fast bus mode to the asynchronous
    bus mode using following instructions(S3C2440 does not support synchronous bus mode).
    MMU_SetAsyncBusMode
    mrc p15,0,r0,c1,c0,0
    orr r0,r0,#R1_nF:OR:R1_iA
    mcr p15,0,r0,c1,c0,0
    If HDIVN is not 0 and the CPU bus mode is the fast bus mode, the CPU will operate by the HCLK.
    This feature can be used to change the CPU frequency as a half or more without affecting the HCLK and PCLK.

上面是总的步骤,现在一个个详解
1.时钟源的选择
由OM[3:2]引脚来控制选择,参考图片"时钟电路1",可知这两个引脚接地,选择的是00.Main Clock source 和USB Clock Source都是晶振

2.寄存器设置
 2.1 LOCKTIME寄存器

LOCKTIME寄存器

从上图可以看出bit'31-16是控制UCLK的lock time的,bit'15-0是控制FCLK(给cpu用的),HCLK(AHB设备用的),PCLK(APB设备用的),那这个lock time是干什么的?
 从"Clock Generator Block Diagram"这个图可以看出,晶振输入的时钟(MPLLin),先要经过一个MPLL得到Mpll(应该就是FCLK),这个过程不是瞬间就完成的,需要一定的转换时间.这个就是设置这个的.

这里你可以不设置,因为上电启动默认值是0xffffffff

PS:什么是AHB,什么是APB,具体什么意思可以百度,google,以下截图是cpu手册两个总线具体有什么设备.

AHB APB

2.2 MPLLCON控制分频系数的

寄存器的格式

晶振的频率要进行扩充,晶振频率采用的是12Mhz,FCLK最高能到400MHZ,起码得扩大30多倍,当然手册上也是提供了计算方法的..

Mpll = (2 * m * Fin) / (p * 2S这是2的s次方)
m = (MDIV + 8), p = (PDIV + 2), s = SDIV
举一个实际例子--"时钟参考表格"图里面的
12.0000MHz 400.00 MHz 92(0x5c) 1 1以这个为
例计算频率
m = 92 + 8 = 100
p = 1 + 2 = 3
s = 1
mpll = (210012)/(3*2的一次方), = 400MHz

CLKSLOW

显然MPLL应该是要turn on的

这里设置HCLK为FCLK的一半:
01 : HCLK = FCLK/2.
PCLK是HCLK的一半:
1: PCLK has the clock same as the HCLK/2.
Clock Generator Block Diagram PLL (Phase-Locked Loop) Block Diagram 时钟参考表格 Main Oscillator Circuit Examples 时钟电路1
  1. 最后注意事项说了,如果HDIV不等于0的话,需要切换总线模式
    <ARM920T_TRM1_S.pdf>
    fast bus mode to the asynchronous

mrc p15,0,r0,c1,c0,0 先把c1寄存器读出来
orr r0,r0,#R1_nF:OR:R1_iA 设置nF,iA两位为1
mcr p15,0,r0,c1,c0,0 写回c1寄存器

c1寄存器nF-iA 设置参考表
上一篇下一篇

猜你喜欢

热点阅读