一、对clock的基本认识
1 s3c2410的clock & power management模块包含三个部分:clock control、usb control、power control。现在的关注点是clock control。
    2、s3c2410有两个pll(phase locked loop,锁相环,在高频中学过,可以实现倍频,s3c2410的高频就是由此电路产生的)。其中一个是MPLL,M即为main,用来产生三种时钟信号:Fclk(给CPU核供给时钟信号,我们所说的s3c2410的cpu主频为200MHz,就是指的这个时钟信号,相应的,1/Fclk即为cpu时钟周期)、Hclk(为AHB bus peripherals供给时钟信号,AHB为advanced high-performance bus)、Pclk(为APB bus peripherals供给时钟信号,APB为advanced peripherals bus)。 在这里,需要了解一下AMBA system architecture了。这个可以到官方网站 www.arm.com 下载相关资料。简单的说,AMBA是一种协议,这种协议已经称为片上组织通信的事实上的标准(the de facto standard for on-chip fabric communication)。下面给出英文描述:
    The AMBA protocol is an open standard, on-chip bus specification that details a stategy for the interconnection and management of functional blocks that makes up a system-on-chip(SoC).It facilitates "right-first-time" development of embedded processors with one or more CPU/signal processors and multiple peripherals. The AMBA protocol enhances a resuable design methodology by defining a common backbone for SoC modules.
    需要知道的是,AMBA总线是ARM提出的一种解决方案,它并非唯一的规范,但是因为ARM的广泛使用,AMBA总线也就成为了事实上的规范了。现在AMBA总线最新为AMBA 3 specification版本,包括AMBA 3 AXI Interface、AMBA 3 AHB Interface、AMBA 3 APB Interface、AMBA 3 ATB Interface。而s3c2410还只能支持AMBA 2 specification,这个版本包含AMBA 2 AHB Interface、AMBA 2 APB Interface。也就是在s3c2410的框图中看到的两种总线接口。需 要注意的是,这两种总线所连的外设是有区别的。AHB总线连接高速外设,低速外设则通过APB总线互连。显然,对不同总线上的外设,应该使用不同的时钟信 号,AHB总线对应Hclk,APB总线对应Pclk。那么事先就应该弄清楚,每条总线对应的外设有那些,这样在设置好时钟信号后,对应外设的初始化的值 就要依此而确定了。
    AHB bus上的外设有LCD controller(CONT代表controller,控制器)、USB Host CONT、ExtMaster、Nand CONT和nand flash boot loader、bus CONT、interrupt CONT、power management、memory CONT(sram/nor/sdram等)。
    APB bus上的外设有UART、USB device、SDI/MMC、Watch Dog Timer、bus CONT、spi、iic、iis、gpio、rtc、adc、timer/pwm。
    3、主时钟源来自外部晶振或者外部时钟。复位后,MPLL虽然默认启动,但是如果不向MPLLCON中写入value,那么外部晶振直接作为系统时钟。 EDUKIT-III的外部晶振有两个,一是用于系统时钟,为12MHz;一个用于RTC,为32.768KHz。以前实验没有向MPLLCON写入数 值,所以系统时钟都是12MHz。从这里也可以发现一个问题,如果外部晶振开始没有焊上,那么系统是无法正常启动的。因为按照上述规则,复位后还没有写入 MPLLCON,这时又没有可以使用的时钟源,所以不会启动。也就是硬件完成后,这个12MHz的晶振是一定要焊上的,才能进行后续的硬件测试工作。
二、clock设置的步骤
    首先应该读懂下一段:

Power- On Reset  ( XTIpll)

Figure
7-
4 shows
the clock
 behavior
during the power-
on reset
sequence.
 The crystal
oscillator begins oscillation within several
milliseconds.
 When nRESET is
released after the stabilization of
OSC (
XTIpll)
 clock
,
 the PLL starts
to operate according to thedefault
 PLL
configuration.
 However,
 PLL
is commonly known to be unstable after power-
on reset
,
 so Fin is fed
directly to FCLK instead of the Mpll (
PLL output)
 before the
software newly configures the PLLCON.
 Even if
 the
user does not
 want to change
the default
 value of
PLLCON register
 after reset
,
 the
user shouldwrite
 the same
value into PLLCON register
 by
software.

The PLL restarts the lockup sequence toward
the new
 frequency only
after the software configures the PLL with
a new
 frequency.
 FCLK
can be configured as PLL output (
Mpll)
 immediately
after locktime
.

   
这个主要是基于PLL的特点。简单的描述就是,上电复位后,几个ms后晶振起振。当OSC时钟信号稳定之后,nRESET电平拉高(这是硬件自动检测过
程)。这个时候,PLL开始按照默认的PLL配置开始工作,但是特殊性就在于PLL在上电复位后开始是不稳定的,所以s3c2410设计为把Fin在上电
复位后直接作为Fclk,这是MPLL是不起作用的。如果要想是MPLL起作用,那么方法就是写入MPLLCON寄存器值,然后等待LOCKTIME时间
后,新的Fclk开始工作。下面把这些步骤分来来描述,软件步骤部分结合程序进行。
   
