S3C2440 clock研究

本文详细介绍了嵌入式系统中的时钟产生机制及控制逻辑,包括PLL锁相环的工作原理及其配置方法,以及如何通过软件控制实现时钟频率的调整。

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

深入浅出嵌入式底层软件


关于 阿里云盘CLI。仿 Linux shell 文件处理命令的阿里云盘命令行客户端,支持JavaScript插件,支持同步备份功能,支持相册批量下载。 特色 多平台支持, 支持 Windows, macOS, linux(x86/x64/arm), android, iOS 等 阿里云盘多用户支持 支持备份盘,资源库无缝切换 下载网盘内文件, 支持多个文件或目录下载, 支持断点续传和单文件并行下载。支持软链接(符号链接)文件。 上传本地文件, 支持多个文件或目录上传,支持排除指定文件夹/文件(正则表达式)功能。支持软链接(符号链接)文件。 同步备份功能支持备份本地文件到云盘,备份云盘文件到本地,双向同步备份保持本地文件和网盘文件同步。常用于嵌入式或者NAS等设备,支持docker镜像部署。 命令和文件路径输入支持Tab键自动补全,路径支持通配符匹配模式 支持JavaScript插件,你可以按照自己的需要定制上传/下载中关键步骤的行为,最大程度满足自己的个性化需求 支持共享相册的相关操作,支持批量下载相册所有普通照片、实况照片文件到本地 支持多用户联合下载功能,对下载速度有极致追求的用户可以尝试使用该选项。详情请查看文档多用户联合下载 如果大家有打算开通阿里云盘VIP会员,可以使用阿里云盘APP扫描下面的优惠推荐码进行开通。 注意:您需要开通【三方应用权益包】,这样使用本程序下载才能加速,否则下载无法提速。 Windows不第二步打开aliyunpan命令行程序,任何云盘命令都有类似如下日志输出 如何登出和下线客户端 阿里云盘单账户最多只允许同时登录 10 台设备 当出现这个提示:你账号已超出最大登录设备数量,请先下线一台设备,然后重启本应用,才可以继续使用 说明你的账号登录客户端已经超过数量,你需要先登出其他客户端才能继续使用,如下所示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值