学习:韦东山ARM裸机开发实战(第一期加强版)时钟部分

S3C2440的时钟&电源管理模块(Clock & Power management block)由三部分组成:时钟控制器(Clock control )、USB控制器(USB control)和电源控制器(Power control)。S3C2440的时钟控制逻辑能够生产系统必需的时钟信号,包括CPU所需的FCLK时钟、AHB总线外设所需的HCLK时钟、APB总线外设所需的PCLK时钟。S3C2440的时钟系统中有两个锁相环(PLLS),分别为MPLL和UPLL,MPLL用于FCLK、HCLK、PCLK,UMLL专门用于USB(48MHz)。S3C2440的时钟控制逻辑可以不使用PLL下降低时钟,通过软件来连接/断开到每个外设的时钟,这能够降低功耗。

通过电源控制逻辑(power control logic ),S3C2440有多方面的电源管理方案去优化功耗(power consumption),四种模式:正常模式(NORMAL mode)、低速模式(SLOW mode),空闲模式(IDLE mode),睡眠模式(SLEEP mode)。

FCLK最高可达400Mhz,因此s3c2440的CPU最高可以运行400MHz下工作。

引脚OM[3:2] 控制主时钟和USB时钟的来源。JZ2440的OM[3:2]两个引脚接地。

OSC接外部晶振(12M),经过OM[3:2]选择器,OM[3:2]=00(OM[3:2]两个引脚接地),进入MPLL锁相环,在MPLL中通过三个计算因子(P、M、S)按照一定公式输出MPLL时钟,MPLL时钟经过 CLKCNTL 模块输出系统所需的FCLK、HCLK、PCLK,FLCK直接等于MPLL时钟,HCLK通过MPLL时钟的HDIVN分频得到,PCLK通过MPLL时钟的PDIVN分频得到。FCLK、HCLK、PCLK通过POWCNTL模块送往系统的各个外设。

先看看这张图,系统上电时,复位引脚没有马上拉高,等到上电电压稳定后复位引脚拉高。这个过程由硬件来完成,JZ2440的硬件设计中复位引脚连接复位芯片来完成这个过程。晶振(12M)起振,这个时候FCLK等于晶振频率12Mhz,如果设置PLL,会有一个”Lock Time”,这时系统时钟停止,就会锁定lock time直到PLL输出稳定,然后CPU工作于新的频率FCLK(FCLK is new frequency)。

接下来来设置FCLK :HCLK : PCLK的时钟大小为400MHz : 100MHz : 50MHz。

一、设置lock time

设置LOCKTIME寄存器,直接设置默认值0xFFFFFFFF就好了。

二、设置HDIVN和PDIVN的分频大小

设置CLKDIVN寄存器,HCLK=FCLK/4,PLCK=HCLK/2,因此寄存器的第三位为101。这时FCLK :HCLK : PCLK的始终比例就为1:4:8。

三、设置MPLL

设置MPLLCON寄存器,那么其中MDIV、PDIV、SDIV设置为多少才能使MPLL输出400MHz时钟呢,参考手册,如上图的表中,设置MDIV为92,PDIV和SDIV为1,既可以使MPLL输出400Mhz。用手册提供的公式验证一下:

m = MDIV+8 = 92+8=100

p = PDIV+2 = 1+2 = 3

s = SDIV = 1

Mpll= 2*m*Fin/(p*2^s) = 2*100*12/(3*2^1)=400M

即输出400Mhz。

四、设置CPU工作于异步模式

手册的注意事项中说明,若CPU在没有处于异步模式时,如果HDIVN非零,则CPU的工作频率最终变为HCLK提供。这样就不达不到CPU工作在400Mhz频率下的目的了,因此需将CPU设置在异步模式下,用上面提供的汇编代码即可。所以整个时钟的代码编写需汇编来完成。

汇编代码:

.text
.global _start

_start:

/* 关闭看门狗 */
ldr r0, =0x53000000
ldr r1, =0
str r1, [r0]

/* 设置MPLL, FCLK : HCLK : PCLK = 400m : 100m : 50m */
/* LOCKTIME(0x4C000000) = 0xFFFFFFFF */
ldr r0, =0x4C000000
ldr r1, =0xFFFFFFFF
str r1, [r0]

/* CLKDIVN(0x4C000014) = 0X5, tFCLK:tHCLK:tPCLK = 1:4:8  */
ldr r0, =0x4C000014
ldr r1, =0x5
str r1, [r0]

/* 设置CPU工作于异步模式 */
mrc p15,0,r0,c1,c0,0
orr r0,r0,#0xc0000000   //R1_nF:OR:R1_iA
mcr p15,0,r0,c1,c0,0

/* 设置MPLLCON(0x4C000004) = (92<<12)|(1<<4)|(1<<0) 
*  m = MDIV+8 = 92+8=100
*  p = PDIV+2 = 1+2 = 3
*  s = SDIV = 1
*  FCLK = 2*m*Fin/(p*2^s) = 2*100*12/(3*2^1)=400M
*/
ldr r0, =0x4C000004
ldr r1, =(92<<12)|(1<<4)|(1<<0)
str r1, [r0]

/* 一旦设置PLL, 就会锁定lock time直到PLL输出稳定
* 然后CPU工作于新的频率FCLK
*/

