在配置时钟之前,我们首先要明确以下几点

要点

  • 1、JZ2440上电后内部时钟是怎样配置的?
  • 2、我们所使用的时钟源是来自哪里的以及它的频率是多少?
  • 3、S3C2440时钟体系结构是如何对时钟进行倍频和分频?
  • 4、S3C2440内有哪些时钟、它们各自工作在哪些地方以及他们允许的最高频率是多少?
  • 5、我们想要得到的时钟频率有哪些?
  • 6、为得到我们需要的时钟频率,我们该设置哪些寄存器以及怎么设置?
  • 7、编写时钟配置代码

1、JZ2440上电后内部时钟是怎样配置的?

:如图1所示,① 单片机上电;② 等Power输出高电平后时钟起振(时钟根据OM[3:2]的值选择,这里的FCLK=晶振频率);②-③ 为复位引脚等待电源稳定,然后才输出高电平(由复位芯片控制);④ 设置PLL,同时锁定Lock Time 时长(此段时间内CPU停止工作);⑤ PLL工作;⑥ FCLK等于PLL输出的新时钟。

图 1

2、我们所使用的时钟源是来自哪里的以及它的频率是多少?

:由图2我们知道S3C2440的时钟源是来自于晶体振荡器和外部时钟中的一个,而OM[3:2]的取值决定了S3C2440的时钟源到底是来着于哪一个;由图3和图4我们知道S3C2440的时钟源来自于晶体振荡器,又由图5知道晶体振荡器的频率为12MHz。

图 2
图 3 图 4
图 5

3、S3C2440时钟体系结构是如何对时钟进行倍频和分频?

:由图2可知确定后的时钟频率经由MPLL\UPLL锁相环进行倍频或分频。

4、S3C2440内有哪些时钟、它们各自工作在哪些地方以及他们允许的最高频率是多少?

:由图2我们可以得知S3C2440时钟体系结构中分为MPLLin CLK、FCLK、HCLK、PCLK、UCLK和RTC XTAL CLK,他们分别工作于不同的设备。
MPLLin CLK为源时钟可工作于所有设备;
FCLK为CPU时钟工作于ARM920T;
HCLK为高速时钟工作于Memory Controller、Interrupt Controller、Nand Flash Controller等高速设备;
PCLK为外设时钟工作于UART、SPI、I2C等慢速外围设备;
UCLK为USB时钟主要工作于USB设备;
RTC XTAL CLK为实时时钟。
而在这里我们主要设置的是FCLK、HCLK和PCLK,由S3C2440芯片手册得知FCLK<=400MHz,HCLK<=136MHz,PCLK<=68MHz。

5、我们想要得到的时钟频率有哪些?

:我们想要得到的是FCLK=400MHz、HCLK=100MHz、PCLK=50MHz。

6、为得到我们需要的时钟频率,我们该设置哪些寄存器以及怎么设置?

:通过查看S3C2440芯片手册得知需要设置MPLLCON寄存器以及CLKDIVN寄存器,由图6、图7和图8知若要使FCLK=400MHz、HCLK=100MHz、PCLK=50MHz,我们需要设置MPLLCON寄存器中的MDIV=92,PDIV=1,SDIV=1;CLKDIVN寄存器中的HDIVN=0b10,PDIVN=1;

图 6
图 7 图 8

【注意】

  1. 为确保锁相环能正常工作,我们应将LOCKTIME寄存器的默认值写进LOCKTIME寄存器,其默认值如图9,同时在图9中我们也得知MPLL锁相环输出时钟的计算方法。。
图 9
  1. 如图10所示,其基本意思就是当HDIVN不为0时我们必须用图10中的指令将CPU的总线模式从快速总线模式更改为异步总线模式,否则的话CPU将由HCLK操作,这将极大地降低CPU的效率。
图 10

7、编写时钟配置代码

其中主要用来配置时钟的是11~46行。


.text
.global _start_start:/* 关闭看门狗 */ldr r0 , =0x53000000ldr r1, =0str r1, [r0]/* 设置 MPLL,使 FCLK : HCLK : PCLK = 400M : 100M : 50M *//* 设置 LOCKTIME(0x4C000000) = 0xFFFFFFFF */ldr r0, =0x4C000000ldr r1, =0xFFFFFFFFstr r1, [r0]/* 设置 CLKDIVN(0x4C000014),使HDIVN = 0b10, PDIVN = 1 * CLKDIVN = 5*/ldr r0, =0x4C000014ldr r1, =5str r1, [r0]/* 因为HDIVN不为0,* 故将CPU总线模式从快速总线模式更改为异步总线模式(S3C2440不支持同步总线模式) */mrc p15,0,r0,c1,c0,0orr r0,r0,#0xc0000000        //R1_nF:OR:R1_iAmcr p15,0,r0,c1,c0,0/* 设置 MPLLCON(0x4C000004), MDIV = 92, PDIV = 1, SDIV = 1* 使 tFCLK : tHCLK : tPCLK = 1 : 2 : 8*      m = (MDIV + 8) = 92 + 8 =100*      p = (PDIV + 2) = 1 + 2 = 3*        s = SDIV = 1* FCLK = 2 * m * Fin / (p*2^s)*       = 2 * 100 * 12M / 3*2^1), *        = 400MHz*/ldr r0, =0x4C000004ldr r1, =((92<<12) | (1<<4) | (1<<0))str r1, [r0]/* 一旦设置了PLL,CPU就会锁定lock time 直到PLL输出稳定* 然后CPU工作于新的频率FCLK*//* 设置内存,SP栈 * 先判断是nor启动还是nand启动* 可以nand flash进行写,它相当于ram,但不能对nor flash进行写* 往nand flash的0地址写0,随后判断0地址是否为0* 若为0,则为nand启动* 否则则为nor启动*/mov r1, #0ldr r0, [r1]   /* 读原来的值 */str r1, [r1] /* 往0地址写0 */ldr r2, [r1]    /* 读写后的值 */cmp r1, r2;ldr sp, = 0x40000000 + 4096     /* nor启动 */ldreq sp, = 4096        /*如果相等则为 nand启动 */streq r0, [r1]bl mainhalt:    /* 死循环 */bl halt

