JZ2440:时钟设置

这一节的目标是对板子上的时钟有一个初步的了解,并且能通过初步设置,为我们接下来的程序做准备。

1. 板子上的基本资源

  • 板载晶振12M
  • 主时钟源和 USB 时钟源都是晶振

 
2. 手册中的相关项(按时钟进入的方向)

2.1 时钟的整体结构

2.2 OM[ 3:2 ]

从图中我们可以看到OM[] 起到可选择的作用(效果同三八译码器):

模式 OM[3:2]

MPLL状态

UPLL 状态

主时钟源

USB 时钟源

00

开启

开启

晶振

晶振

01

开启

开启

晶振

外部时钟

10

开启

开启

外部时钟

晶振

11

开启

开启

外部时钟

外部时钟

注意:

1. 虽然MPLL在复位后就开始, MPLL输出 (Mpll) 并没有作为系统时钟, 直到软件写入有效值来设置MPLLCON

寄存器。 在设置此值之前, 是将外部晶振或外部时钟源提供的时钟直接作为系统时钟。 即使用户不想改变MPLLCON

寄存器的默认值,用户也应当写入与之相同的值到MPLLCON寄存器寄存器中。

2. OM[3:2]是用于当OM[1:0]为 11 时决定一个测试模式。

 

JZ2440:时钟设置_第1张图片


上电一瞬间时钟的状态:

JZ2440:时钟设置_第2张图片

需要注意 OM[3:2] 是引脚,不是寄存器,看原理图得知 OM[3:2] = 00 ,从前边的图中可以得到结论是主时钟源和 USB 的时钟源都是从外部晶振得到的。

JZ2440:时钟设置_第3张图片

2.3 MPLL 

寄存器

地址

R/W

描述

复位值

MPLLCON

0x4C000004

R/W

MPLL的配置寄存器

0x00096030

UPLLCON

0x4C000008

R/W

UPLL的配置寄存器

0x0004d030


PLLCON

Bit

描述

复位值

MDIV

[19:12]

Main divider control

0x96 / 0x4d

PDIV

[9:4]

Pre-divider control

0x03 / 0x03

SDIV

[1:0]

Post divider control

0x0 / 0x0

这里有点需要说明:

    当你设置MPLL 和UPLL的值时,你必须首先设置UPLL值再设置MPLL 值。 (大约需要7个 NOP的间隔) 


一般情况下,pll不会关闭,这里包括上电。

对于pll的取值官方称很困难,给出了推荐值

JZ2440:时钟设置_第4张图片

如果你想私人定制你的时钟,公式如下:

MPLL Control Register 
      Mpll = (2 * m * Fin) / (p * 2^s) 
其中:
    m = (MDIV + 8)
    p  = (PDIV + 2)
    s   = SDIV 
UPLL Control Register 
    Upll = (m * Fin) / (p * 2S) 
其中:
    m = (MDIV + 8)
    p  = (PDIV + 2)
    s   = SDIV 
PLL值选择向导(MPLLCON) 
1.  Fout = 2  × m  × Fin / ( p*2s  ),Fvco = 2  × m  × Fin / p  
    此处:m =MDIV+8, p=PDIV+2, s=SDIV 
2.  600MHz  ≤ FVCO  ≤ 1.2GHz 
3.  200MHz  ≤ FCLKOUT  ≤ 600MHz 
4.  不要设置P 或M的值为0,这是因为设置P=000000,M=00000000 将会引起PLL的故障。 
5.  P 和M的合理范围为:1  ≤ P  ≤ 62,1  ≤ M  ≤ 248
6.  pll稳定的最高频率是400MHZ

时钟计算举例:
    ldr r0, =0x4c000014    //CLKDIV
    mov r1, #3
    str r1, [r0]
    ...
    ldr r0, =0x4c000004    //MPLLCON
    ldr r1, =((0x5c<<12)|(0x01<<4)|(0x02))    //MDIV=0x5c PDIV=0x01 SDIV=0x02
    str r1, [r0]

    m = (MDIV + 8) = 100
    p  = (PDIV + 2) = 3
    s   = SDIV  = 2
Mpll = (2 * m * Fin) / (p * 2^s) = (2*100*12)/12MHz = 200MHz

从下面这张图中我们能看到UPLL 的频率只能有两个取值,并且给固定的单元供应频率:

JZ2440:时钟设置_第5张图片


