ARM920T clocking

电子手表初步化

参考:

linux设备驱动程序之机械钟管理(1)—-最初的回想

PLL(Phase Locked Loop):
为锁相回路或锁相环,用来统整时脉讯号,使内部存款和储蓄器能正确的存取资料。PLL用赵学斌荡器中的反馈本领。
好多电子器具要健康办事,平日必要外表的输入非确定性信号与其间的震荡时域信号同步,利
用锁相环路就足以兑现那么些指标。

诸如Samsungs3c2410就有三个PLL,一个是MPLL,即machine
PLL,主要用来CPU和一些外场器件,另一个是UPLL,即USB
PLL,首要用于USB的石英钟。他们用于爆发二种频率,即FCLK ,HCLK,
PCLK,这二种频率分别有着分裂的用途

FCLK重即使为CPU提供机械钟时限信号,FCLK is used by ARM920T,内核石英钟,主频。

HCLK是为AHB总线提供的石英钟功率信号,Advanced High-performance
Bus,重要用于高速外设,举个例子内部存款和储蓄器调整器,中断调节器,LCD调整器,DMA等,HCLK
is used for AHB bus, which is used by the ARM920T, the memory
controller, the interrupt controller, the LCD controller, the DMA and
USB host block. 也正是总线时钟,包涵USB时钟。

PCKL是为APB总线提供的石英钟实信号,Advanced Peripheral Bus。PCLK is used for
APB bus, which is used by the peripherals such as WDT, IIS, I2C, PWM
timer, MMC interface,ADC, UART, GPIO, RTC and
SPI.即IO接口机械钟,举个例子串口的石英表设置便是从PCLK来的.

那回算是清晰点儿了哈?可是。。那多少个石英钟到底有怎么样关联吧?这两个时钟平日设置为1:4:8,1:3:6的分频关系,也就说借使主频FLCK是400MHz,依据1:4:8的装置,那么HLCK是100MHz,PLCK是50MHz。

输入石英钟FIN与主频FCLK的关系
今世的CPU基本上都使用了比主频低的多的原子钟输入,在CPU内部采取锁相环举行倍频。对于S3C2440,常用的输入挂钟FIN有二种:12MHz和16.9344MHz,那么CPU是怎么样将FIN倍频为FCLK的吧?
S3C2440施用了四个倍频因子MDIV、PDIV和SDIV来安装将FIN倍频为MPLL,也便是FCLK
MPLL=(2*m*FIN)/(p*2^s) where m=(MDIV+8), p=(PDIV+2), s=”SDIV”
寄存器MPLLCON正是用来设置倍频因子的
议论上,你能够透过安装该寄放器来促成分歧的功能,不过,由于实在存在的各类束缚关系,设置三个方便的频率并不轻松,手册上列出了有的常用频率的表格,
譬喻,倘使输入石英钟FIN=16.9344M,MDIV=110, PDIV=”3″, SDIV=”1″,
应用方面包车型地铁公式,FCLK=2*16.9344*(110+8)/((2+3)*2)=399.65
3)关于USB时钟
S3C2440有七个锁相环,三个主锁相环MPLL提要求FCLK的,别的二个UPLL是提必要USB时钟(48MHz)的,与MPLL同样,UPLL的发生也是透过
UPLLCON存放器设置分频因子获得,总计公式稍有两样:
UPLL=(m*FIN)/(p*2^s) where m=(MDIV+8), p=(PDIV+2),
s=”SDIV”,一样,可以经过查表获得三个适龄的值。
最后值得一说的是,在CLKDIVN的第几个人DIVN_UPLL用来安装USB时钟UCLK和UPLL的关联,就算UPLL已经是48Mhz了,那么那一个人应该安装为0,表示1:1的关系,不然是1:2的涉嫌

2410的石英钟和电源管理
手表和电源管理模块由3局地构成:机械钟调控、USB调整、电源调节。
原子钟调整部分发生3种挂钟复信号:CPU用的FCLK,AHB总线用的HCLK,APB总线用的PCLK。有2个锁相环,贰个用于FCLK
HCLK
PCLK,另三个用来48MHz的USB机械钟。能够通过不使能锁相环来实现慢速省电指标。
电源处理模块提供了4种形式:
Normal格局、Slow形式、Idle情势、Power_Off模式。
Normal Mode

该形式下一旦持有外围设备都开发时电流消耗最大,允许用户通过软件关闭外围设备到达省电指标。
Slow Mode
不利用PLL的形式,能量消耗仅在于外机械钟的成效。由外界提供的机械钟源作FCLK。
Idle Mode
关掉了给cpu的FCLK石英钟,但外围设备石英钟仍存在,任何到CPU的中断诉求可以将cpu唤醒。
Power_off Mode
这种方式关掉了内部供电,唯有给wake_up部分的供电还留存。可以经过外部中断或实时石英钟中断能够唤起。
存放器CLKDIVN评释并设置了那多个时钟的关系

