一、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系统时钟详解的更多相关文章

  1. mysql show variables系统变量详解

    mysql系统变量详解 mysqld服务器维护两种变量.全局变量影响服务器的全局操作.会话变量影响具体客户端连接相关操作. 服务器启动时,将所有全局变量初始化为默认值.可以在选项文件或命令行中指定的选 ...

  2. 重置出错?微软Win10平板Surface Pro 4重装系统教程详解

    重置出错?微软Win10平板Surface Pro 4重装系统教程详解 2015-12-11 15:27:30来源:IT之家作者:凌空责编:凌空 评论:65 Surface Pro 4系统重置出错该怎 ...

  3. Windows XP硬盘安装Ubuntu 12.04双系统图文详解

    Windows XP硬盘安装Ubuntu 12.04双系统图文详解 Ubuntu 12.04 LTS版本于2012年4月26日发布,趁着五一放假,赶紧在自己的Windows XP的电脑上安装下Ubun ...

  4. WeChatAPI 开源系统架构详解

    WeChatAPI 开源系统架构详解 如果使用WeChatAPI,它扮演着什么样的角色? 从图中我们可以看到主要分为3个部分: 1.业务系统 2.WeChatAPI: WeChatWebAPI,主要是 ...

  5. C++框架_之Qt的窗口部件系统的详解-上

    C++框架_之Qt的窗口部件系统的详解-上 第一部分概述 第一次建立helloworld程序时,曾看到Qt Creator提供的默认基类只有QMainWindow.QWidget和QDialog三种. ...

  6. [转]PostgreSQL教程:系统表详解

    这篇文章主要介绍了PostgreSQL教程(十五):系统表详解,本文讲解了pg_class.pg_attribute.pg_attrdef.pg_authid.pg_auth_members.pg_c ...

  7. [转]PostgreSQL教程(十六):系统视图详解

    这篇文章主要介绍了PostgreSQL教程(十六):系统视图详解,本文讲解了pg_tables.pg_indexes.pg_views.pg_user.pg_roles.pg_rules.pg_set ...

  8. 《TensorFlow学习指南深度学习系统构建详解》英文PDF+源代码+部分中文PDF

    主要介绍如何使用 TensorFlow 框架进行深度学习系统的构建.涉及卷积神经网络.循环神经网络等核心的技术,并介绍了用于图像数据和文本序列数据的模型.给出了分布式深度学习系统在TensorFlow ...

  9. Mercury:唯品会全链路应用监控系统解决方案详解(含PPT)

    Mercury:唯品会全链路应用监控系统解决方案详解(含PPT) 原创: 姚捷 高可用架构 2016-08-08    

随机推荐

  1. Threading in C# 5

    Part 5: Parallel Programming In this section, we cover the multithreading APIs new to Framework 4.0 ...

  2. using log4net on my project within a self-hosted WCF application z

    Add reference to log4net.dll to our console service host project (our application entry point) Add t ...

  3. sql 嵌套查询

    sql 某一字段 数量大于1 SELECT * FROM ecm_goods_spec AWHERE ( SELECT count( * ) FROM ecm_goods_spec BWHERE A. ...

  4. 如果使用没有提供选项值的 SqlDependency,必须先调用 SqlDependency.Start(),然后才能执行添加到 SqlDependency 实例中的命令

    如标题错误,解决办法及出现错误情况,见图片 出现如图错误

  5. [EffectiveC++]item38:通过复合塑膜出has -a 或“根据某物实现出”

    Model "has-a"or “is-implemented-in-terms-of” through composition

  6. 自动生成气泡对话框的jQuery插件CreateBubble.js

    之前在写一个界面,想要用到气泡,然而一直找不到现成的有效地办法,是在没有办法了我只好自己写一个,于是就有了现在的CreateBubble.js.很简单的一个函数,但是非常实用. 使用方法: 1.HTM ...

  7. 折腾apt源的时候发生的错误

    在折腾Ubuntu源的时候,把新的源替换进去,然后 sudo apt-get update 之后报错: W: Unknown Multi-Arch type 'no' for package 'com ...

  8. 在编译器中调试spark程序处理

    在IDEA中调试spark程序会报错 18/05/16 07:33:51 WARN NativeCodeLoader: Unable to load native-hadoop library for ...

  9. Centos6 Ngnix和fastcgi搭建

    一.下载Nginx 依赖pcre,zlib,openssl 下载解压包,解压后进入 ./configue make make install 默认安装到/usr/local/ngnix 可执行文件在/ ...

  10. ROBOCOPY——Windows 的可靠文件复制

    复制指定类型文件 (-s :含子目录  不包括空目录) 复制所有 (-e :含子目录  包括空目录) 复制指定成层级内的 (-lev:n 仅复制源目录树的前 n 层) 复制排除给定类型后的 (-xf) ...