s3c2440系统时钟详解
一、S3C2440系统时钟体系
S3C2440的时钟控制逻辑可以外接晶振,然后通过内部电路产生时钟源;也可以直接使用内部提供的时钟源,他们通过引脚的设置来选择。时钟逻辑给整个芯片提供了3中时钟:FCLK用于CPU核、HCLK用于AHB总线上设备,比如CPU核、存储器控制器、中断控制器、LCD控制器、DMA控制器和USB主机模块等;PCLK用于用于APB总线上的设备,比如看门狗、IIS、I2C、PWM定时器、MMC接口、ADC、UART、GPIO、RTC和SPI等。
AHB(Advanced High performance Bus)系统总线总线主要用于高性能模块(如CPU、DMA和DSP等);APB(Advanced Peripheral Bus)外围总线主要用于低宽带的周边外设之间的连接(UART、I2C等)。
S3C2440CPU核的工作电压为1.8V时,主频可以达到200MHZ;工作电压为2V时,主频可以达到266MHZ;工作电压为1.2V时,主频可以达到300MHZ;工作电压为1.3V时,主频可以达到400MHZ。通常外接的晶振频率很低,需要通过时钟控制逻辑的PLL提高系统时钟。
S3C2440有两个PLL:MPLL、UPLL。UPLL专用于USB设备,MPLL用于设置FCLK、HCLK、PCLK。他们的设置方法相似,本文以MPLL为例。
上电时,PLL没被启动,FCLK就等于外部的时钟,称为Fin,若要提高系统时钟,需要软件来启动PLL。j结合图来具体介绍
(1)、上电几毫秒后,晶振(图中的OSC)输出稳定,FCLK等于Fin(晶振频率),nRESET信号恢复高电平后,CPU开始执行指令。
(2)、可以在程序开头启动MPLL,设置MPLL的几个寄存器后,需要等待一段时间(Lock Time),MPLL的输出才稳定。在这段时间内,FCLK停震,CPU停止工作。Lock Time时间的长短由LOCKTIME寄存器设定。
(3)、Lock Time之后,MPLL输出正常,CPU工作在新的FCLK下。
FCLK、HCLK、PCLK的比例是可以改变的,设置他们三个的比例,启动MPLL只需要设置3个寄存器,对于S3C2440来说,他们之间的比例还需要额外设置一个寄存器。
二、系统时钟寄存器设置
1、LOCKTIME寄存器
用于设置Lock Time的长度,前面说过,MPLL启动之后需要等待一段时间,使得其输出稳定。S3C2440中,位[31:16]用于UPLL,位[15:0]用于MPLL。一般而言,使用它的默认值即可,S3C2440中默认值是0xFFFFFFFF。
(2)、MPLLCON寄存器:用于设置FCLK与Fin的倍数
位[19:12]的值称为MDIV,位[9:4]的值称为PDIV,位[1:0]的值称为SDIV。FCLK与Fin的关系有如下的计算公式
当设置MPLLCON后,相当于上图中的“首先使用软件设置PLL”,Lock Time 就被自动的插入。Lock Time之后,MPLL输出稳定,CPU工作新的FCLK下。
(3)、CLKDIVN寄存器:用于设置FCLK、HCLK、PCLK三者的比例
对于S3C2440,这个寄存器格式如下图:
对于S3C2440的一些时钟比例,还需要额外设置一个寄存器CAMDIVN寄存器:
HDIVN为CLKDIVN寄存器的位[2:1],PDIVN为位[0]。
三、时钟设置程序
clock_init.c
#define S3C2440_MPLL_200MHZ ((0x5c<<12)|(0x01<<4)|(0x02))
/*
* 对于MPLLCON寄存器,[19:12]为MDIV,[9:4]为PDIV,[1:0]为SDIV
* 有如下计算公式:
* S3C2410: MPLL(FCLK) = (m * Fin)/(p * 2^s)
* 对于本开发板,Fin = 12MHz
* 设置CLKDIVN,令分频比为:FCLK:HCLK:PCLK=1:2:4,
* FCLK=200MHz,HCLK=100MHz,PCLK=50MHz
*/
void clock_init(void)
{
// LOCKTIME = 0x00ffffff; // 使用默认值即可
CLKDIVN = 0x03; // FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1 /* 如果HDIVN非0,CPU的总线模式应该从“fast bus mode”变为“asynchronous bus mode” */
__asm__(
"mrc p15, 0, r1, c1, c0, 0\n" /* 读出控制寄存器 */
"orr r1, r1, #0xc0000000\n" /* 设置为“asynchronous bus mode” */
"mcr p15, 0, r1, c1, c0, 0\n" /* 写入控制寄存器 */
); MPLLCON = S3C2440_MPLL_200MHZ; /* 现在,FCLK=200MHz,HCLK=100MHz,PCLK=50MHz */
s3c2440系统时钟详解的更多相关文章
- mysql show variables系统变量详解
mysql系统变量详解 mysqld服务器维护两种变量.全局变量影响服务器的全局操作.会话变量影响具体客户端连接相关操作. 服务器启动时,将所有全局变量初始化为默认值.可以在选项文件或命令行中指定的选 ...
- 重置出错?微软Win10平板Surface Pro 4重装系统教程详解
重置出错?微软Win10平板Surface Pro 4重装系统教程详解 2015-12-11 15:27:30来源:IT之家作者:凌空责编:凌空 评论:65 Surface Pro 4系统重置出错该怎 ...
- Windows XP硬盘安装Ubuntu 12.04双系统图文详解
Windows XP硬盘安装Ubuntu 12.04双系统图文详解 Ubuntu 12.04 LTS版本于2012年4月26日发布,趁着五一放假,赶紧在自己的Windows XP的电脑上安装下Ubun ...
- WeChatAPI 开源系统架构详解
WeChatAPI 开源系统架构详解 如果使用WeChatAPI,它扮演着什么样的角色? 从图中我们可以看到主要分为3个部分: 1.业务系统 2.WeChatAPI: WeChatWebAPI,主要是 ...
- C++框架_之Qt的窗口部件系统的详解-上
C++框架_之Qt的窗口部件系统的详解-上 第一部分概述 第一次建立helloworld程序时,曾看到Qt Creator提供的默认基类只有QMainWindow.QWidget和QDialog三种. ...
- [转]PostgreSQL教程:系统表详解
这篇文章主要介绍了PostgreSQL教程(十五):系统表详解,本文讲解了pg_class.pg_attribute.pg_attrdef.pg_authid.pg_auth_members.pg_c ...
- [转]PostgreSQL教程(十六):系统视图详解
这篇文章主要介绍了PostgreSQL教程(十六):系统视图详解,本文讲解了pg_tables.pg_indexes.pg_views.pg_user.pg_roles.pg_rules.pg_set ...
- 《TensorFlow学习指南深度学习系统构建详解》英文PDF+源代码+部分中文PDF
主要介绍如何使用 TensorFlow 框架进行深度学习系统的构建.涉及卷积神经网络.循环神经网络等核心的技术,并介绍了用于图像数据和文本序列数据的模型.给出了分布式深度学习系统在TensorFlow ...
- Mercury:唯品会全链路应用监控系统解决方案详解(含PPT)
Mercury:唯品会全链路应用监控系统解决方案详解(含PPT) 原创: 姚捷 高可用架构 2016-08-08
随机推荐
- vscode环境配置
"go.goroot": "/home/ken/go", "go.gopath": "/home/ken/gopath" ...
- SVNKit学习——wiki+简介(二)
这篇文章是参考SVNKit官网在wiki的文档,做了个人的理解~ 首先抛出一个疑问,Subversion是做什么的,SVNKit又是用来干什么的? 相信一般工作过的同学都用过或了解过svn,不了解的同 ...
- Linux->Jdk1.8安装
一.下载jdk 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 二.解 ...
- 【转】修复关于apache-xampp的问题:Port 443 in use by “vmware-hostd.exe”!
在电脑里装了VMware后,再要装xampp,十有八九就会出现这个问题: 11:23:37 [Apache] Problem detected! 11:23:37 [Apache] ...
- DevExpress之ChartControl用法
DevExpress中的ChartControl顾名思义就是数据基于图表展示,其关键在于Series上的处理. using System; using System.Drawing; using De ...
- kivy.org - Open source Python library for rapid development of applications
kivy.org - Open source Python library for rapid development of applicationsthat make use of innovati ...
- 你不能不知道到的Hook!
Hook是什么? hook翻译之后是钩子的意思,hook的用途主要是用来拦截消息的,看到这里大家可能会迷茫,What is a hook?所以这时就不得不普及一下操作系统的原理. 举个例子:假 ...
- tq2440 jlink连接问题
由于工作转向做嵌入式linux平台上的手台通信协议开发,所以想系统的学习一下嵌入式linux的开发流程. 向同事借了tq2440的板子来玩,一边看书,一边做实验,看的书是<嵌入式linux基础教 ...
- MySQL错误问题
启动Tomcat的时候报错:no suitable driver,MySql更新使用com.mysql.cj.jdbc.Driver,废弃老的com.mysql.jdbc.Driver驱动,需要将D: ...
- __call、__set 和 __get的用法
1. __call的用法 PHP5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它方法.如果你试着调用一个对象中不存在的方法,__call 方法将会被自动调用. 例:__ ...