2.4 FCLK,HCLK和 PCLK 介绍

  • FCLK 是给 ARM920T 内核使用的
  • HCLK 是给 AHB总线使用的,具体涉及的硬件包括: memory 控制器,中断控制器,LCD控制器,DMA 和 USB 主机模式的AHB总线时钟 
  • PLK 是给 APB 总线使用的,具体涉及的硬件包括:看门狗,iis,i2c,pwm的定时器,mmc接口,ADC,UART,GPIO,RTC 和 SPI。
  • UCLK 是给 USB 用的
下边的这两张图看着更清楚:

JZ2440:时钟设置_第6张图片

S3C2440可以对他们三个的比例进行设定:(其中的 HDIVN 和 PDIVN 属于 CLKDIVN 寄存器

JZ2440:时钟设置_第7张图片

相关寄存器:

寄存器

地址

R/W

描述

复位值

CLKDIV

0x4C000014

R/W

Clock divider control register 

0x00000000 


CLKDIV

Bit

描述

复位值

DIVN_UPLL

[3]

UCLK select register(UCLK must be 48MHz for USB)

0: UCLK = UPLL clock  

1: UCLK = UPLL clock / 2

Set to 0, when UPLL clock is set as 48MHz

Set to 1. when UPLL clock is set as 96MHz.  

0

HDIVN

[2:1]

00 : HCLK = FCLK/1.

01 : HCLK = FCLK/2.

10 : HCLK = FCLK/4 when CAMDIVN[9] = 0.

HCLK= FCLK/8 when CAMDIVN[9] = 1.

11 : HCLK = FCLK/3 when CAMDIVN[8] = 0.

HCLK = FCLK/6 when CAMDIVN[8] = 1. 

00

PDIVN

[0]

0: PCLK has the clock same as the HCLK/1.

1: PCLK has the clock same as the HCLK/2. 

0


2.5 时钟要想到达具体的硬件(比如spi,i2c)还需要开启他们之间的开关

寄存器

地址

R/W

描述

复位值

CLKCON

0x4C00000C

R/W

Clock generator control register

0xFFFFF0

 

CLKCON

Bit

描述

复位值

AC97

[20]

Control PCLK into AC97 block.  

0 = Disable,   1 = Enable  

1

Camera

[19]

Control HCLK into Camera block.  

0 = Disable,   1 = Enable

1

SPI

[18]

Control PCLK into SPI block.  

0 = Disable,   1 = Enable  

1

IIS 

[17]

Control PCLK into IIS block.  

0 = Disable,   1 = Enable 

1

IIC
[16] 
Control PCLK into IIC block.  
0 = Disable,   1 = Enable 
1
ADC(&Touch Screen) 
[15]
Control PCLK into ADC block.
0 = Disable,   1 = Enable 
1
RTC 
[14] 
Control PCLK into RTC control block.
Even if this bit is cleared to 0, RTC timer is alive. 0 = Disable,   1 = Enable 
1
GPIO
[13]
Control PCLK into GPIO block.
0 = Disable,   1 = Enable 
1
UART2
[12] 
Control PCLK into UART2 block.
0 = Disable,   1 = Enable 
1
UART1 
[11]
Control PCLK into UART1 block.
0 = Disable,   1 = Enable 
1
UART0
[10]
Control PCLK into UART0 block.
0 = Disable,   1 = Enable
1
SDI 
[9]
Control PCLK into SDI interface block.
0 = Disable,   1 = Enable
1
PWMTIMER
[8]
Control PCLK into PWMTIMER block.
0 = Disable,   1 = Enable
1
USB device
[7]
Control PCLK into USB device block.  
0 = Disable,   1 = Enable
1
USB host
[6]
Control HCLK into USB host block.  
0 = Disable,   1 = Enable
1
LCDC 
[5]
Control HCLK into LCDC block.
0 = Disable,   1 = Enable  
1
NAND Flash Controller
[4]
Control HCLK into NAND Flash Controller block. 0 = Disable,   1 = Enable
1
SLEEP 
[3]
Control SLEEP mode of S3C2440A.
0 = Disable,   1 = Transition to SLEEP mode
0
IDLE BIT
[2] 
Enter IDLE mode. This bit is not cleared automatically.
0 = Disable,   1 = Transition to IDLE mode
0
Reserved 
[1:0] 
Reserved
0

你可能感兴趣的:(时钟,jz2440)