机械电子手表结构:主石英钟源来自外界晶振XTlpll或外部时钟EXTCLK。

PLL(Phase 洛克d Loop):
为锁相回路或锁相环,用来归并整合时脉讯号,使内部存款和储蓄器能准确的存取资…

The ARM920T has two functional clock
inputs, BCLK and FCLK. Internally, the ARM920T is clocked by GCLK,which
can be seen on the CPCLK output as shown in Figure 5-1.GCLK can be
sourced from either BCLK or FCLK depending on the clocking mode,
selected using nF bit and iA bit in CP15 register 1 (see Register 1:
Control register on page 2-12),and external memory access.The three
clocking modes are FastBus, synchronous and asynchronous.

  1. 率先供给选用挂钟源的来源,jz2440抉择的是00,使用晶振的方式

ARM920T有2个挂钟输入,分别是BCLK和FCLK。从图5-1中GPCLK的出口能够阅览,ARM920T内部是由GCLK石英钟格局驱动。CP15寄放器1(参见寄存器1:调节寄放器,2-12页)的nF位和iA位决定石英钟形式,即决定了GCLK是由FCLK仍旧BCLK爆发。一共有3种石英钟形式,分别为高效总线、同步以及异步情势。

澳门金沙国际 1

 

上电石英钟源选拔

 

The ARM920T is a static design and both
clocks can be stopped indefinitely without loss of state. From Figure
5-1 it can be seen that some of the ARM920T macrocell signals will have
timing specified with relation to GCLK, which can be either FCLK or BCLK
depending on the clocking mode

  1. 石英表相关的寄存器设置

 

ARM920T的安顿性是稳定的,二种时钟都得以被无期限的暂停,而不会招致情状遗失。从图5-1那可以看来,某些ARM92的macrocell实信号的timing受到GCLK的震慑,而GCLK具体是由FCLK是依旧BCLK发生,则是由时钟格局决定。

澳门金沙国际 2

系统石英钟

 

原子钟相关的贮存器

MINI2440开荒板在并未有展开挂钟前,整个开荒板全靠一个12MHz的晶振提供频率来运作,也正是说CPU,内部存款和储蓄器,UART等急需用到石英钟频率的硬件都干活12MHz下,而S3C2440A能够健康办事在400MHz下,两个速度相差总来说之,就好比牛车和轻轨。假若CPU工作在12MHz频率下,开采板的应用频率比异常低,全部重视系统石英钟专业的硬件,其工作成效也异常的低,举个例子,大家计算机内部平日涉及的超频,超频正是让CPU专门的学业在更加高的效用下,让计算机械运输算速度越来越快,即便频率是越高越好,不过出于硬件性格决定了别的二个设备都十分小概无穷境的超频,计算机超频时要思索到CPU或主板发热过大,烧坏的危险,一样开辟板的主板上的外设和CPU也会有四个频率限度,ARM920T内核的S3C2440的参天平常职业频率如下:

 澳门金沙国际 3

3.注意事项

l   FCLK:400MHz

 

  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.

l   HCLK:100MHz

FASTBUS MODE

上面是总的步骤,现在三个个详解
1.机械钟源的挑选
由OM[3:2]引脚来决定选拔,参照他事他说加以考察图片”石英钟电路1″,可见那七个引脚接地,选拔的是00.Main
Clock source 和USB Clock Source都以晶振

l   PCLK:50MHz

急速总线方式

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

既是,那么如何让CPU职业在400MHz,让牛行车速度度增加到高铁的快慢吗?

In FastBus mode GCLK is sourced from BCLK.
The FCLK input is ignored. This

澳门金沙国际 4

1   系统工作挂钟频率

在对系统石英钟实行提速在此以前,让我们先来询问下S3C2440上的做事时钟频率,FCLK,HCLK,PCLK,个中FCLK主要为ARM920T内核提供专门的学业频率,如图2-44所示:

澳门金沙国际 5

 

图2-44  ARM920T内核结构

HCLK主要为S3C2440 AHB总线(Advanced High performance
Bus)上挂接硬件提供职业频率,AHB总线首要挂接有内存,NAND,LCD调整器等硬件,如图2-45所示:

 澳门金沙国际 6

图2-45 S3C2440 AHB总线上挂接硬件

PCLK重要为APB总线提供职业频率,由图2-46所示,APB总线首要挂接UART串口,Watchdog等硬件调整器。

澳门金沙国际 7

 

图2-46 S3C2440 APB总线挂接硬件

也正是说,对于部分急需时钟工作的硬件,若是切断其机械钟源 ,就不会再专门的学业,进而达到减少耗电的指标,那也是便携嵌入式设备里的一个天性。