/* 设置内存: sp 栈 */
/* 分辨是nor/nand启动
* 写0到0地址, 再读出来
* 如果得到0, 表示0地址上的内容被修改了, 它对应ram, 这就是nand启动
* 否则就是nor启动
* (向Norflash中写数据需要特定的命令时序,而向内存中写数据可以直接向内存地址赋值)
*/
mov r1, #0
ldr r0, [r1] /* 读出原来的值备份 */
str r1, [r1] /* 0->[0] */ 
ldr r2, [r1] /* r2=[0] */
cmp r1, r2   /* r1==r2? 如果相等表示是NAND启动 */
ldr sp, =0x40000000+4096 /* 先假设是nor启动 */
moveq sp, #4096  /* nand启动 */
streq r0, [r1]   /* 恢复原来的值 */

bl main

halt:
b halt

s3c2440的时钟体系相关推荐

  1. S3C2440时钟体系

    S3C2440在默认情况下,整个系统全靠一个12MHz的外部晶振提供频率来工作运行的,也就是说CPU.内存.UART.ADC等所有需要用到时钟频率的硬件都工作在12MHz下,但是通过查阅芯片手册我们知 ...

  2. S3C2440时钟体系 - SOC裸机

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

  3. 【嵌入式开发】时钟初始化 ( 时钟相关概念 | 嵌入式时钟体系 | Lock Time | 分频参数设置 | CPU 异步模式设置 | APLL MPLL 时钟频率设置 )

    文章目录 一. 时钟相关概念解析 1. 相关概念术语 ( 1 ) 时钟脉冲信号 ( 概念 : 电压幅度 时间间隔 形成脉冲 | 作用 : 时序逻辑基础 间隔固定 根据脉冲数量可计算出时间 ) ( 2 ...

  4. arm linux 时钟源 信息,Linux学习——ARM芯片时钟体系

    跟着视频学习了ARM芯片时钟体系,信息量有点大,做个笔记梳理梳理. 1.时钟体系的结构图 有很多外设,一些工作在AHB总线,一些工作在APB总线 CPU工作在FCLK,AHB总线工作在HCLK,APB ...

  5. S3C2440中时钟配置的那些事儿

    在配置时钟之前,我们首先要明确以下几点 要点 1.JZ2440上电后内部时钟是怎样配置的? 2.我们所使用的时钟源是来自哪里的以及它的频率是多少? 3.S3C2440时钟体系结构是如何对时钟进行倍频和 ...

  6. 韦东山ARM第一期作业(一)ARM时钟体系

    文章目录 01 - 作业所在路径 02 - 作业描述 03 - 作业解答 01 - 作业所在路径   ARM裸机1期加强版\源码文档图片\文档图片\第010课_掌握ARM芯片时钟体系 02 - 作业描 ...

  7. s3c6410时钟体系

    S3C6410时钟体系 S3C6410可以使用外部晶振( XXTIpll )(默认为12MHZ)和外部时钟( XEXTCLK )两种方式输入时钟信号.它由跳线OM[0]决定.S3C6410 默认的工作 ...

  8. 修改S3C2440的时钟工作频率

    文章目录 修改S3C2440的时钟工作频率 时钟概览 S3C2440A的时钟框图 时钟控制逻辑 FCLK HCLK PCLK的频率比 设置MPLL的输出频率 写代码 修改S3C2440的时钟工作频率 ...

  9. Exynos4412时钟体系分析

    本文转载自:http://www.techbulo.com/1365.html 在芯片手册里,"时钟管理单元 (Clock Management Unit)"的简称为 CMU .C ...

  10. 掌握ARM芯片时钟体系

    1.s3c2440时钟体系结构 Fclk.Hclk.Pclk如何得到?时钟源 12M晶振----PLL锁相环---->400M\136M\68M 晶振---------|--->MPLL- ...

最新文章

  1. VIM入门必读(转)
  2. 【论文解读】ICLR 2021丨当梯度提升遇到图神经网络,“鱼和熊掌”皆可兼得
  3. 软件与软件工程的概念
  4. ScrollView嵌套EditText联带滑动的解决办法
  5. 贪心算法,递归算法,动态规划算法比较与总结
  6. 如何远程断点调试本地localhost项目
  7. 三星想抢苹果芯片订单?台积电表示想多了
  8. Lua概念定义及相关资料
  9. mysql中timestamp字段
  10. 给C#学习者的建议 - CLR Via C# 读后感
  11. 剑指Offer_编程题(用两个栈实现队列/旋转数组的最小数字(O(n) + 二分O(lgn))/斐波那契数列/跳台阶)
  12. 详解win7升级win10原来的软件还能用吗
  13. 一道ACM剑气算法的编程题
  14. GPT-3的50种玩法告诉你,它很酷,但是没有通过图灵测试
  15. 2017年中国大数据发展趋势和展望解读(下)
  16. ps切图--图层切图
  17. 研发人员在公司内部调岗会发生哪些事情?
  18. 混杂模式就安全了?--只谈配置混杂模式
  19. JVM面试八股文第一弹
  20. 【小程序云开发】通过时间戳差判断今天,昨天,前天并渲染到页面上

热门文章

  1. 【RocketMQ】Send [1] times, still failed以及No route info of this topic问题排查思路总结
  2. C语言100题练习计划 47——查询水果价格
  3. gmail上不去的解决方法(原)
  4. 电力监控服务器维修,地铁电力监控系统(PSCADA)发生故障应该如何处理
  5. 基于IS-LM模型的宏观经济政策成效分析:弹性视角
  6. asp.net开发wap程序必备:识别来访手机品牌型号(转)
  7. 信号的频谱分析实验matlab,实验三 用FFT对信号进行频谱分析及MATLAB程序
  8. 北京地铁计价模型分析及计价系统设计
  9. 魔兽各服务器位置,魔兽世界怀旧服矿点分布位置介绍 全地图采矿位置一览
  10. 触摸屏在环卫车辆上装控制系统的应用