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

时钟初始化

  1. 首先需要选择时钟源的来源,jz2440选择的是00,使用晶振的模式
裸板程序记录之时钟初始化-s3c2440_第1张图片
上电时钟源选择
  1. 时钟相关的寄存器设置
裸板程序记录之时钟初始化-s3c2440_第2张图片
时钟相关的寄存器

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寄存器

裸板程序记录之时钟初始化-s3c2440_第3张图片
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手册两个总线具体有什么设备.

裸板程序记录之时钟初始化-s3c2440_第4张图片
AHB
裸板程序记录之时钟初始化-s3c2440_第5张图片
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

  • 2.3 UPLLCON是控制usb的,裸板也没有讲要设置

  • 2.4 CLKCON相应外设的时钟使能不使能,按需进行设置

  • 2.5 CLKSLOW

CLKSLOW

显然MPLL应该是要turn on的

  • 2.6 CLKDIVN
    设置了FCLK并没有设置HCLK和PCLK啊!这个寄存器就是设置另外两个时钟的!
这里设置HCLK为FCLK的一半:
01 : HCLK = FCLK/2.
PCLK是HCLK的一半:
1: PCLK has the clock same as the HCLK/2.
  • 2.7 CAMDIVN这个应该是摄像头的,不用操作
裸板程序记录之时钟初始化-s3c2440_第6张图片
Clock Generator Block Diagram
裸板程序记录之时钟初始化-s3c2440_第7张图片
PLL (Phase-Locked Loop) Block Diagram
裸板程序记录之时钟初始化-s3c2440_第8张图片
时钟参考表格
裸板程序记录之时钟初始化-s3c2440_第9张图片
Main Oscillator Circuit Examples
裸板程序记录之时钟初始化-s3c2440_第10张图片
时钟电路1
  1. 最后注意事项说了,如果HDIV不等于0的话,需要切换总线模式

    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
裸板程序记录之时钟初始化-s3c2440_第11张图片
设置参考表

你可能感兴趣的:(裸板程序记录之时钟初始化-s3c2440)