S3C2440 clock研究


Clock研究

关键字

PLL 锁相环,用于产生高频率时钟,有两种锁相环,MPLLUPLL

MPLL 用于对CPU产生高频率的锁相环

UPLL 用于对USB设备产生高频率的锁相环

XTIpll 外部晶振

EXTCLK 外部时钟

OSC 振荡器

FCLK CPU系统时钟

HCLK AHB高速总线时钟

PCLK APB外围设备总线时钟

 

  1. Clock框图

  1. 时钟的产生


如上图所示,可以通过设置CPU引脚OM[3:2]选择使用外部时钟EXTCLK或者由外部晶振XTIpll通过OSC产生时钟。

MPLL在复位开始的时候,MPLL输出(Mpll)并没有作为系统时钟,而是使用外部时钟或者外部晶振提供的时钟直接作为系统时钟。只有在MPLLCON寄存器中写入值之后才由MPLL的输出作为系统时钟

 

  1. 时钟控制逻辑


时钟控制逻辑决定使用PLL时钟(Mpll)还是直接使用外部时钟(XTpll或者EXTCLK)。

上图实际上包括了两个过程:上电复位和配置PLL

  • 上电复位

时钟控制逻辑如下:

晶振在若干毫秒内开始震荡(第三行)

OSCXTIpll)时钟稳定后,此时的PLL按照默认配置运行,PLL输出不稳定,使用Fin作为FCLK(第六行)

释放nRESET信号,即nRESET上拉(第二行)

需要说明的是在nRESETCPU的一个引脚,它处于高位的时候,Fin才会向CPU输出频率,也就是说上图在nRESET上拉的时候,CPU才开始工作,如果nRESET处于低位4个时钟周期,并从低电平变为高电平的时候,将会引发CPU复位,在CPU复位的时候,将会有如下操作:

  1. 复制当前PCCPSR的值到R14_svcSPSR_svc

  2. 强制进入管理模式,职位CPSR中的IF位,清楚CPSR中的T

  3. 强制PC开始从0地址取值

  4. ARM状态下恢复执行

 

  • 配置PLL

不论是上电复位还是在普通模式下都可以改变PLL,其时钟控制过程也是相同的。

时钟控制逻辑禁止FCLK,时间长度是一个Lock Time,然后PLL便可以稳定输出(如上图第四行)

 

  1. 锁相环是如何得到高频率的


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

其中MpllMPLL的输出频率,mps是三个分频器的值,Fin是输入频率

 

  1. 分频

Clock框图中可以看出,FCLK是供给给Arm920T内核的时钟,HCLK是供给给内存控制器,Nand控制器,LCD控制器等的时钟,PCLK是供给给外部的低速设备控制器的时钟。Mpll输出的频率需要将FCLK分频,供给给HCLKPCLK,这是通过设置CLKDIVNCAMDIVN寄存器来实现的。除此之外,当FCLKHCLK相等的时候,CPU工作在fast bus mode快速总线模式下,当他们不相等的时候,需要将CPU设置为异步总线模式

 

 

  1. 从软件角度看时钟系统

时钟是计算机系统的硬件基础,所有的硬件都是工作在时钟信号之上的,随着高信号和低信号的交替变换,完成一步一步预定的操作。硬件和软件在逻辑上是等效的。从软件角度看,这不就是一个并行系统么?硬件部件可以看做是软件模块,只要有时钟存在,他们就会不停的运作,不论是CPU,内存,LCDUART还是DMA,他们都更随时钟的脚步,当然他们之间也需要有协调和同步的时候,但从逻辑上看,他们不就像是操作系统上不同的进程在运行么?CPU通过寄存器来控制和读取不同硬件的状态,设备通过中断向CPU发出请求,这不都是一种进程间通信的手段么?不同于单CPU操作系统上的多进程实际上是分时系统,这些硬件组成的是真正的并行系统

 

  1. 代码实现:

WTCON EQU 0x53000000 ; 看门狗控制寄存器

WTDAT EQU 0x53000004 ; 看门狗数据寄存器

LOCKTIME EQU 0x4c000000 ; 变频锁定时间寄存器

MPLLCON EQU 0x4c000004 ; MPLL寄存器

CLKDIVN EQU 0x4c000014 ; 分频比寄存器

 

AREA CLOCK, CODE, READONLY

ENTRY

start

ldr r0, = 0x53000000 ; 看门狗关闭代码

mov r1, #0

str r1, [r0]

 

;bl clock_init ; 调用时钟初始化函数

bl led_on ; 调用点亮Led函数

 

clock_init ; 时钟初始化代码

; 设置锁频时间

ldr r0, =LOCKTIME ; 取得LOCKTIME寄存器地址

ldr r1, =0x00ffffff ; LOCKTIME寄存器设置数据

str r1, [r0] ; LOCKTIME设置数据写入LOCKTIME寄存器

; 设置分频数

ldr r0, =CLKDIVN ; 取得CLKDIVN寄存器地址

mov r1, #0x05 ; CLKDIVN寄存器设置数据

str r1, [r0] ; CLKDIVN设置数据写入CLKDIVN寄存器

 

; 修改CPU总线模式

mrc p15, 0, r1, c1, c0, 0

orr r1, r1, #0xc0000000

mcr p15, 0, r1, c1, c0, 0

 

ldr r0, =MPLLCON

ldr r1, =0x5c011 ; MPLL is 400MHz

str r1, [r0]

mov pc, lr

 

参考

S3C2440全套中文手册.pdf

深入浅出嵌入式底层软件


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值