石英钟源:为了减小外界条件对开辟板电磁搅扰,裁减制作花费,常常开荒板的外界晶振石英钟频率都相当低,MINI2440开辟板由12MHz的晶振来提供时钟源,要想让CPU运转在更加高的频率将要通过时钟调整逻辑单元PLL(锁相环)来增加主频。

S3C2440里有四个PLL:MPLL和UPLL,MPLL用来发出FCLK,HCLK,PCLK的一再职业机械钟,UPLL用来为USB提供工作频率。

 澳门金沙国际 8

图2-47系统时钟开头化时序

开荒板上电后,晶振OSC初步提供晶振石英钟,由于系统刚刚上电,电压时域信号等都还不平静,那时重新恢复设置时限信号(nRESET)拉低,那时MPLL固然暗中认可运转,不过倘使不向MPLLCON中写入值,那么外界晶振则直接作为系统石英钟FCLK,过几皮秒后,重新复苏设置时限信号上拉,CPU早先取指运维,那时能够通过代码设置运维MPLL,MPLL运维需求料定锁定时期(LockTime),那是因为MPLL输出频率还未有平安,在那中间FCLK都停下输出,CPU甘休职业,过了LockTime后时钟牢固出口,CPU专门的职业在新安装的作用下,那时能够透过安装FCLK,HCLK和PCLK三者的功效比例来发出差别总线上急需的例外频率,下边详细介绍开启MPLL的进程:

l  设置Lock提姆e变频锁定期期

l  设置FCLK与晶振输入频率(Fin)的翻番

l  设置FCLK,HCLK,PCLK三者之间的比例

LockTime变频锁定时期由LOCKTIME存放器(见下表)来安装,由于变频后开荒板全数重视挂钟专门的学业的硬件都必要一小段调度时间,该时间计数通过安装LOCKTIME存放器[31:16]来安装UPLL(USB石英钟锁相环)调治时间,通过设置LOCKTIME存放器 [15:0]安装MPLL调治时间,这七个调治时间数值一般用其暗许值就能够。

表2-8变频锁按期期寄放器(LOCKTIME)

寄存器名

地址

是否读写

描述

复位默认值

LOCKTIME

0x4C000000

R/W

变频锁定时间寄存器

0xFFFFFFFF

 

LOCKTIME

描述

初始值

U_TIME

[31:16]

UPLL对UCLK的锁定时间值

(U_TIME:300us)

0xFFFF

M_TIME

[15:0]

MPLL对于FCLK,HCLK,PCLK的锁定时间值(M_TIME:300us)

0xFFFF

FCLK与Fin的倍数通过MPLLCON贮存器设置,三者在此之前有以下关系:

MPLL(FCLK) = (2*m*Fin)/(p*2^s)

其中:m = MDIV + 8, p = PDIV + 2, s = SDIV

当设置完MPLL之后,就能够自行踏入LockTime变频锁定时间,LockTime之后,MPLL输出牢固石英钟频率。

表2-9 MPLL配置寄存器(MPLLCON)

寄存器名

地址

是否读写

描述

复位默认值

MPLLCON

0x4C000004

R/W

MPLL配置寄存器

0x00096030

 

MPLLCON

描述

初始值

MDIV

[19:12]

主分频器控制位

0x96

PDIV

[9:4]

预分频器控制位

0x03

SDIV

[1:0]

后分频器控制位

0x0

经过上述算法相比难以找到适合的PLL值,下表给出了合法推荐的局地MPLL参考设置:

表2-10 官方推荐MPLL

澳门金沙国际 9

 

FCLK,HCLK,PCLK三者之间的比例通过CLKDIVN寄放器进行安装,S3C2440时钟设置时,还要额外设置C英特尔IVN寄放器,如下表,HCLK4_HALF,HCLK3_HALF分别与CAMDIVN[9:8]对应,下表列出了各样石英钟比例:

最初的影象,S3C2440石英钟配置。表2-11 FCLK HCLK PCLK设置比例

澳门金沙国际 10

 

要是HDIV设置为非0,CPU的总线情势要进行转移,暗中同意情况下FCLK =
HCLK,CPU专门的学业在fast bus
mode快捷总线方式下,HDIV设置为非0后, FCLK与HCLK不再相等,要将CPU改为asynchronous
bus mod异步总线形式,能够通过上边的放权汇编代码实现:

