S3C2440时钟设置

#define MDIV_405        0x7f << 12

#define PSDIV_405      0x21

#define LOCKTIME_OFFSET    0x00

#define MPLLCON_OFFSET      0x04

#define CLKCON_OFFSET      0x0c

#define CLKDIVN_OFFSET      0x14

#define CAMDIVN_OFFSET      0x18

/*******************************************************************************************

* Reference to S3C2440 datasheet: Chap 7 Clock&Power Management

*

* Initialize System Clock FCLK=400MHz HCLK=100MHz PCLK=50MHz

* 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 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.

******************************************************************************************/

/*Set LOCKTIME as default value 0x00ffffff*/

ldr r0, =ELFIN_CLOCK_POWER_BASE

ldr r1, =0x00ffffff

str r1, [r0, #LOCKTIME_OFFSET]  /*Set Clock Divider*/

/*******************************************************************************************

* Reference to S3C2440 datasheet: Chap 7-8 ~ Page 242

*

* Set the selection of Dividing Ratio between FCLK,HCLK and PCLK as FCLK:HCLK:PCLK = 1:4:8.

* This ratio is determined by HDIVN(here is 2) and PDIVN(here is 1) control register.

* Refer to the s3c2440 datasheet

*******************************************************************************************/

ldr r0, =ELFIN_CLOCK_POWER_BASE

mov r1, #5

str r1, [r0, #CLKDIVN_OFFSET]  /*Set Clock Divider*/

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

orr r1, r1, #0xc0000000

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

/***************************************************************************************

*  Reference to S3C2440 datasheet: Chap 7-20 ~ Page 254

*

*  Set MPLLCON(0x4C000004) register as:

*    [19:12]:  MDIV(Main Divider control)=0x7F

*      [9:4]:  PDIV(Pre-devider control)=0x02

*      [1:0]:  SDIV(Post divider control)=0x01

*

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

*  m=(MDIV+8), p=(PDIV+2), s=SDIV

*

*  So FCLK=((2*(127+8)*Fin)) / ((2+2)*2^1)

*        = (2*135*12MHz)/8

*        = 405MHz

*  For FCLK:HCLK:PCLK=1:4:8, so HCLK=100MHz, PCLK=50MHz

***************************************************************************************/

mov r1, #ELFIN_CLOCK_POWER_BASE

mov r2, #MDIV_405

add r2, r2, #PSDIV_405

str r2, [r1, #MPLLCON_OFFSET]

/* wait at least 200us to stablize all clock */

mov r2, #0x10000

1:  subs    r1, r1, #1

bne 1b

mov pc, lr

S3C2440 CPU默认的工作主频为12MHz或16.9344MHz,在我的2440的开发板上上使用的是12MHZ,这里使用最多的也是12M。使用PLL电路可以产生更高的主频供CPU及外围器件使用。

S3C2440有两个PLL:MPLL和UPLL,UPLL专用与USB设备。MPLL用于CPU及其他外围器件。

通过MPLL会产生三个部分的时钟频率:FCLK、HCLK、PLCK。FCLK用于CPU核,HCLK用于AHB总线的设备(比如SDRAM),PCLK用于APB总线的设备(比如UART)。

设置S3c2440的时钟频率就是设置MPLL的几个寄存器:

1、LOCKTIME:设为0x00ffffff

MPLL启动后需要等待一段时间(Lock Time),使得其输出稳定。位[23:12]用于UPLL,位[11:0]用于MPLL。使用确省值0x00ffffff即可。

2、CLKDIVN:用来设置FCLK:HCLK:PCLK的比例关系,默认为1:1:1

这里值设为0x05(HDIVN=2, PDIVN=1),即FCLK:HCLK:PCLK=1:4:8

3、MPLLCON:设为(0x7f << 12)|(0x02 << 4)|(0x01),即0x7f0021

对于MPLLCON寄存器,[19:12]为MDIV,[9:4]为PDIV,[1:0]为SDIV。有如下计算公式:

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

m=(MDIV+8), p=(PDIV+2), s=SDIV Fin 即默认输入的时钟频率12MHz。MPLLCON设为0x7f0021,可以计算出FCLK=400MHz,再由CLKDIVN的设置可知:HCLK=100MHz,PCLK=50MHz。

到这里我们应该彻底弄清楚了程序中经常出现的几个CLK:

Fin,MPLL,UPLL,FCLK,HCLK,PCLK.

Fin指CPU外围接的晶振本身的频率,通常为12MHz。

MPLL和UPLL分别指的是用于供整机系统的PLL和专用于USB的UPLL。

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

HCLK,PCLK受CLKDIVN寄存器的影响,即当FCLK确定后,CLKDIVN决定了HCLK和PCLK

linux 调整时钟的频率,S3C2440时钟设置相关推荐

  1. S3C2440时钟体系结构与编程

    如果cpu是计算机的大脑,电流是计算机的血液,那么时钟则是计算机的心脏,时钟频率决定了处理器运算的快慢,它的每一次"跳动"都驱动着处理器不停的执行命令.不同的是,人的各个部位心率是 ...

  2. S3C2440时钟系统详解

    在讲述系统时钟之前,因为这些设备都是挂靠在系统时钟上的,所以必须先说系统时钟,S3C2440的时钟系统如下 外部时钟源分两种,晶振或者外部频率,由om3-2选择,时钟电路根据两种选择也有两种 我们来分 ...

  3. linux 内核中断与时钟的冲突 问题 del_timer,Linux内核开发之中断与时钟(三)

    晚上7点10分.. "小涛哥,这章不是叫Linux设备驱动程序之中断与时钟,前边你讲了中断,还给了我很多模版,我都看懂了,这次是不是要开始讲时钟了.." "真聪明,越来越 ...

  4. linux同步硬件和系统时钟,liunx系统下时钟不同步会出现问题 怎么同步Linux 的系统时钟和硬件时钟?...

    linux的系统时钟在很多地方都要用到,要是不准,就会出现一些奇怪的问题: 在linux中,用于时钟查看和设置的命令主要有date.hwclock和clock.linux时钟分为系统时钟(system ...

  5. Linux时间子系统之八:动态时钟框架(CONFIG_NO_HZ、tickless)【转】

    转自:http://blog.csdn.net/droidphone/article/details/8112948 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 数据结构 ...

  6. S3C2440时钟体系 - SOC裸机

    前面章节内容针对ARM内核和ARM内核汇编完成了ARM处理器最基础内容的学习,从本章开始我们针对集合ARM内核的SOC片上系统展开学习.片上系统设计的主要是针对各种外界硬件设备的驱动开发工作,关于这部 ...

  7. S3C2440时钟和电源管理:空闲模式:电源管理模块断开CPU时钟FCLK,而只给外设提供时钟,CPU不耗时钟,故而减少功耗,任何中断请求都可将CPU从空闲模式唤醒。

    七.时钟&电源管理 概述 时钟&电源管理模块包含三部分:时钟控制,USB控制,电源控制. 时钟控制逻辑可以生成三种时钟信号,CPU使用的FCLK,AHB总线外设使用的HCLK,APB总 ...

  8. [原创]RX801SJ 实时时钟RTC调试纪要 : 时钟输出设置

    利用USB转I2C/SPI/UART板进行通信测试 1.RX8010SJ的I2C通信地址定义如下: 设备读取地址:0X65 设备写入地址:0X64 2.USB2ish0转接板操作界面如下: 3.参照手 ...

  9. cmd 顺序启动服务_NTP时钟服务器部署以及时钟同步设置

    NTP时钟服务器部署以及时钟同步设置 NTP时钟服务器部署以及时钟同步设置 一.前言 1.NTP简介 NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的 ...

最新文章

  1. Git log高级用法
  2. MyBatis-学习笔记08【08.动态SQL】
  3. 同步屏障CyclicBarrier
  4. HTML+CSS+JS实现 ❤️发光糖果泡泡动画特效❤️
  5. java 面向对象多态_乐字节Java面向对象三大特性以及Java多态
  6. 专访 | 阿里前辈李智慧:如何培养架构思维,我把20年的架构经讲给你听
  7. 三款免费好用的Gif制作神器
  8. matlab 矩阵 对称,如何使用Matlab产生对称矩阵 | 学步园
  9. liunx破解root密码精简版
  10. Tip__Unity 3D模型上的材质球为灰色 改不动的问题
  11. Typo Forum
  12. VScode的源代码管理简易使用
  13. 写在2015的尾巴上
  14. 设置杀怪KillMonBurstRate爆率、KillMonExpRate经验倍数
  15. 百度自动驾驶巴士开启收费运营
  16. oracle上亿数据的删除
  17. 《学Python,不废话》
  18. 腾讯企业邮箱登录、网易企业邮箱、TOM企业邮箱,各大企业邮箱如何申请登录?
  19. Java-方法的详解( 看完之后,我不允许还有人不懂!)
  20. 一篇文章理解JS中同步任务和异步任务以及宏任务与微任务的原理和执行机制

热门文章

  1. 阿里云短信接入及注意事项
  2. 用matlab绘制惠特尼伞形曲面,伞形曲面结构织物的设计与织造
  3. 一个小白安装Win10、CentOS 7双系统的经历
  4. Java 动态代理原理图解 (附:2种实现方式详细对比)
  5. 计算机证书的种类、用处及其含金量介绍
  6. 【原创.联盟事务】公布gooogleman嵌入式联盟销售培训绝密文档
  7. Softmax 回归(PyTorch)
  8. java中的this.getclass和super.getClass(),以及继承的深入探究
  9. 屏幕小于6英寸的手机_6英寸屏幕真的大么?你可能对“全面屏”有什么误解!详解全面屏手机那些事...
  10. 基于vue2+element+springboot+mybatis+jpa+mysql的小区物业管理系统