裸机系列——2440时钟

article/2025/11/9 3:41:10

自己的总结:

1.2440 有俩个PLLUPLL MPLLUPLL 用于USB 时钟UCLKMPLL 对应FCLK .HCLK PCLK ARM 启动时直接使用外部晶振作为CPU 时钟,对应244012Mhz 。只有在设置了时钟寄存器M P S 三个值,具体的寄存器PLLCON 下面已经说得很清楚了。设置分频寄存器后CPU 时钟即采用倍频后的FCLK 时钟。

2. CPU 时钟即就是FCLK 时钟,HCLKFCLK 分频,PCLKHCLK 分频。具体的分频比例需要设置寄存器CLKDIVN ,详细见手册。

3. 系统要工作需要首先设置好时钟,时钟是CPU 及外设工作的心脏,当你没有设置时钟时CPU 直接使用外部晶振,所以有些慢设没有设置时钟也能工作。时钟设置时有一个CPU 时钟模式- 快速总线模式和异步时钟模式,具体是实现找了好多资料都没有弄明白,大概有一些了解的地方是 ,快速总线模式下且HDIVN 不为0 时,CPU 使用HCLK 时钟且可以改变CPU 时钟但不改变FCLKPCLK 的频率。

下面是转载别人的:

S3C2410 CPU 默认的工作主频为12MHz ,使用PLL 电路可以产生更高的主频供CPU 及外围器件使用 S3C2410 有两个PLLMPLLUPLLUPLL 专用与USB 设备。MPLL 用于CPU 及其他外围器件。

通过MPLL 会产生三个部分的时钟频率:FCLKHCLKPLCK FCLK 用于CPU 核,HCLK 用于AHB 总线的设备( 比如SDRAM)PCLK 用于APB 总线的设备( 比如UART) 。从时钟结构图中可以查看到使用不同时钟频率的硬件。

Figure 7-1. Clock Generator Block Diagram

 