__asm{ 

mrc p15, 0, r1, c1, c0, 0         /* 读取CP15 C1寄存器 */ 

orr r1, r1, #0xc0000000         /* 设置CPU总线情势 */ 

mcr p15, 0, r1, c1, c0, 0         /* 写回CP15 C1寄存器 */

有关mrc与mcr指令,请查看MMU与内部存款和储蓄器爱惜的落到实处章节。

表2-12石英钟分频器调控存放器(CLKDIVN)

寄存器名

地址

是否读写

描述

复位默认值

CLKDIVN

0x4C000014

R/W

时钟分频器控制寄存器

0x00000000

 

CLKDIVN

描述

初始值

DIV_UPLL

[3]

UCLK选择寄存器(UCLK必须对USB提供48MHz)

0:UCLK=UPLL clock

1:UCLK=UPLL clock/2

0

HDIVN

[2:1]

00:HCLK = FCLK/1

01:HCLK = FCLK/2

10:HCLK = FCLK/4,当CAMIVN[9]=0

HCLK = FCLK/8,当CAMIVN[9]=1

11: HCLK = FCLK/3,当CAMIVN[8]=0

HCLK = FCLK/6,当CAMIVN[8]=1

0

PDIVN

[0]

0:PCLK是和HCLK/1相同时钟

1:PCLK是和HCLK/2相同时钟

0

表2-13录制头石英钟分频调控存放器(C英特尔IVN)

寄存器名

地址

是否读写

描述

复位默认值

CAMDIVN

0x4C000018

R/W

摄像头时钟分频控制寄存器

0x00000000

 

CAMDIVN

描述

初始值

HCLK4_HALF

[9]

HDIVN分频因子选择位(当CLKIVN[2:1]位为10b时有效)

0: HCLK=FCLK/4

1: HCLK=FCLK/8

0

HCLK3_HALF

[8]

HDIVN分频因子选择位(当CLKIVN[2:1]位为11b时有效)

0: HCLK=FCLK/3

1: HCLK=FCLK/6

0

means that BCLK is used to control the
AMBA ASB interface and the internal

LOCKTIME寄存器

2    时钟驱动实验

系统时钟驱动能够分别用ARM汇编和C语言七个本子完成。

ARM汇编版本:

; 以下为时钟相关寄存器地址

LOCKTIME                                    EQU     0x4c000000        

MPLLCON                                 EQU                   0x4c000004       

CLKDIVN                                  EQU                   0x4c000014

CAMDIVN                                          EQU                   0x4c000018



clock_init                                                            ; 时钟初始化代码

    ; 设置变频锁定时间

    ldr r0, =LOCKTIME

    ldr r1, =0x00ffffff

    str r1, [r0]



    ; 设置分频比FCLK:HCLK:PCLK=1:4:8

    ; 由于CAMDIVN[9]位初始值为0,寄存器CAMDIVN未使用,这儿不用再设置其值

    ldr r0, =CLKDIVN

    mov r1, #0x05

    str r1, [r0]



    ; 修改CPU总线模式

    mrc   p15, 0, r1, c1, c0, 0

    orr    r1, r1, #0xc0000000

    mcr     p15, 0, r1, c1, c0, 0



    ldr r0, =MPLLCON

    ldr r1, =0x5c011                                ; MPLL = 400MHz

str r1, [r0]

mov pc, lr                                           ; 函数调用返回

该汇编代码入口处先设置了变频锁定时间为0x00ffffff,然后设置FCLK:HCLK:PCLK的分频比,由于系统时钟已经改变,需要修改CPU总线模式,最后设置系统时钟工作频率。

C语言版本:

/* 通过MPLL计算公式可以算出:MDIV=92,PDIV=1,SDIV=0时,MPLL=400MHz

#define MPLL_400MHz ((92 << 12)|(1 << 4)|(1 << 0))

void clock_init(void){

           /* 设置变频锁定时间 */

           LOCKTIME = 0x00ffffff;

           /* 设置分频比FCLK:HCLK:PCLK=1:4:8,CAMDIVN初始值为0,不用再对其设置 */

           CLKDIVN  = 0x05;

           /* 修改CPU总线模式 */

           __asm{

                    mrc   p15, 0, r1, c1, c0, 0

                    orr     r1, r1, #0xc0000000

                    mcr p15, 0, r1, c1, c0, 0
              }

           MPLLCON = MPLL_400MHz;

}

C语言版本与汇编版本同样,只是由于修改CPU总线方式时要使用mrc指令,由此只能使用C语言嵌入汇编格局来兑现。

 

系统石英钟驱动实验:

;

; 系统时钟初始化实验

;

WTCON                        EQU          0x53000000        ; 看门狗控制寄存器

WTDAT                         EQU          0x53000004        ; 看门狗数据寄存器

LOCKTIME                  EQU     0x4c000000         ; 变频锁定时间寄存器

MPLLCON                   EQU          0x4c000004        ; MPLL寄存器

CLKDIVN                    EQU          0x4c000014        ; 分频比寄存器

GPBCON                      EQU      0x56000010        ; LED控制寄存器

GPBDAT                       EQU      0x56000014        ; LED数据寄存器

GPBUP                         EQU      0x56000018        ; 上拉电阻设置寄存器

