JZ2440:时钟设置

这一节的目标是对板子上的时钟有一个初步的了解。而且能通过初步设置。为我们接下来的程序做准备。

1. 板子上的基本资源:

  • 板载晶振12M
  • 主时钟源和 USB 时钟源都是晶振

2. 手冊中的相关项(按时钟进入的方向):

2.1 时钟的总体结构:

2.2 OM[ 3:2 ]:

从图中我们能够看到OM[] 起到可选择的作用(效果同三八译码器):


模式 OM[3:2]


MPLL状态


UPLL 状态


主时钟源


USB 时钟源


00


开启


开启


晶振


晶振


01


开启


开启


晶振


外部时钟


10


开启


开启


外部时钟


晶振


11


开启


开启


外部时钟


外部时钟


注意:

1. 尽管MPLL在复位后就開始, MPLL输出
(Mpll) 并没有作为系统时钟, 直到软件写入有效值来设置MPLLCON

寄存器。

在设置此值之前, 是将外部晶振或外部时钟源提供的时钟直接作为系统时钟。 即使用户不想改变MPLLCON

寄存器的默认值,用户也应当写入与之同样的值到MPLLCON寄存器寄存器中。

2. OM[3:2]是用于当OM[1:0]为 11 时决定一个測试模式。

上电一瞬间时钟的状态:

须要注意 OM[3:2] 是引脚,不是寄存器,看原理图得知 OM[3:2]
= 00 。从前边的图中能够得到结论是主时钟源和 USB 的时钟源都是从外部晶振得到的。

2.3 MPLL :


寄存器


地址


R/W


描写叙述


复位值


MPLLCON


0x4C000004


R/W


MPLL的配置寄存器


0x00096030


UPLLCON


0x4C000008


R/W


UPLL的配置寄存器


0x0004d030


PLLCON


Bit


描写叙述


复位值


MDIV


[19:12]


Main divider control


0x96 / 0x4d


PDIV


[9:4]


Pre-divider control


0x03 / 0x03


SDIV


[1:0]


Post divider control


0x0 / 0x0

这里有点须要说明:

当你设置MPLL 和UPLL的值时,你必须首先设置UPLL值再设置MPLL 值。 (大约须要7个 NOP的间隔)

普通情况下,pll不会关闭,这里包含上电。

对于pll的取值官方称非常困难,给出了推荐值


假设你想私人定制你的时钟,公式例如以下:

MPLL Control Register

Mpll = (2 * m * Fin) / (p * 2^s)

当中:

m = (MDIV + 8)

p  = (PDIV + 2)

s   = SDIV

UPLL Control Register

Upll = (m * Fin) / (p * 2S)

当中:

m = (MDIV + 8)

p  = (PDIV + 2)

s   = SDIV

PLL值选择向导(MPLLCON)

1.  Fout = 2  × m  × Fin / ( p*2s ),Fvco = 2  × m  × Fin / p

此处:m =MDIV+8, p=PDIV+2, s=SDIV

2.  600MHz  ≤ FVCO  ≤ 1.2GHz

3.  200MHz  ≤ FCLKOUT  ≤ 600MHz

4.  不要设置P 或M的值为0,这是由于设置P=000000,M=00000000 将会引起PLL的故障。

5.  P 和M的合理范围为:1  ≤ P  ≤ 62,1  ≤ M  ≤ 248

6.  pll稳定的最高频率是400MHZ

时钟计算举例:

ldr r0, =0x4c000014    //CLKDIV

mov r1, #3

str r1, [r0]

...

ldr r0, =0x4c000004    //MPLLCON

ldr r1, =((0x5c<<12)|(0x01<<4)|(0x02))    //MDIV=0x5c PDIV=0x01 SDIV=0x02

str r1, [r0]

m = (MDIV + 8) = 100

p  = (PDIV + 2) = 3

s   = SDIV  = 2

Mpll = (2 * m * Fin) / (p * 2^s) = (2*100*12)/12MHz = 200MHz

从最開始的那张图能够看到,FCLK 直接用的是 Mpll 之后的时钟频率,中间没有分频。

从以下这张图中我们能看到UPLL 的频率仅仅能有两个取值。而且给固定的单元供应频率:

2.4 FCLK。HCLK和 PCLK 介绍:

  • FCLK 是给 ARM920T 内核使用的
  • HCLK 是给 AHB总线使用的,详细涉及的硬件包含: memory 控制器,中断控制器。LCD控制器,DMA 和 USB 主机模式的AHB总线时钟
  • PLK 是给 APB 总线使用的,详细涉及的硬件包含:看门狗,iis,i2c,pwm的定时器,mmc接口,ADC,UART。GPIO,RTC 和 SPI。
  • UCLK 是给 USB 用的

