关于时钟频率的设置
来源:互联网 发布:js defer promise 编辑:程序博客网 时间:2024/04/27 21:23
OSC是用无源晶振,EXT是用有源晶振或外部时钟2440的12M是Oscillator 是有源的呀! 2440的12M是Oscillator 准备先不跑系统,把S3C2440和周边硬件熟悉一下再说。 对于任何一个单片机,要使用它首先就要弄明白他的时钟系统,MCU的时钟就像人的心脏,跳动的快慢,决定着系统的工作速度。S3C2440的datesheet上说,可以达到400M,但是也不是说,必须在400M的频率下工作,主时钟晶振来自于外部晶振(XTIPLL)或者是外部时钟(EXTCLK)。时钟生成器包含了一个振荡器(振荡放大器),其连接外部晶振,并且还有2个PLL,可以产生需要的高频。 通过引脚OM[3:2]来决定时钟源是Crystal还是EXTCLK,不过我用的开发板将OM[3:2]固定接地了,都是用外部晶振。有一点值得注意,在对MPLLCON写入有效值之前,系统使用外部晶振或外部时钟源的时钟。即使用户不准备改变MPLLCON的值,也应当重新写一次。 简单说一下,S3C2440的时钟构成。 S3C2440具有2个PLL(Phase Locked Loop:用来产生高频的电路),一个是MPLL, 用于产生FCLK, HCLK, PCLK三种频率, 这三种频率分别有不同的用途: FCLK是CPU提供的时钟信号,如果提到CPU的主频是400MHz,就是指的这个时钟信号。 HCLK是为AHB总线提供的时钟信号, Advanced High-performance Bus,主要用于高速外设,比如内存控制器,中断控制器,LCD控制器, DMA 以及USB host 。 PCLK是为APB总线提供的时钟信号,Advanced Peripherals Bus,主要用于低速外设,比如WATCHDOG,IIS, I2C, SDI/MMC, GPIO,RTC ,UART,PWM,ADC and SPI等等。 另外一个是UPLL,专门用于驱动USB host/Device。并且驱动USB host/Device的频率必须为48MHz。 下面说一些跟时钟有关的寄存器设置:通过改变CLKDIVN可以改变FCLK,HCLK,PCLK的分频比。 锁定时间计数寄存器LOCKTIME(0x4c000000):一般使用默认就可以。 锁相环控制寄存器[MPLLCON(0x4c000004)&UPLLCON(0x4c000008)]: MPLL=(2*m*Fin)/(p*2^s) UPLL=(m*Fin)/(p*2^s) 其中m=(MDIV+8),p=(PDIV+2),s=SDIV P,M范围:1<=P<=62,1<=M<=248 注意:MDIV[19:12],PDIV[9:4],SDIV[1:0],当设置MPLL和UPLL值的时候,需要先设置UPLL再设置MPLL。 例如:MPLLCON = (92<<12) | (1<<4) |(1);//FCLK=400M 这里MDIV=92,PDIV=1,SDIV=1,那么m=100,p=3,s=1,且Fin=12M,所以FCLK=400M 再设置CLKDIVN=0x03;//FCLK:HCLK:PCLK=1:2:4 这里CLKDIVN(0x4c000014)用于决定三者的分配比例 一般设置这两个就可以了。还有一个时钟控制寄存器CLKCON(0x4c00000c)向相应位写1使能相应时钟,不过一般默认为1. 关于时钟方面基本就是这么多了。 S3C2440 clock 工作原理 overview
Oscillator 有源晶体(里面有有源器件)
在系统复位之后,如果没有设定PLL,则采用外部晶振的频率作为FCLK,同时FCLK:HCLK:PCLK的比例关系为1:1:1。
时钟和电源管理这一块内容包括三个部分:时钟控制, USB控制, 电源控制
在s3c2440a的CPU上,时钟控制逻辑可以产生需要的时钟信号,包括给CPU用的FCLK, 给AHB总线外设用的HCLK以及给APB总线外设用的PCLK.S3C2440A含有两个锁相环:一个是FCLK, HCLK和PCLK, 还有另外一个专门用于USB单元(48Hz).时钟控制逻辑可以在没有PLL的时候使时钟变慢,并且可以用软件的方法使时钟与周边设备连接与断开, 这个功能可以节省功耗.
补充:
AMBA总线
先进的微控制器总线体系结构AMBA规范定义了三种总线:
(1)AHB(Advanced High-performance Bus):用于连接高性能系统模块。它支持突发数据传输方式及单个数据传输方式,所有时序参考同一个时钟沿;
(2)ASB(Advanced System Bus):用于连接高性能系统模块,它支持突发数据传输模式;
(3)APB(Advance Peripheral Bus):是一个简单接口支持低性能的外围接口。
对于电源控制逻辑,S3C2440A有不同的电源管理的主题,来对某一项任务来优化电源功耗.S3C2440A中的电源管理单元可以有四种模式: 普通模式, SLOW 模式, IDLE模式, SLEEP模式.
功能描述
时钟架构
时钟产生器包括一个连接在外部crystal上的晶振,并且有两用于产生S3C2440A所需要的高频信号的锁相环.
时钟源的选择
下表显示了芯片模式控制引脚(OM3和OM2)的选择与S3C2440A时钟源的关系.
注意:
1) 尽管重启后,MPLL会启动,但是直到软件正确设置了MPLLCON寄存器后,MPLL的输出才作为系统的时钟.在正确的设置被设置前,来自外部的crystal或extclk源直接作为系统时钟.即使用户并不想改变MPLLCON寄存器的默认值,用户应该在MPLLCON的寄存器中设置同样的值.
2) OM[3:2]用于决定测试模式,当OM[1:0]是11的时候.
锁相环
在时钟产生器中的MPLL,作为一个电路,作用是在频率与相伴上同步输出信号与一个参考输入信号.
时钟控制逻辑
时钟控制逻辑决定使用的信号源,PLL时钟或外部时钟. 当PLL配置成一个新的频率时,时钟控制逻辑中止FCLK的使用,直到使用PLL锁时间的PLL的输出稳定后. 这种时钟控制逻辑在通电重启或从节电模式中醒来都起作用.
通电重启(XTIpll)
在普通模式中变换PLL的设置
USB时钟控制
FCLK, HCLK, PCLK
FCLK 用于ARM920T
HCLK 用于AHB总线,AHB总线被ARM920T用于,内存控制器,中断控制器,LCD控制器,DMA和USB host block.
PCLK 用于APB总线,APB总线是用于周边设备的,如是WDT,IIS, I2C, PWM 计数器, MMC接口, ADC, UART, GPIO, RTC 和SPI
注意:
1) CLKDIVN必须小心设置,不要超过HCLK和PCLK的允许范围.
2) 如果HDIVN不是0,CPU总线模式必须从快速总线模式转换到异步总线模式,通过使用下面的指令来达到.(S3C2440不支持同步总线模式)
MMU_SetAsyncBusMode
mrc p15, 0, r0, c1, c0, 0
orr r0, r0, #R1_nF:OR:R1_iA
mcr p15, 0, r0, c1, c0, 0
如果HDIVN不是0, 并且CPU总线模式是快速总线模式,那么CPU将会在HCLK下工作.这种特性可以用来在不影响HCLK和PCLK的情况下改变CPU频率成原来的一半或更多.
电源管理
在S3C2440A中,电源管理模块通过软件来控制系统时钟以达到减少电源功耗的功能.这些主题跟PLL,时钟控制逻辑(FCLK,HCLK,PCLK)和唤醒信号有关.
S3C2440A有四种电源模式.下面的部分描述各种模式.各种模式之间的转换并不是随意的.
FCLK的值如何得到?
FCLK= Fout = 2 * m * Fin / (p*2^s), Fvco = 2 * m * Fin / p where : m=MDIV+8, p=PDIV+2, s=SDIV
MPLLVal [M:7fh,P:2h,S:1h] bootloader打印出来的信息.
code
mov r1, #0x4c000000
ldr r2, =0x7f021
str r2, [r1, #0x04]
与BOOTLOADER里打印出来的一样.
^ 代表幂
So, FCLK =2* (127+8)*12M/4*2=405M
关于HCLK, PCLK的值,取决于CLKDIVN的值.
代码如下:
mov r1, #0x4c000000
ldr r2, 0x5
str r2, [r1, #0x14]
所以CLKDIVN=5, HDIVN=10, PDIVN=1, 再看CAMDIVN
10: HCLK = FCLK/4 when CAMDIVN[9]=0
HCLK = FCLK/8 when CAMDIVN[9]=1
PCLK = HCLK /2
CAMDIVN代码中没有进行设置,就用初始值.0
故
HCLK = FCLK/4
PCLK = FCLK/8
至此, clock部分设置结束.Power-On Reset (XTIpll)
Figure 7-4 shows the clock behavior during the power-on resetsequence. The crystal oscillator begins oscillation within several milliseconds. When nRESET is released after the stabilization of OSC (XTIpll) clock, the PLL starts to operate according to thedefault PLL configuration. However, PLL is commonly known to be unstable after power-on reset, so Fin is fed directly to FCLK instead of the Mpll (PLL output) before the software newly configures the PLLCON. Even if the user does not want to change the default value of PLLCON register after reset, the user shouldwrite the same value into PLLCON register by software.
The PLL restarts the lockup sequence toward the new frequency only after the software configures the PLL with a new frequency. FCLK can be configured as PLL output (Mpll) immediately after locktime.@ step1: set P M S divider control
mov r1, #CLK_CTL_BASE
ldr r2, =vMPLLCON_200
str r2, [r1, #oMPLLCON]@ step2: change clock divider
mov r1, #CLK_CTL_BASE
mov r2, #vCLKDIVN
str r2, [r1, #oCLKDIVN]If HDIVN = 1, the CPU bus mode has to be changed from the fast bus mode to the asynchronous bus mode using following instructions.
MMU_SetAsyncBusMode
mrc p15,0,r0,c1,c0,0
orr r0,r0,#R1_nF:OR:R1_iA
mcr p15,0,r0,c1,c0,0
If HDIVN=1 and the CPU bus mode is the fast bus mode, the CPU will operate by the HCLK. This feature can be used to change the CPU frequency as a half without affecting the HCLK and PCLK.@ FCLK:HCLK=1:2
.macro MMU_SetAsyncBusMode
mrc p15, 0, r0, c1, c0, 0
orr r0, r0, #(R1_iA | R1_nF)
mcr p15, 0, r0, c1, c0, 0
.endm
@ step3: set asynchronous bus mode
MMU_SetAsyncBusMode@ step4: stay locktime
mov r1, #CLK_CTL_BASE
ldr r2, =vLOCKTIME
str r2, [r1, #oLOCKTIME]UBRDIV0 = ((int)(PCLK/16./UART_BAUD_RATE) -1);
- 关于时钟频率的设置
- 关于时钟频率的设置 .
- 关于arm时钟频率的设置及编程
- 关于ADC0809的500kHz时钟频率
- 关于在u-boot汇编中设置与初始化时钟频率的解析
- OMAP4平台设置时钟频率
- CPU的时钟频率
- S3C6410的时钟频率
- S3C6410的时钟频率
- uboot中串口时钟频率及波特率的设置
- 关于时钟频率和带宽
- 关于STM32F4的AHB和APB时钟频率的问题
- 关于虚拟机中cpu时钟频率的问题
- 关于TCC89XX的时钟频率(参考Spec译文)
- 分享关于stm32f407定时器时钟频率的问题
- 关于系统时钟的设置
- mini2440 时钟频率的配置
- STM32F407的定时器时钟频率
- VBS菜鸟实战
- Mathematicians and brackets
- 在vc2008中给程序添加需要管理员权限运行的弹出窗口
- Shader学习心得
- 编写线程安全的代码
- 关于时钟频率的设置
- mysql 导入数据时max_allowed_packet超出的问题
- Android学习笔记之Android安装问题
- 牛顿/拉复生法求平方根
- java 设计模式学习笔记(12) - 观察者模式
- Vertex Shader 结构
- 人生,谁又懂得多少
- Java Web中如何访问WEB-INF下的XML文件
- 宏定义中的关系运算