(注:这里要注意从图中看出,Uart 使用的是PCLK

时钟源选择

7-1 描述了模式控制引脚 (OM3 OM2) 和选择时钟源之间的对应关系。 OM[3:2] 的状态由 OM3 OM2 引脚的状态在 nRESET( 当振荡器 (crystal/oscillatto) 时钟输出稳定后, nRESET 引脚变为高电平 ) 的上升沿锁存得到。  

  注意: 1 、尽管 MPLL 在系统复位的时候就开始产生,但是只有有效的设置好 MPLLCON 寄存器后 才能用于系统时钟。在此之前,外部时钟将直接作为系统时钟 。即使不需要改变 MPLLCON 寄存器的初值,也必须 将同样的值写入寄存器。

2 、当 OM[1:0] 11 时, OM[3:2] 用于决定一种测试模式。

下面介绍MPLL 的启动流程:

(注:下面内容部分直接摘录自《s3c2410 完全开发流程》,Clock 部分写了非常好)

S3c2410 datasheet 224 “Figure 7-4. Power-On Reset Sequence” 展示了上电后MPLL 启动的过程

 

 

请跟随FCLK 的图像了解启动过程:

1 、上电几毫秒后,晶振输出稳定,FCLK= 晶振频率,nRESET 信号恢复高电平后,CPU 开始执行指令。

2 、我们可以在程序开头启动MPLL ,在设置MPLL 的几个寄存器后,需要等待一段时间(Lock Time) MPLL 的输出才稳定。在这段时间(Lock Time) 内,FCLK 停振,CPU 停止工作。Lock Time 的长短由寄存器LOCKTIME 设定。

3 Lock Time 之后,MPLL 输出正常,CPU 工作在新的FCLK 下。

 

设置S3c2410 的时钟频率就是设置MPLL 的几个寄存器:

1 LOCKTIME :设为0x00ffffff

前面说过,MPLL 启动后需要等待一段时间(Lock Time) ,使得其输出稳定。位[23:12] 用于UPLL ,位[11:0] 用于MPLL 。使用确省值0x00ffffff 即可。

2 CLKDIVN :用来设置FCLK:HCLK:PCLK 的比例关系,默认为1:1:1

这里值设为0x03 ,即FCLK:HCLK:PCLK=1:2:4

CLKDIVN 不同的设置及对应的时钟比例关系如下图:

 

3 MPLLCON :设为(0x5c << 12)|(0x04 << 4)|(0x00) ,即0x5c0040

对于MPLLCON 寄存器,[19:12]MDIV[9:4]PDIV[1:0]SDIV 。有如下计算公式:

MPLL(FCLK) = (m * Fin)/(p * 2^s)

其中: m = MDIV + 8, p = PDIV + 2

Fin 即默认输入的时钟频率12MHzMPLLCON 设为0x5c0040 ,可以计算出FCLK=200MHz ,再由CLKDIVN 的设置可知:HCLK=100MHzPCLK=50MHz

 

  通常我们将如上时钟初始化的过程写成clock_init 函数供其他函数调用,代码如下:

void clock_init(void)

{

        /*init clock*/

rLOCKTIME = 0xFFFFFF;

    /* 设置FCLK:HCLK:PCLK=1:2:4, 这样假设处理器主频为200M,HCLK50M,PCLK25MARM920T 内核使用FCLK, 内存控制器,LCD 控制器等使用HCLK ,看门狗、串口等使用PCLK*/

rCLKDIVN  = 0x3;

    /* 设置时钟频率为200M*/

    rMPLLCON = 0x5c0040;

    }

改变2410PLL 频率,具体过程:

1 、第一步软件工作: 设置P M S divider control ,也就是设置MPLLCON 寄存器。

    关于PMS ,可以看Figure 7-2. 寄存器MPLLCON 的设置呢,其实有一定的规则,并非你想要的每个Fclk 频率都可以得到。官方推荐了一个表PLL VALUE SELECTION TABLE ,要按照这个进行。否则的话,就需要自己按照公式推算,但是mizi 公司并不保证你的设置是合适的。所以,如果想要工作在200MHz ,还是按 照vivi 的推荐值即可。

@ step1: set P M S divider control

        mov r1, #CLK_CTL_BASE

         ldr r2, =vMPLLCON_200

        str r2, [r1, #oMPLLCON]

    其中,MDIV=0x5cPDIV=0x04SDIV=0x00. 公式MpllFclk=m×Fin/p×(2^s) )【m=MDIV+8, p=PDIV+2,s=SDIV

    2 、第二步软件工作:设置CLKDIVN

    这一步是设置分频系数,即Fclkcpu 主频,HclkFclk 分频得到,PclkHclk 分频得到。假设HclkFclk 的二分频,Pclk Hclk 的二分频,那么分频系数比就是FclkHclkPclk=124. 那么Hclk100MHz ,总线时钟周期为10nsPclk 50MHz

@ step2: change clock divider

        mov r1, #CLK_CTL_BASE

        mov r2, #vCLKDIVN

        str r2, [r1, #oCLKDIVN]

    3 、第三步软件工作: CLKDIVN 的补充设置

  void ChangeClockDivider(int hdivn,int pdivn)

{

     // hdivn,pdivn FCLK:HCLK:PCLK

     //     0,0         1:1:1

     //     0,1         1:1:2

     //     1,0         1:2:2

     //     1,1         1:2:4

    rCLKDIVN = (hdivn<<1) | pdivn;   

    

    if(hdivn)

        MMU_SetAsyncBusMode();

    else

        MMU_SetFastBusMode();

}

If HDIVN = 1, CPU 总线模式必须从快速总线模式转变为同步总线模式,采用以下指令

;void MMU_SetFastBusMode(void)

; FCLK:HCLK= 1:1

  EXPORT MMU_SetFastBusMode

MMU_SetFastBusMode

   mrc  p15,0,r0,c1,c0,0

   bic  r0,r0,#R1_iA:OR:R1_nF

   mcr  p15,0,r0,c1,c0,0

   MOV_PC_LR

If HDIVN=1 and CPU 总线模式为快速总线模式时, CPUHCLK 提供. 该特性可以在不改变HCLK and PCLK 的前提下把CPU 的频率减半.

 

;void MMU_SetAsyncBusMode(void)

; FCLK:HCLK= 1:2

   EXPORT MMU_SetAsyncBusMode

MMU_SetAsyncBusMode

   mrc  p15,0,r0,c1,c0,0

   orr  r0,r0,#R1_nF:OR:R1_iA

   mcr  p15,0,r0,c1,c0,0

   MOV_PC_LR

    4 、第四步软件工作:等待locktime 时间,让新的Fclk 生效

@ step4: stay locktime

        mov r1, #CLK_CTL_BASE

         ldr r2, =vLOCKTIME

        str r2, [r1, #oLOCKTIME]

    6 、对外设的影响

    在这个实验中,主要是有两个需要改变,一个外设是UART ,一个外设是SDRAM

    1UART ,它是接在APB 总线上,所以对应的时钟信号为Pclk ,现在为50MHz 。如果想要设置波特率为115200bps ,那么根据公式 UBRDIV0=(int)(PCLK/(bps*16))-1 计算,应该为26 。如果放到程序中,那么应该注意形式。具体如下:

UBRDIV0 = ((int)(PCLK/16./UART_BAUD_RATE) -1);

    2SDRAM ,主要的影响因素为刷新频率。前面在SDRAM 中没有具体分析,现在可以详细说明。使用了两片HY57V561620CT-H ,查看手册 其刷新频率为8192 refresh cycles/64ms ,所以刷新周期64ms/81927.8125us 。看寄存器REFRESH 的各个位的设置情况:

    ·REFEN[23] :开启自动模式,设为1

    ·TREFMD[22] :设为Auto refresh 模式,设为0

    ·Trp[21:20] :看看RAS precharge Time ,查看SDRAM 手册,发现-H 系列此参数至少为20ns ,现在Hclk 对应的时钟周期为10ns ,所以至少应该为2clock 。可以设为00

    ·Tsrc Semi Row Cycle Time ,也就是RAS Cycle Time ,至少65ms ,所以至少得6.5clock ,按照可选值,应该设置为11

    ·Refresh[10:0]

    公式refresh period = (2^11 - refresh_count +1)/Hclk ,由此推导出refresh_count=2^11+1-refresh period*Hclk 。带入数值,计算得出12680x04f4 ,这个数值要用四舍五入,减少误差。

    · 其余的保留值,均设置为0

    由此得出该寄存器的值应该为0x008c04f4

 


http://chatgpt.dhexx.cn/article/AAZdRjYX.shtml

相关文章

【mini2440】S3C2440的串口

1. 基本电路 2. 相关寄存器 2.1 引脚 2.2 框图 2.3 串口 3. 相关代码 S3C2440A 中的时钟控制逻辑可以产生必须的时钟信号&#xff0c;包括 CPU 的 FCLK&#xff0c;AHB 总线外设的 HCLK 以及 APB 总线外设的 PCLK。S3C2440A 包含两个锁相环&#xff08;PLL&#xff09;&#…

mdk+2440

目前仍然有许多人在使用ADS1.2编译ARM9的程序&#xff0c;这款编译器实属经典&#xff0c;但是已经多年停止更新、维护了。这篇文章主要讲解ARM公司受够Keil之后力推的一款编译器MDK。 MDK的使用上和ADS1.2有很多相似之处&#xff0c;从ADS1.2过渡到MDK也是非常容易的一种事情。…

2440 时钟设置

首先需要知道时钟的概念&#xff1a; 1、是用来同步系统信号; 就举例来说&#xff1a; 如果你cpu用i2c传输一个数据给从机设备&#xff0c;那么你传输数据时从设备怎么知道数据有没有到达&#xff0c;多久检测一次数据线&#xff1f;&#xff1f;这个就需要时钟同步&#xff0c…

FL2440开发板简介及其烧录

目录 FL2440开发板简介 FL2440开发板 FL2440硬件资源列表 开发板存储系统&#xff1a; FL2440开发板烧录 FL2440烧录流程&#xff1a; 烧录准备工作 烧录文件: 硬件准备&#xff1a; 烧录过程 J-link操作&#xff1a; u-boot下烧录&#xff1a; 开发板启动流程&…

大数据分析平台和工具,主要有哪些?

1.Disco Disco最初由诺基亚开发&#xff0c;这是一种分布式计算框架&#xff0c;与Hadoop一样&#xff0c;它也基于MapReduce。它包括一种分布式文件系统以及支持数十亿个键和值的数据库。 支持的操作系统&#xff1a;Linux和OSX。 2.HPCC 作为Hadoop之外的一种选择&#x…

大数据分析平台的搭建方式有哪些

随着大数据时代的到来&#xff0c;数据价值的概念逐渐深入人心&#xff0c;许多企业开始搭建自己的大数据分析平台&#xff0c;以便在数据洪流中把握行业未来的发展方向。做任何事情之前&#xff0c;首先要设定目标和思路&#xff0c;然后根据确定的目标、思路和实际情况制定可…

目前大数据技术平台有很多,主要可以分为哪几类?

大数据的处理过程可以分为大数据采集、存储、结构化处理、隐私保护、挖掘、结果展示(发布)等&#xff0c;各种领域的大数据应用一般都会涉及到这些基本过程&#xff0c;但不同应用可能会有所侧重。对于互联网大数据而言&#xff0c;由于其具有独特完整的大数据特点&#xff0c;…

有哪些好的数据来源或者大数据平台?

分享下我自己平时收集的..共100多个O_O 网站分析类&#xff1a; 百度指数 - 以百度海量网民行为数据为基础的数据分享平台 Google趋势 - 了解 Google中热度上升的搜索 360指数 - 基于360搜索的大数据分享平台 Alexa - 网站排名 Google Analytics - Google出品&#xff0c;可…

大数据平台的软件有哪些?

查询引擎 一、Phoenix 简介&#xff1a;这是一个Java中间层&#xff0c;可以让开发者在Apache HBase上执行SQL查询。Phoenix完全使用Java编写&#xff0c;代码位于GitHub上&#xff0c;并且提供了一个客户端可嵌入的JDBC驱动。 Phoenix查询引擎会将SQL查询转换为一个或多个H…

[BigData]16家大数据分析平台

&#xfeff;&#xfeff; 对今天的企业来说&#xff0c;数据分析已经成为生死攸关的选择。我们分析一些著名的供应商&#xff0c;从Hadoop创业者到传统的数据库市场参与者。 革命 – 这个词汇十分准确地描述了我们所处的这个数据分析的时代。企业一方面紧紧握住大量不同类型的…

大数据网站汇总(数据搜集、大数据竞赛、)

一. 国家级大数据平台 1.1 国家大数据平台&#xff1a; 数据_中国政府网 (www.gov.cn) 1.2 司法大数据平台&#xff1a;中国司法大数据服务网 (court.gov.cn) 1.3 中国经济社会大数据研究平台&#xff1a;中国经济社会大数据研究平台 (cnki.net) 1.4 中国知网CNKI-总库&a…

linux cat命令的作用,Linux命令cat使用详解

cat命令功能&#xff1a; cat命令主要用来实现查看文件、创建文件、及合并、追加文件内容等功能。 cat命令主要参数&#xff1a; -n 或 –number&#xff1a;对输出文档的行数进行编号&#xff0c;从1开始。 -b 或 –number-nonblank&#xff1a;和 -n 功能相似&#xff0c;不同…

Windows 中使用 Linux 命令

如果要在 Windows 中运行 Linux 命令&#xff0c;那么 Cygwin 是一个推荐的工具。Cygwin 创建于 1995 年&#xff0c;旨在提供一个原生运行于 Windows 中的 POSIX 兼容环境。Cygwin 是由 Red Hat 员工和许多其他志愿者维护的自由开源软件。 二十年来&#xff0c;Windows 用户使…

设置 linux 命令别名

前言&#xff1a; 在操作 linux 的时候可能会碰到一些非常长的命令&#xff0c;这个命令平时用的比较频繁&#xff0c;每次输入执行感觉非常麻烦有木有。如果把一段长的命令设置成一个短的别名&#xff0c;是不是很方便&#xff1f; 1. alias 命令引入 找台 linux 机器执行一…

Linux命令之-telnet

使用telnet测试端口连通性 telnet命令是TELNET协议的用户接口&#xff0c;它支持两种模式&#xff1a;命令模式和会话模式&#xff0c;虽然telnet支持许多命令&#xff0c;但大部分情况下&#xff0c;我们只是使用它查看目标主机是否打开了某端口&#xff08;默认是23&#xf…

Linux 命令执行流程

今天继续给大家介绍Linux基础知识&#xff0c;本文主要内容是Linux命令执行的流程&#xff0c;不仅介绍了当我们键入一个Linux命令时系统的执行流程&#xff0c;还介绍了Linux系统中内部命令与外部命令的区别、PATH环境变量的作用等等。 Linux的命令执行流程如下&#xff1a; 1…

Linux命令之sync

概述 sync 命令可以强制将内存中的文件缓冲写入磁盘&#xff0c;更新块信息。 在 linux/unix 系统中&#xff0c;在文件或数据处理过程中一般先放到内存缓冲区中&#xff0c;等到适当的时候再写入磁盘&#xff0c;以提高系统的运行效率。这样虽然可以提高磁盘写入数据的效率&a…

Linux命令:scp

目录 简介 一、语法 二、示例 2.1 将本地文件复制到远程主机目录 2.2 将本地目录复制到远程主机目录 2.3 将远程主机的文件复制到本机 2.4 复制远程主机目录到本机 简介 今天我们来介绍一个Linux命令&#xff1a;scp scp — secure copy (remote file copy program)&am…

使用node.js构建一个web服务器(适合自学)

使用node.js构建一个web服务器 先介绍node.js的安装&#xff0c;再介绍使用node.js构建一个简单的web服务器&#xff0c;最后通过一个简单的示例&#xff0c;演示网页与服务器之间的数据交互的实现。 WEB服务器 WEB服务器也称为WWW服务器。WWW(World Wide Web、翻译成中文&a…

node-php-server 游戏服务器框架

做游戏服务器8年多了&#xff0c;用过lua, 用过C, 用过nodejs ,最近用的是php,有些人会说php不是用在web开发吗&#xff0c;怎么能用在游戏服务器的业务逻辑开发&#xff0c;php 怎么跟客户端通信&#xff0c;肯定有很多人不解。 其实很多时候&#xff0c;技术原理都是都是相通…