DELAYVAL                  EQU      0x8fff                  ; 延时数值



         AREA    CLOCK, CODE, READONLY

         ENTRY
         start

           ldr r0, = 0x53000000                      ; 看门狗关闭代码

         mov  r1, #0

         str  r1, [r0]



         bl  clock_init                                  ; 调用时钟初始化函数

         bl  led_on                                      ; 调用点亮Led函数



clock_init                                                  ; 时钟初始化代码

           ; 设置锁频时间

    ldr r0, =LOCKTIME                         ; 取得LOCKTIME寄存器地址

    ldr r1, =0x00ffffff                              ; LOCKTIME寄存器设置数据

    str r1, [r0]                                          ; 将LOCKTIME设置数据写入LOCKTIME寄存器

           ; 设置分频数

    ldr r0, =CLKDIVN                           ; 取得CLKDIVN寄存器地址

    mov r1, #0x05                                   ; CLKDIVN寄存器设置数据

    str r1, [r0]                                          ; 将CLKDIVN设置数据写入CLKDIVN寄存器



    ; 修改CPU总线模式

    mrc    p15, 0, r1, c1, c0, 0

    orr    r1, r1, #0xc0000000

    mcr    p15, 0, r1, c1, c0, 0



    ldr r0, =MPLLCON

    ldr r1, =0x5c011                                ; MPLL is 400MHz

    str r1, [r0]

    mov pc, lr



led_on                                                        ; 亮点Led函数

           ; Led初始化开始

    ldr  r0,=GPBCON                        ; 将LED控制寄存器地址放入r0

    ldr  r1,[r0]                                        ; 将控制寄存器里的值读出放入r1

    bic  r1,r1,#0x3fc00                          ; 将r1里的值(控制寄存器里的值)

                                                              ; bit[10]~bit[17]清位,其它位不变

    orr  r1,r1,#0x15400                         ; 设置控制寄存器

    str  r1,[r0]                                        ; 将r1里的值写入控制寄存器



    ; 禁止GPF4-GPF7端口的上拉电阻

    ldr  r0,=GPBUP

    ldr  r1,[r0]

    orr  r1,r1,#0x1e0

    str  r1,[r0]

           ; Led初始化结束





led_loop                                                     ; 循环点亮Led

    ldr  r2,=GPBDAT                                     ; 将LED数据寄存器的地址放入r2

    ldr  r3,[r2]                                        ; 将数据寄存器(r2)里的值放入r3

    bic  r3,r3,#0x1e0                              ; 清除bit[5]~bit[8],bit[n]代表led1~led4

    orr  r3,r3,#0x1c0                              ; 清对应Led位-亮灯,设置相应位-灭灯(点亮led1)

    str  r3,[r2]                                       ; 将控制亮灯数据写入数据寄存器r2

    ldr r0,=DELAYVAL                         ; 设置延迟数

    bl   delay                                         ; 调用延迟子程序



    ldr  r3,[r2]                                        ; 将数据寄存器(r2)里的值放入r3

    bic  r3,r3,#0x1e0                              ; 清除bit[5]~bit[8],bit[n]代表led1~led4

    orr  r3,r3,#0x1a0                              ; 清对应Led位-亮灯,设置相应位-灭灯(点亮led2)

    str  r3,[r2]                                       ; 将控制亮灯数据写入数据寄存器r2

    ldr r0,=DELAYVAL                         ; 设置延迟数

    bl   delay                                       ; 调用延迟子程序



    ldr  r3,[r2]                                        ; 将数据寄存器(r2)里的值放入r3

    bic  r3,r3,#0x1e0                              ; 清除bit[5]~bit[8],bit[n]代表led1~led4

    orr  r3,r3,#0x160                             ; 清对应Led位-亮灯,设置相应位-灭灯(点亮led3)

    str  r3,[r2]                                       ; 将控制亮灯数据写入数据寄存器r2

    ldr r0,=DELAYVAL                         ; 设置延迟数

    bl   delay                                       ; 调用延迟子程序



    ldr  r3,[r2]                                        ; 将数据寄存器(r2)里的值放入r3

    bic  r3,r3,#0x1e0                              ; 清除bit[5]~bit[8],bit[n]代表led1~led4

    orr  r3,r3,#0xe0                               ; 清对应Led位-亮灯,设置相应位-灭灯(点亮led4)

    str  r3,[r2]                                       ; 将控制亮灯数据写入数据寄存器r2

    ldr r0,=DELAYVAL                         ; 设置延迟数

    bl   delay                                      ; 调用延迟子程序



    b led_loop



delay

         sub r0,r0,#1                             ; r0=r0-1

           cmp r0,#0x0                                   ; 将r0的值与0相比较

bne delay                                                  ; 比较的结果不为0,继续调用delay

           mov pc,lr                                        ; 返回

    END                                ; 程序结束符