1、上电几个ms后,晶振输出稳定。Fclk=晶振频率。nRESET恢复高电平后,cpu开始执行指令,这完全是硬件动作,不需要软件设置。
   
2、第一步软件工作: 设置P M S divider control,也就是设置MPLLCON寄存器。
   
关于PMS,可以看Figure
7-2.寄存器MPLLCON的设置呢,其实有一定的规则,并非你想要的每个Fclk频率都可以得到。官方推荐了一个表PLL VALUE
SELECTION
TABLE,要按照这个进行。否则的话,就需要自己按照公式推算,但是mizi公司并不保证你的设置是合适的。所以,如果想要工作在200MHz,还是按照vivi的推荐值即可。

@ step1:
 set P M S
divider control
        mov
 r1,
 #CLK_CTL_BASE

ldr r2,
 =
vMPLLCON_200
        str
 r2,
 [
r1,
 #oMPLLCON]

   
其中,MDIV=0x5c,PDIV=0x04,SDIV=0x00.公式Mpll(Fclk)=(m×Fin)/(p×(2^s))【m=MDIV+8,
p=PDIV+2,s=SDIV】
   
3、第二步软件工作: 设置CLKDIVN。
   
这一步是设置分频系数,即Fclk为cpu主频,Hclk由Fclk分频得到,Pclk由Hclk分频得到。假设Hclk是Fclk的二分频,Pclk是
Hclk的二分频,那么分频系数比就是Fclk:Hclk:Pclk=1:2:4.那么Hclk为100MHz,总线时钟周期为10ns。Pclk为
50MHz。

@ step2:
 change clock
divider
        mov
 r1,
 #CLK_CTL_BASE

mov
 r2,
 #vCLKDIVN

str
 r2,
 [
r1,
 #oCLKDIVN]

   
4、第三步软件工作: CLKDIVN的补充设置

If
 HDIVN =
 1,
 the
CPU bus mode has to be changed from the fast bus mode to the
asynchronous bus mode using
 following
instructions.

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=
1 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 without affecting the
HCLK and
 PCLK.

   
看了上段话,只需要翻译出来就可以了。

@ FCLK:
HCLK=
1:
2
.
macro
 MMU_SetAsyncBusMode

mrc p15,
 0,
 r0,
 c1,
 c0,
 0
        
orr r0,
 r0,
 #(
R1_iA |
 R1_nF)

mcr p15,
 0,
 r0,
 c1,
 c0,
 0
.
endm

        
@ step3:
 set asynchronous
bus mode
        
MMU_SetAsyncBusMode

   
5、第四步软件工作:等待locktime时间,让新的Fclk生效

@ step4:
 stay
locktime 
        mov
 r1,
 #CLK_CTL_BASE

ldr r2,
 =
vLOCKTIME
        str
 r2,
 [
r1,
 #oLOCKTIME]

   
6、对外设的影响
   
在这个实验中,主要是有两个需要改变,一个外设是UART,一个外设是SDRAM。
   
(1)UART,它是接在APB总线上,所以对应的时钟信号为Pclk,现在为50MHz。如果想要设置波特率为115200bps,那么根据公式
UBRDIV0=(int)(PCLK/(bps*16))-1计算,应该为26。如果放到程序中,那么应该注意形式。具体如下:

UBRDIV0 =
 (
(
int
)
(
PCLK/
16.
/
UART_BAUD_RATE)
 -
1)
;

   
(2)SDRAM,主要的影响因素为刷新频率。前面在SDRAM中没有具体分析,现在可以详细说明。使用了两片HY57V561620CT-H,查看手册其刷新频率为8192
refresh
cycles/64ms,所以刷新周期64ms/8192=7.8125us。看寄存器REFRESH的各个位的设置情况:
   
·REFEN[23]:开启自动模式,设为1
   
·TREFMD[22]:设为Auto refresh模式,设为0
   
·Trp[21:20]:看看RAS precharge
Time,查看SDRAM手册,发现-H系列此参数至少为20ns,现在Hclk对应的时钟周期为10ns,所以至少应该为2个clock。可以设为00
    ·Tsrc:
Semi Row Cycle Time,也就是RAS Cycle
Time,至少65ms,所以至少得6.5clock,按照可选值,应该设置为11
   
·Refresh[10:0]:
   
公式refresh period = (2^11 - refresh_count
+1)/Hclk,由此推导出refresh_count=2^11+1-refresh
period*Hclk。带入数值,计算得出1268=0x04f4,这个数值要用四舍五入,减少误差。
   
·其余的保留值,均设置为0
   
由此得出该寄存器的值应该为0x008c04f4。

FCLK PCLK HCLK的更多相关文章

  1. JZ2440开发笔记(8)——FCLK、HCLK和PCLK

    S3C2440中有三种时钟,分别是FCLK,HCLK和PCLK.这三种时钟的功能各不相同,其中FCLK主要是为ARM920T的内核提供工作频率,如图: HCLK主要是为S3C2440 AHB总线(Ad ...

  2. FCLK、HCLK、PCLK

    一,PLL    S3C2440 CPU主频可达400MHz,开发板上的外接晶振为12M,通过时钟控制逻辑的PLL(phase locked loop,锁相环电路)来倍频这个系统时钟.2440有两个P ...

  3. STM32中的几个时钟SysTick、FCLK、SYSCLK、HCLK

    STM32参考手册中的时钟树: 关于时钟讲解,在时钟树中都可以看出来:下面是正点原子PPT中的插图,看起来比较清晰. 总结一下: 1. 在STM32中,有五个时钟源,为HSI.HSE.LSI.LSE. ...

  4. 讓TQ2440也用上設備樹(1)

    作者:彭東林 郵箱:pengdonglin137@163.com QQ:405728433 開發板 TQ2440 + 64MB 內存 + 256MB Nand 軟件 Linux: Linux-4.9 ...

  5. Linux学习 : 裸板调试 之 配置UART

    1.UART原理说明 发送数据时,CPU将并行数据写入UART,UART按照一定的格式在一根电线上串行发出:接收数据时,UART检测另一根电线上的信号,串行收集然后放在缓冲区中,CPU即可读取UART ...

  6. uboot(二): Uboot-arm-start.s分析

    声明:该贴是通过参考其他人的帖子整理出来,从中我加深了对uboot的理解,我知道对其他人一定也是有很大的帮助,不敢私藏,如果里面的注释有什么错误请给我回复,我再加以修改.有些部分可能还没解释清楚,如果 ...

  7. 基于mini2440的uboot移植(一)

    一.移植环境 虚拟机:ubuntu12.04 uboot源码:u-boot-2008.10.tar.bz2 交叉编译:arm-linux-gcc-4.4.3 简单的记录下编译uboot的过程,要想具体 ...

  8. S3C2440 裸机程序之音频

     mini2440之Main分析 2012-03-17 20:51:29 分类: 嵌入式 /****************************************************** ...

  9. s3c2440 mpll

    S3C2440有两个PLL(phase locked loop)一个是MPLL,一个是UPLL.MPLL用于CPU及其他外围器件,UPLL用于USB.用于产生FCLK, HCLK, PCLK三种频率, ...

随机推荐

  1. sae-xhprof调试性能

    1. 在storage中创建xhprof的domain 2.在xhprof中,给对应的版本应用开启调试 3.在版本内的代码加入 sae_xhprof_start(); // 需要调优的代码 // .. ...

  2. 51nod贪心算法入门-----活动安排问题2

    题目大意就是给几个活动,问要几个教室能够弄完. 这个题目的想法就是把活动的开始——结束的时间看做是数轴上的一段线段,教室的个数就是在某点的时间厚度,求最大的时间厚度就是所需要的教室个数. #inclu ...

  3. 工作踩坑记录:JavaScript跳转被缓存

    起因:业务想要一个固定二维码来每周扫码跳转到不同的页面上去,我用JS写了个跳转,却发现被缓存了,虽然被具体被缓存多久不清楚,但是被缓存了很不爽,不符合业务实时更改这个二维码跳转页面的需求. 经过:既然 ...

  4. Centos6.5下rsync文件同步安装配置及遇到的问题解决方法

    实验节点如下: 源节点:192.168.0.111 备份节点:192.168.0.112 ------------------------------以下部分在两个节点上执行1.防火墙开放873端口( ...

  5. Ubuntu中PyCharm中字体设置

    在Ubuntu安装的PyCharm与Windows不同,除了Editor中的字体.配色需要设置外,文件操作栏(File--Edit--View--Navigate--Code--Refactor--- ...

  6. Fiddler对安卓应用手机抓包图文教程

    http://www.cr173.com/html/37625_1.html 做开发需要抓取手机app的http/https的数据包,想看APP发出的http请求和响应是什么,这就需要抓包了,这可以得 ...

  7. 安装edX DevStack

    概述 edX Developer Stack 就是通常我们所说的Devstack,是为本地开发所设计的一个Vagrant实例. Devstack: 和产品(edx Product Stack)对系统的 ...

  8. 【Linux远程管理】RDP协议远程管理

    RDP(Remote Desk Protocol).远程桌面协议,常用的Windows操作系统的远程桌面管理就就是基于该协议. 而在Linux下,我们也是可以找到开源的rdp server的,这就是x ...

  9. linux编译安装git

    我的博客:www.while0.com 用的centos6.4中自带的git,版本为1.7.1,配置好github的sshkey后,clone下来的项目无法提交,提示: fatal: Unable t ...

  10. java web路径的问题

    对于<form action="/xx"> 和 <a href='/xx'> 其中,xx相应的为网站根目录 一般网站为虚拟目录,所以要 写成   /web应 ...