S3C2440中时钟配置的那些事儿相关推荐

  1. Arcgis javascript那些事儿(二十)——dojo中djconfig配置、dojo与requirejs项目冲突

    一.引言 由于项目一部分使用requirejs另一部分地图是用dojo开发(因为arcgis javascript使用的dojo),两个要和到一起,所以要求研究下如何把两者和到一起,花了两天时间看了看 ...

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

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

  3. STM32的时钟配置——时钟树解析

    此文章由于讲得较详细因此篇幅较长,请带着一点耐心去读,相信会有收获! 目录 STM32为什么要有复杂的时钟系统 详解STM32时钟系统 STM32有几个时钟源 关于时钟输出 软件配置时钟 STM32为 ...

  4. NXP(I.MX6uLL)DDR3实验——DDR3重要时间参数、时钟配置与原理图简析

    目录 DDR3 内存时间参数 传输速率 tRCD 参数 CL 参数 AL 参数 tRC 参数 tRAS 参数 I.MX6U MMDC内存控制器简介 MMDC内存控制器简介 MMDC内存控制器信号引脚 ...

  5. 火牛单片机rtc时钟配置_怎么用STM32F103RTC进行时钟的配置

    #include "sys.h" #include "delay.h" #include "usart.h" #include " ...

  6. 如何修改IMX6UL开发板时钟配置?

    启扬i.MX6UL开发板时钟由24Mhz与32.768Khz晶振提供,这里不具体介绍NXP公司整体的时钟规划,只从软件API接口方面去分析如何去修改一个外设的时钟. 接下来的讲解将以CAN总线的时钟为 ...

  7. S32K144之时钟配置及时钟查看

    S32K144之时钟配置及时钟查看 以S32K144为配置测试 一.时钟树介绍 输入部分:S32K144有四个时钟源,如上图时钟树已圈出,分别是: 时钟源 允许频率 Fast IRC(内部高速时钟源) ...

  8. S32K144(2)时钟配置

    目录 1.简介 2.时钟树 2.1.时钟源 2.2.时钟模式 2.3.各模块的时钟频率 3.寄存器 3.1.SCG_VERID:Version ID Register 3.2.SCG_PARAM:Pa ...

  9. STM32开发---F103系统时钟配置

    本篇,用自问自答,记录STM32系统时钟配置一些关节点. 因为已重写了系统时钟配置的代码,不再细研配置的过程.步骤,忘了就翻代码就好,且网上不缺絮絮叨叨的各种教程. 一句话总结:  过程高深, 使用简 ...

最新文章

  1. 给Ubuntu 开启 root 帐号并可 SSH 登录
  2. 2021年春季学期-信号与系统-第七次作业参考答案-第七小题
  3. SQL Server 2008如何进行数据库同步?
  4. 实例讲解如何通过Oracle成功发送邮件-入门基础
  5. 通过修改explorer.exe内存隐藏文件及注册表项
  6. 带你自学Python系列(三):列表遍历(for循环)
  7. android h5页面跳转,android H5 应用内跳转Scheme协议
  8. Linux内核分析-week 1
  9. android 线程之AsyncTask
  10. matlab中三维非线性拟合,matlab非线性拟合与绘制三维曲面
  11. NYOJ 3(多边形重心)
  12. ArcGIS Pro创建企业级地理数据库(Postgis)
  13. 胡彦斌and音乐密码 MUSIC CODE
  14. OneStep 移植
  15. JAVA算法:解救小哈(JAVA版)
  16. vim加载systemverilog语法高亮
  17. 汉字转拼音 java_Java汉字转拼音工具类完整代码实例
  18. Qt 动画飞舞的蝴蝶源码
  19. python实现贪吃蛇小游戏
  20. 社交战争下半场:从流量战到内容战

热门文章

  1. 武汉理工转专业计算机笔试,计算机学院武汉理工大学2009年各学院转专业工作实施细则...
  2. ASP和JSP的内置对象
  3. Linux下C实现通过域名得到IP
  4. python爬取壁纸教程01 --wallheaven
  5. 16进制(00)转字符
  6. 锐能微RN8209D开发记录及资料获取
  7. 硬件学习_STM32_CubeMX_自动控制_PID闭环控制电机转速
  8. android第三方打开office文件,Android应用集成Office文件能力完全攻略
  9. volatile,wait,notify关键字
  10. 瑞芯微rockchip PX30触摸屏调试记录