该试验首先关闭了看门狗放大计时器,然后修改系统时钟,将暗许系统专门的学问频率12MHz升高到400MHz,由于CPU职业在较高频率下,其进行进程明显比未运营系统石英钟时高的多,能够透过注释掉系统石英钟伊始化代码跳转指令 bl
clock_init,比较LED的跑马灯效果可以表达。


 在移植Nboot时,发掘串口输出乱码,检查串口配置没难点后,以为应该是时钟配置没配好,修改后果然ok,所以补习一下!
2440时钟配置详细表达,以上电为顺序呈报:

ARM920T processor core.

从上海体育场所能够看出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),这些历程不是一下子就产生的,须要确定的转移时间.那一个便是安装这一个的.

一、S3C2440A时钟概述

     1、S3C2440A的电源管理有4种方式:NORMAL,SLOW,IDLE,SLEEP。

     2、 有4种机械钟:FCLK,HCLK,PCLK,UCLK具体分工如下:

FCLK is used by ARM920T.
HCLK is used for AHB bus, which is used by the ARM920T, the memory
controller, the interrupt controller, the LCD
                    controller, the DMA and USB host block.
PCLK is used for APB bus, which is used by the peripherals such as WDT,
IIS, I2C, PWM timer, MMC interface,
                    ADC, UART, GPIO, RTC and SPI.

           UCLK专门为USB供电,有UPLL输出。

     
3、有四个锁相环,多个MPLL担负FCLK,HCLK,PCLK,叁个UPLL担任USB的48MHz,通过多个倍频因子MDIV、PDIV和SDIV来
设置倍频。

On reset, the ARM920T is put into FastBus
mode and operates using BCLK. A typical

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

二、S3C2440A时钟上电经过

     
 1、主石英钟源能够由外界挂钟(EXTCLK)可能外界晶振(XTIPll)提供,时钟源由形式调整引脚OM3和OM2挑选,在重新恢复生机设置能量信号

              的提高沿检查评定OM3和OM2引脚状态并锁定在OM[3:2]中。

     
2、大家能够在先后初始运行MPLL,在安装MPLL的多少个寄存器后,须要等待一段时间(Lock
Time),MPLL的输出才平稳。在这段 

            (Lock Time)时间内,FCLK停振,CPU结束工作。Lock
Time的长度由寄放器LOCKTIME设定。Lock Time之后,MPLL输出平    

         稳。在上电没有设置MPLL时,系统石英钟为晶振石英钟。

use for FastBus mode is to execute startup
code while configuring a PLL under software

PS:什么是AHB,什么是APB,具体什么看头能够百度,google,以下截图是cpu手册八个总线具体有怎么着设备.

三、S3C2440A石英钟配置流程和样例

     
1、设置S3C2440A的石英钟频率供给配置4个存放器:LOCKTIME(0x4C000000)CLKDIVN
(0x4C000014)
MPLLCON

        ( 0x4C000004)UPLLCON(0x4C000008)。

      2、时钟配置顺序如上:LOCKTIME => **CLKDIVN
 => MPLLCON
=> **UPLLCON。注意:UPLL的安装要先于MPLL,切超前7个石英钟

            设置。

      3、时钟样例:

       
  (1)、LOCKTIME:位[31:16]用于UPLL,位[15:0]用于MPLL。确省值为0xFFFFFFFF

          (2)、CLKDIVN:DIVN _UPLL[3]:HDIVN [2:1]:PDIVN
[0]用来安装FCLK:HCLK:PCLK的比重关系,默以为1:1:1。

                     
 CLKDIVN差异的装置及相应的原子钟比例关系如下图:澳门金沙国际 11

                             图HDIVN
和PDIVN对应的比重,HCLK4_HALF和HCLK3_HALF在拍照头CAMDIVN贮存器中。  澳门金沙国际 12

          ( 3)MPLLCON贮存器位[19:12]-MDIV(Main divider
control);[9:4]-PDIV(Pre-divider control);[1:0]-SDIV(Post
divider        

                    control)。                     

澳门金沙国际 13 

             锁相环输出石英钟MPLL(FCLK) 通过如下总计公式得出:

                              MPLL(FCLK) = (m * Fin)/(p *
2^s);**
里头:m = (MDIV + 8), p = (PDIV + 2), s = SDIV,Fin
输入的石英钟频率。**

                     如:MPLLCON设为(0x5c <<
12)|(0x01 << 4)|(0x1),即0x5c010,能够测算出FCLK=200MHz,倘若CLKDIVN设置 

                     
HDIV=1和PDIV=1;可见比例FCLK、HCLK、PCLK比率为1:2:4,所以HCLK=100MHz,PCLK=50MHz。

                     下图 为锁相环配置推荐表。

澳门金沙国际 14

            UPLLCON同理一样设置,总结公式如下:UPLL(UCLK) = (m * Fin)
/ (p * 2^s),m = (MDIV + 8), p = (PDIV + 2), s =SDIV。

       Fin 输入的石英钟频率。

   (4)程序:

[cpp] view
plaincopyprint?

  1. ;To reduce PLL lock time, adjust the LOCKTIME register.  
  2.   ldr r0,=LOCKTIMEldr r1,=0xffffffstr r1,[r0] ;Configure CLKDIVN  
  3.  ; Added for confirm clock divide. for 2440.; Setting value Fclk:Hclk:Pclkldr r0,=CLKDIVNldr r1,=CLKDIV_VAL; 0=1:1:1, 1=1:1:2, 2=1:2:2, 3=1:2:4, 4=1:4:4, 5=1:4:8, 6=1:3:3, 7=1:3:6.str r1,[r0];Configure UPLL  
  4.     ldr r0,=UPLLCON  
  5.     ldr r1,=((U_MDIV<<12)+(U_PDIV<<4)+U_SDIV)    
  6.     str r1,[r0]  
  7.     nop ; Caution: After UPLL setting, at least 7-clocks delay must be inserted for setting hardware be completed.  
  8.     nop  
  9.     nop  
  10.     nop  
  11.     nop  
  12.     nop  
  13.     nop  
  14. ;Configure MPLL  
  15.     ldr r0,=MPLLCON  
  16.     ldr r1,=((96<<12)+(M_PDIV<<4)+M_SDIV)  ;Fin=16.9344MHz  68<<12+1<<4+1  
  17.     str r1,[r0]  

control to produce FCLK at a higher
frequency. When the PLL has stabilized and

澳门金沙国际 15

四、机械钟修改影响单元

    在移植程序是要注意石英钟修改后对应的模块频率也改成了,作者的Nboot移植时,供给修改多少个位置:UART 和 SDRAM。 UART,它是接在APB总线上,对应的石英表时限信号为PCLK,假设未来为50MHz。假使想要设置Porter率为115200bps,那么根公式 UB酷威DIV0=(int)(PCLK/(bps*16))-1计算,应该为26。程序:UBRDIV0 = ((int)(PCLK/16./UART_BAUD_RATE) -1).

 

locked, you can switch the ARM920T to
synchronous or asynchronous clocking using

AHB

FCLK for normal operation.

澳门金沙国际 16

在快捷总线方式,GCLK来自于BCLK,FCLK输入被忽视。那意味BCLK被用来控制AMBA
ASB接口和内部的ARM920T管理器核。复位时,ARM920T步向高速总线格局,操作使用BCLK。一般急迅总线形式在开行代码时实行,然后由软件配置PLL发生高频的FCLK。在PLL稳固后能够切换ARM920T到一块儿或异步石英钟,使用FCLK举办操作。

APB

小结:

2.2 MPLLCON调控分频周密的

  • GCLK=BCLK,FCLK被忽略

澳门金沙国际 17

存放器的格式

  • 板子reset之后即步入该方式

晶振的效能要进行扩张,晶振频率选用的是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

  • 该形式的头角峥嵘应用是实践运行代码,同期软件配置PLL,使得FCLK更加高
  • 2.3 UPLLCON是调节usb的,裸板也未曾讲要设置

  • 2.4 CLKCON相应外设的石英钟使能不使能,按需进行安装

  • 2.5 CLKSLOW

澳门金沙国际 18

  • nF=0且iA=0

CLKSLOW

 

明明MPLL应该是要turn on的

SYNCHRONOUS MODE

  • 2.6 CLKDIVN
    设置了FCLK并未安装HCLK和PCLK啊!这几个寄放器就是设置别的三个石英钟的!

一块格局

In this mode of operation GCLK is sourced
from BCLK or FCLK. There are three

这里设置HCLK为FCLK的一半:
01 : HCLK = FCLK/2.
PCLK是HCLK的一半:
1: PCLK has the clock same as the HCLK/2.

restrictions that apply to BCLK and
FCLK:

  • 2.7 C英特尔IVN这么些理应是录制头的,不用操作

• FCLK must have a higher frequency than
BCLK

澳门金沙国际 19

• FCLK must be an integer multiple of the
BCLK frequency

Clock Generator Block Diagram

• FCLK must be HIGH whenever there is a
BCLK transition.

澳门金沙国际 20

在这么些操作方式GCLK来自于BCLK或FCLK。不过对于BCLK和FCLK要满足3个条件:

PLL (Phase-Locked Loop) Block Diagram

1. FCLK必须比BCLK有越来越高的频率

澳门金沙国际 21

2. FCLK必须是BCLK频率的寸头倍数

石英石英表参照他事他说加以考察表格

3.
不论是BCLK怎么转移,FCLK的效能都要高于BCLK

澳门金沙国际 22

 

Main Oscillator Circuit Examples

BCLK is used to control the AMBA ASB
interface, and FCLK is used to control the

澳门金沙国际 23

