S3C2440中时钟配置的那些事儿
在配置时钟之前,我们首先要明确以下几点
要点
- 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输出的新时钟。
![]() |
2、我们所使用的时钟源是来自哪里的以及它的频率是多少?
答:由图2我们知道S3C2440的时钟源是来自于晶体振荡器和外部时钟中的一个,而OM[3:2]的取值决定了S3C2440的时钟源到底是来着于哪一个;由图3和图4我们知道S3C2440的时钟源来自于晶体振荡器,又由图5知道晶体振荡器的频率为12MHz。
![]() |
![]() |
![]() |
![]() |
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;
![]() |
![]() |
![]() |
【注意】
- 为确保锁相环能正常工作,我们应将LOCKTIME寄存器的默认值写进LOCKTIME寄存器,其默认值如图9,同时在图9中我们也得知MPLL锁相环输出时钟的计算方法。。
![]() |
- 如图10所示,其基本意思就是当HDIVN不为0时我们必须用图10中的指令将CPU的总线模式从快速总线模式更改为异步总线模式,否则的话CPU将由HCLK操作,这将极大地降低CPU的效率。
![]() |
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中时钟配置的那些事儿相关推荐
- Arcgis javascript那些事儿(二十)——dojo中djconfig配置、dojo与requirejs项目冲突
一.引言 由于项目一部分使用requirejs另一部分地图是用dojo开发(因为arcgis javascript使用的dojo),两个要和到一起,所以要求研究下如何把两者和到一起,花了两天时间看了看 ...
- 修改S3C2440的时钟工作频率
文章目录 修改S3C2440的时钟工作频率 时钟概览 S3C2440A的时钟框图 时钟控制逻辑 FCLK HCLK PCLK的频率比 设置MPLL的输出频率 写代码 修改S3C2440的时钟工作频率 ...
- STM32的时钟配置——时钟树解析
此文章由于讲得较详细因此篇幅较长,请带着一点耐心去读,相信会有收获! 目录 STM32为什么要有复杂的时钟系统 详解STM32时钟系统 STM32有几个时钟源 关于时钟输出 软件配置时钟 STM32为 ...
- NXP(I.MX6uLL)DDR3实验——DDR3重要时间参数、时钟配置与原理图简析
目录 DDR3 内存时间参数 传输速率 tRCD 参数 CL 参数 AL 参数 tRC 参数 tRAS 参数 I.MX6U MMDC内存控制器简介 MMDC内存控制器简介 MMDC内存控制器信号引脚 ...
- 火牛单片机rtc时钟配置_怎么用STM32F103RTC进行时钟的配置
#include "sys.h" #include "delay.h" #include "usart.h" #include " ...
- 如何修改IMX6UL开发板时钟配置?
启扬i.MX6UL开发板时钟由24Mhz与32.768Khz晶振提供,这里不具体介绍NXP公司整体的时钟规划,只从软件API接口方面去分析如何去修改一个外设的时钟. 接下来的讲解将以CAN总线的时钟为 ...
- S32K144之时钟配置及时钟查看
S32K144之时钟配置及时钟查看 以S32K144为配置测试 一.时钟树介绍 输入部分:S32K144有四个时钟源,如上图时钟树已圈出,分别是: 时钟源 允许频率 Fast IRC(内部高速时钟源) ...
- S32K144(2)时钟配置
目录 1.简介 2.时钟树 2.1.时钟源 2.2.时钟模式 2.3.各模块的时钟频率 3.寄存器 3.1.SCG_VERID:Version ID Register 3.2.SCG_PARAM:Pa ...
- STM32开发---F103系统时钟配置
本篇,用自问自答,记录STM32系统时钟配置一些关节点. 因为已重写了系统时钟配置的代码,不再细研配置的过程.步骤,忘了就翻代码就好,且网上不缺絮絮叨叨的各种教程. 一句话总结: 过程高深, 使用简 ...
最新文章
- 给Ubuntu 开启 root 帐号并可 SSH 登录
- 2021年春季学期-信号与系统-第七次作业参考答案-第七小题
- SQL Server 2008如何进行数据库同步?
- 实例讲解如何通过Oracle成功发送邮件-入门基础
- 通过修改explorer.exe内存隐藏文件及注册表项
- 带你自学Python系列(三):列表遍历(for循环)
- android h5页面跳转,android H5 应用内跳转Scheme协议
- Linux内核分析-week 1
- android 线程之AsyncTask
- matlab中三维非线性拟合,matlab非线性拟合与绘制三维曲面
- NYOJ 3(多边形重心)
- ArcGIS Pro创建企业级地理数据库(Postgis)
- 胡彦斌and音乐密码 MUSIC CODE
- OneStep 移植
- JAVA算法:解救小哈(JAVA版)
- vim加载systemverilog语法高亮
- 汉字转拼音 java_Java汉字转拼音工具类完整代码实例
- Qt 动画飞舞的蝴蝶源码
- python实现贪吃蛇小游戏
- 社交战争下半场:从流量战到内容战
热门文章
- 武汉理工转专业计算机笔试,计算机学院武汉理工大学2009年各学院转专业工作实施细则...
- ASP和JSP的内置对象
- Linux下C实现通过域名得到IP
- python爬取壁纸教程01 --wallheaven
- 16进制(00)转字符
- 锐能微RN8209D开发记录及资料获取
- 硬件学习_STM32_CubeMX_自动控制_PID闭环控制电机转速
- android第三方打开office文件,Android应用集成Office文件能力完全攻略
- volatile,wait,notify关键字
- 瑞芯微rockchip PX30触摸屏调试记录