历史上的今天
返回首页

历史上的今天

今天是:2024年10月13日(星期日)

正在发生

2021年10月13日 | S3C2440裸机------时钟

2021-10-13 来源:eefocus

1.S3C2440的时钟体系

1.1.S3C2440结构框图

从上面的结构图可以看出,S3C2440主要分为CPU,高速总线,低速总线。其中


CPU工作与FCLK


AHB总线工作于HCLK,AHB(Advance High performance Bus)总线主要用于高性能模块。


慢速外设工作于PCLK,APB(Advance Peripheral Bus)总线主要用于低贷款的周边外设之间的连接。


我们的S3C2440硬件电路板上,时钟源是一个12M的晶振,我们用PLL锁相环可以得到上面的三种频率。


1.2 S3C2440时钟树

从上图的左上角可以看出,时钟源有两个选择,可以是晶振,也可以是直接从EXTCLK管脚输入的时钟。具体选择什么时钟源由后面的OM进行选择,我们的电路图中OM的两个管脚都是接地低电平的,因此使用晶振作为时钟源。


然后往后有两个PLL,MPLL和UPLL,分别是MAIN  PLL和USB PLL.


晶振经过MPLL,得到FCLK提供给CPU,然后FCLK经过HDIV分频可以得到HCLK提供给AHB总线,经过PDIV得到PCLK提供给APB总线。


晶振经过UPLL然后给USB提供时钟。

1.3 S3C2440上电顺序

2.寄存器配置

下面我们编程来配置S3C2440的时钟,我们配置FCLK=400M,HCLK=100M, PCLK=50M。我们需要设置MPLLCON寄存器让FCLK=400M.然后设置CLKDIVN让HCLK=FCLK/4, PCLK=FCLK/8.


2.1CLKDIVN寄存器

我们把CLKDIVN[2:1]的HDIVN设置为10,然后CLKDIVN[0]的PDIVN设置为1.


2.2MPLLCON寄存器

我们通过设置MDIV=92,PDIV=1,SDIV=1就可以设置FCLK=400M.


2.3设置CPU为异步模式

另外,芯片手册里面有一个注意事项,如果我们的HDIVN不是零的话,CPU总线必须设置为异步模式,否则CPU会使用HCLK而不是FCLK.所以我们要设置CPU为异步模式。

3.编程

修改之前的start.S.


 

.text

.global _start

 

_start:

 

/* 关闭看门狗 */

ldr r0, =0x53000000

ldr r1, =0

str r1, [r0]

 

/* 设置MPLL, FCLK : HCLK : PCLK = 400m : 100m : 50m */

/* LOCKTIME(0x4C000000) = 0xFFFFFFFF */

ldr r0, =0x4C000000

ldr r1, =0xFFFFFFFF

str r1, [r0]

 

/* CLKDIVN(0x4C000014) = 0X5, tFCLK:tHCLK:tPCLK = 1:4:8  */

ldr r0, =0x4C000014

ldr r1, =0x5

str r1, [r0]

 

/* 设置CPU工作于异步模式 */

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

orr r0,r0,#0xc0000000   //R1_nF:OR:R1_iA

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

 

/* 设置MPLLCON(0x4C000004) = (92<<12)|(1<<4)|(1<<0) 

*  m = MDIV+8 = 92+8=100

*  p = PDIV+2 = 1+2 = 3

*  s = SDIV = 1

*  FCLK = 2*m*Fin/(p*2^s) = 2*100*12/(3*2^1)=400M

*/

ldr r0, =0x4C000004

ldr r1, =(92<<12)|(1<<4)|(1<<0)

str r1, [r0]

 

/* 一旦设置PLL, 就会锁定lock time直到PLL输出稳定

* 然后CPU工作于新的频率FCLK

*/

 

/* 设置内存: sp 栈 */

/* 分辨是nor/nand启动

* 写0到0地址, 再读出来

* 如果得到0, 表示0地址上的内容被修改了, 它对应ram, 这就是nand启动

* 否则就是nor启动

*/