internal ARM920T processor core. When an
external memory access is required the

原子钟电路1

core either continues to clock using FCLK
or is switched to BCLK, as shown in

  1. 末段注意事项说了,假诺HDIV不等于0的话,需求切换总线格局
    <ARM920T_TRM1_S.pdf>
    fast bus mode to the asynchronous

Table 5-1. This is the same as for
asynchronous mode.

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

澳门金沙国际 24

澳门金沙国际 25

BCLK被用来调节AMBA
ASB总线接口,FCLK用来支配其中的ARM920T管理器核。

c1寄存器nF-iA

  • 当访谈外界存款和储蓄地方时,管理器宗旨如故一而再使用FCLK,要么切换成BCLK。见表1。

澳门金沙国际 26

外部存储访问操作

GCLK=

写缓冲区

FCLK

写非缓冲区

BCLK

页搜寻、读缓冲(占满)、读非缓冲

BCLK

安装参照他事他说加以考察表

表1

 

The penalty in switching from FCLK to BCLK
and from BCLK to FCLK is

symmetric, from zero to one phase of the
clock to which the core is re-synchronizing.

That is, switching from FCLK to BCLK has a
penalty of between zero and one BCLK

phase, and switching back from BCLK to
FCLK has a penalty of between zero and one

FCLK phase.

从FCLK切换成BCLK与BCLK切换来FCLK的代价是相等的。要求开销0~1个石英钟周期使核重新联合。从FCLK切换来BCLK的代价是0~1个BCLK。从BCLK切换成FCLK的代价是0~1个FCLK。

Figure 5-2 on page 5-5 shows an example
zero BCLK phase delay when switching

from FCLK to BCLK in synchronous
mode.

澳门金沙国际 27

 Figure 5-2 Synchronous mode FCLK to BCLK
zero phase delay

 

Figure 5-3 shows an example one BCLK phase
delay when switching from FCLK to

BCLK in synchronous mode.

澳门金沙国际 28

Figure 5-3 Synchronous mode FCLK to BCLK
one phase delay

小结:

  • GCLK=BCLK或者GCLK=FCLK
  • FCLK=n*BCLK(n大于1且为整数)
  • BCLK用于调节AMBA
    ASB接口,而FCLK用来决定当中的ARM920T管理器宗旨。当访谈外界存款和储蓄地方时,管理器大旨依然一而再运用FCLK,要么切换成BCLK。见表1。
  • nF=1且iA=0

 

Asynchronous mode

异步情势

In this mode of operation GCLK is sourced
from BCLK or FCLK. FCLK and BCLK

can be completely asynchronous to one
another, with the one restriction that FCLK

must have a higher frequency than
BCLK.

BCLK is used to control the AMBA ASB
interface, and FCLK is used to control the

澳门金沙国际 ,internal ARM920T processor core. When an
external memory access is required the

core either continues to clock using FCLK
or is switched to BCLK. This is the same

as for synchronous mode.The penalty in
switching from FCLK to BCLK and from

BCLK to FCLK is symmetric, from zero to
one cycle of the clock to which the core is

re-synchronizing. That is, switching from
FCLK to BCLK has a penalty of between

zero and one BCLK cycle, and switching
back from BCLK to FCLK has a penalty of

between zero and one FCLK cycle.

在这些操作形式GCLK来自于BCLK或FCLK。FCLK和BCLK之间可以完全异步,独有三个要满意的原则是FCLK的频率要高于BCLK。BCLK被用来调控AMBA
ASB总线接口,FCLK用来调节在那之中的ARM920T管理器核。与联合格局时同样,从FCLK切换来BCLK与BCLK切换来FCLK的代价是相等的。供给花费0~1个石英钟周期使核重新联合。从FCLK切换来BCLK的代价是0~1个BCLK。从BCLK切换到FCLK的代价是0~1个FCLK。

 

Figure 5-4 shows an example zero BCLK
cycle delay when switching from FCLK to

BCLK in asynchronous mode.

澳门金沙国际 29

Figure 5-4 Asynchronous mode FCLK to BCLK
zero cycle delay

 

Figure 5-5 on page 5-7 shows an example
one BCLK cycle delay when switching from

FCLK to BCLK in asynchronous mode.

澳门金沙国际 30

Figure 5-5 Asynchronous mode FCLK to BCLK
one cycle delay

 

小结:

  • GCLK=BCLK或者GCLK=FCLK
  • BCLK用于调节AMBA
    ASB接口,而FCLK用来支配其中ARM920T管理器核心。当访谈外界存款和储蓄地点时,管理器主题照旧三番两次接纳FCLK,要么切换成BCLK。见表1。
  • nF=1且iA=1

 

注:

  1. nF为P15的1号存放器的第三贰九个人
  2. iA为P15的1号贮存器的第三17个人

澳门金沙国际 31

相关文章