下边的这两张图看着更清楚:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

S3C2440能够对他们三个的比例进行设定:(当中的
HDIVN 和 PDIVN 属于 CLKDIVN 寄存器)

相关寄存器:


寄存器


地址


R/W


描写叙述


复位值


CLKDIV


0x4C000014


R/W


Clock divider control register


0x00000000 

CLKDIV


Bit


描写叙述


复位值


DIVN_UPLL

[3]


UCLK select register(UCLK must be 48MHz for USB)

0: UCLK = UPLL clock

1: UCLK = UPLL clock / 2

Set to 0, when UPLL clock is set as 48MHz

Set to 1. when UPLL clock is set as 96MHz.


0


HDIVN

[2:1]


00 : HCLK = FCLK/1.

01 : HCLK = FCLK/2.

10 : HCLK = FCLK/4 when CAMDIVN[9] = 0.

HCLK= FCLK/8 when CAMDIVN[9] = 1.

11 : HCLK = FCLK/3 when CAMDIVN[8] = 0.

HCLK = FCLK/6 when CAMDIVN[8] = 1.


00


PDIVN


[0]


0: PCLK has the clock same as the HCLK/1.

1: PCLK has the clock same as the HCLK/2.


0

2.5 时钟要想到达详细的硬件(比方spi。i2c)还须要开启他们之间的开关:


寄存器


地址


R/W


描写叙述


复位值


CLKCON


0x4C00000C


R/W


Clock generator control register


0xFFFFF0


CLKCON


Bit


描写叙述


复位值


AC97


[20]


Control PCLK into AC97 block.

0 = Disable,   1 = Enable


1


Camera


[19]


Control HCLK into Camera block.

0 = Disable,   1 = Enable


1


SPI


[18]


Control PCLK into SPI block.

0 = Disable,   1 = Enable


1


IIS


[17]


Control PCLK into IIS block.

0 = Disable,   1 = Enable


1


IIC

[16] 

Control PCLK into IIC block.

0 = Disable,   1 = Enable 


1

ADC(&Touch Screen) 

[15]

Control PCLK into ADC block.

0 = Disable,   1 = Enable 


1

RTC 

[14] 

Control PCLK into RTC control block.

Even if this bit is cleared to 0, RTC timer is alive.0 = Disable,   1 = Enable 


1

GPIO

[13]

Control PCLK into GPIO block.

0 = Disable,   1 = Enable 


1

UART2

[12] 

Control PCLK into UART2 block.

0 = Disable,   1 = Enable 


1

UART1 

[11]

Control PCLK into UART1 block.

0 = Disable,   1 = Enable 


1

UART0

[10]

Control PCLK into UART0 block.

0 = Disable,   1 = Enable


1

SDI 

[9]

Control PCLK into SDI interface block.

0 = Disable,   1 = Enable


1

PWMTIMER

[8]

Control PCLK into PWMTIMER block.

0 = Disable,   1 = Enable


1

USB device

[7]

Control PCLK into USB device block.

0 = Disable,   1 = Enable


1

USB host

[6]

Control HCLK into USB host block.

0 = Disable,   1 = Enable


1

LCDC 

[5]

Control HCLK into LCDC block.

0 = Disable,   1 = Enable  


1

NAND Flash Controller

[4]

Control HCLK into NAND Flash Controller block.0 = Disable,   1 = Enable

1

SLEEP 

[3]

Control SLEEP mode of S3C2440A.

0 = Disable,   1 = Transition to SLEEP mode


0

IDLE BIT

[2] 

Enter IDLE mode. This bit is not cleared automatically.

0 = Disable,   1 = Transition to IDLE mode


0

Reserved 

[1:0] 

Reserved

0
时间: 2024-10-12 13:17:10

JZ2440:时钟设置的相关文章

STM32内部时钟设置-寄存器版

STM32寄存器版本--内部时钟设置 同时要记得把延时初始化函数设置好 1 //系统时钟初始化函数 2 //pll:选择的倍频数,从2开始,最大值为16 3 //pll:选择的倍频数,这里使用内部时钟,PLL为4就是4分频 4 void Stm32_Clock_Init(u8 PLL) 5 { 6 unsigned char temp=0; 7 MYRCC_DeInit(); //复位并配置向量表 8 // RCC->CR|=0x00010000; //外部高速时钟使能HSEON 9 RCC->

s3c2440x系统时钟设置及定时器的设置与应用