mov r1, #0

ldr r0, [r1] /* 读出原来的值备份 */

str r1, [r1] /* 0->[0] */ 

ldr r2, [r1] /* r2=[0] */

cmp r1, r2   /* r1==r2? 如果相等表示是NAND启动 */

ldr sp, =0x40000000+4096 /* 先假设是nor启动 */

moveq sp, #4096  /* nand启动 */

streq r0, [r1]   /* 恢复原来的值 */

 

bl main

 

halt:

b halt

4.实验

我们之前的LED实验里面,LED闪烁的时候有延时函数,当我们提高了时钟频率之后,会发现LED闪烁的比之前快。

推荐阅读

史海拾趣

问答坊 | AI 解惑

新的想法!

我最近看到论坛中的气氛真的挺好的,问的问题大家都讲的那么详细,有个问题是有人在有问题时会传附件那么想解决的人下载是否不应该付出芯币呢?琳子姐你看这样行吗?…

查看全部问答>

Wince6.0下面检测到SD卡后串口提示响应超时,但是SD卡可以正常识别和使用,请高手指点如何才能解决响应超时的问题

我使用的是PXA310平台,SD卡插入插槽后开机,刚开机的一段时间内串口打印的信息提示错误 串口信息如下 [MMC] SDH_INIT, Index:0 [MMC] SDH_INIT, cao:0 [MMC] SDH_INIT, intrTHreadP:100 [MMC] SDH_INIT, IstThreadP:101 [MMC] DMA BUFFER ...…

查看全部问答>

smdk2440下串口输出一些debug信息后就再没debug信息了

板子启动后,输出了一些诸如\"HW_Init, PWR_Init, PWR_Open, PWR_IOControl, PWR_Close\"的debug信息后,就没再有debug信息了,输出的那些信息都是在smdk2440\\drivers\\pwrbtn_pcf\\目录下的,而同目录下别的文件里的debug信息都打印不出来,我在t ...…

查看全部问答>

武汉有做Linux C/C++ 嵌入式开发的吗?

现在急需在武汉做Linux C/C++ 嵌入式开发的程序员,主要是做手机界面,因此需要在界面开发上有经验的人 请联系:陈先生 手机:13100628660 简历发至邮箱:peng.chen.wh@gmail.com…

查看全部问答>

windows CE 设备闲置一段时间后自动关闭 系统发送什么消息啊?

windows CE 设备闲置一段时间后自动关闭 系统发送什么消息啊?…

查看全部问答>

急!wince系统要打印汉字,用什么编码方式??

wince系统要打印汉字,用unicode编码打印结果为方框,该用什么编码方式?GBK UTF都不能啊?急…

查看全部问答>

理解功率MOSFET的UIS及雪崩能量(图)

理解功率MOSFET的UIS及雪崩能量(图) 作者:万代半导体元件上海有限公司 刘松 葛小荣   日期:2010-4-4  来源:今日电子   在功率MOSFET的数据表中,通常包括单脉冲雪崩能量EAS,雪崩电流IAR,重复脉冲雪崩 ...…

查看全部问答>

LIN简介

Vector公司有LIN介绍的大挂图,简明扼要,很不错,可惜是纸格式,保存看起来不方便,所以我把其编辑成了文件格式,如有需要,请自取。 http://www.box.net/shared/tipmr5qt1y…

查看全部问答>

简单加法

一、采用AT89C51单片机为核心,设计一个小系统,至少包括键盘(中断)、显示(LED和数码管)以及存储器。要求: 1、  请画出功能框图。 2、  功能要求: 1)  将键盘分为0-9以及“+”、“-”、“=”、“启动”、“复位”以及“暂 ...…

查看全部问答>

stm8s105c6端口PE1问题

                                 最近做一个项目,端口PE1设置为推挽输出,在程序中置位输出时,输出锁存器显示输出高电平而实际端口并没有高电平输 ...…

查看全部问答>