一.s3c2440时钟介绍 s3c2440中有三种时钟:FCLK,HCLK,PCLK. FCLK用于CPU核:HCLK用于AHB(Advanced High Performance Bus)总线上的设备,如CPU核.存储器控制器.中断控制器.LCD控制器.DMA和USB主机模块等:PCLK用于APB(Advanced Peripheral Bus)总线上的设备,如WATCHDOG.IIS.I2C.PWM定时器.MMC接口.ADC.UART.GPIO.RTC和SPI. s3c2440中有两个PLL

Linux硬件时钟和系统时钟设置

Linux时钟分为系统时钟(System Clock)和硬件时钟(Real Time Clock,简称RTC).系统时钟是指当前Linux Kernel中的时钟:而硬件时钟则是主板上由电池供电的时钟,硬件时钟可以在BIOS中进行设置.当Linux启动时,系统时钟会去读取硬件时钟的设置,然后系统时钟就会独立于硬件时钟运作. Linux关于时间的设置的shell命令有date和hwclock两种: 嵌入式s3c6410 ARM开发板中Linux时间设置: 1. date  -- 用来读取或设置系统时

freescale飞思卡尔 HC9S12 系列单片机 Flash擦写详解(一)之时钟设置

Flash擦写的内容,个人做HC9S12系列单片机时觉得应该是各模块内容中最难而且是最麻烦的一步了.只有能够对Flash进行擦写以后,所做的Bootloader才有真正手段将串口或者其他通讯手段接收到的数据或者程序写入Flash中进行程序或者数据的更新.当初做Flash的擦写也遇到了很多问题,网上搜罗下来也没有合适的帖子能够详细的将整个过程或者学习的思路以及最后实现的程序详细的加以解析,而本博文就是基于这个出发点来写的.技术本身应当是共享的才能真正让社会进步,不是么? 关于单片机Flash的基本

时钟设置

date --set="05/31/16 18:16" 时钟设置 设置系统时间# date --set=“07/07/06 10:19" (月/日/年 时:分:秒)2.hwclock/clock查看硬件时# hwclock --show# clock --show设置硬件时间# hwclock --set --date="07/07/06 10:19" (月/日/年 时:分:秒)# clock --set --date="07/07/06 10:

汇编实现时钟设置代码理解

下面的笔记是我在看<朱老师物联网大讲堂>(www.zhulaoshi.org)之后所做的笔记,只是大概根据自己看了视频与朱老师上课做的笔记而有的理解记录下来. 写了 有代码的,要把代码给理解完整. 朱老师的随堂程序是:clock.s // 时钟控制器基地址 #define ELFIN_CLOCK_POWER_BASE0xE0100000 // 时钟相关的寄存器相对时钟控制器基地址的偏移值 #define APLL_LOCK_OFFSET0x00 #define MPLL_LOCK_OFFSET

CC2541蓝牙学习——时钟设置

CC2541有四个振荡器,分别是: 32MHz外部晶振 16MHz内部RC振荡器 32kHz外部晶振 32kHz内部RC振荡器 由此可以看出,CC2541内部自带了振荡器,也就是说即使外部电路不接振荡器,CC2541也可以工作,答案是肯定的,但是作为无线RF收发,只能使用外部32MHz晶振,除非准备将CC2541当做一个普通的增强型51单片机来用,否者32MHz外部晶振是必不可少的,那么这4个晶振有什么区别和用途呢? 32MHz的外部晶振有两个作用:为内部时钟提供时钟源和用于RF收发器 16MH

RTC硬件时钟设置修改【转】

转自:http://os.chinaunix.net/a2008/0526/981/000000981211.shtml 这两天一直在做i2c设备驱动的理解,所以很少更新文章. 由于对于表计来说,RTC硬件时钟是非常重要的,并且其精度设计要求是比较高的,在busybox中,可以通过date命令设置当前的系统时间,然后通过hwclock将当前的系统时间写入硬件时钟中,但是busybox的date命令有一个缺陷,就是不能精确到秒,这是我们设计中所不能忍受的,这里我们感觉到源码开放对于我们来说是多么的

linux之路的第一篇之常用系统命令之系统时钟设置详解

系统时钟通常是非常有用的,所以一定要熟记date 用来显示和修改当前系统日期时间,主要用于时间管理,这是系统时间软件时钟date 月日时分年.秒  MMDDhhmm[cc|yy].ss date 121212122013.34 2013年12月12日12分34秒 年和秒可以不指定,默认是当前年和00秒date +%D 显示日期 月日年     +%Y/%y 都可以 只显示年小y显示两位年份     +%T 小时分钟秒     +%F 年月日     +%H 小时     +%M 分钟     +