历史上的今天
返回首页

历史上的今天

今天是:2025年03月16日(星期日)

正在发生

2020年03月16日 | S3C2440时钟体系结构与编程

2020-03-16 来源:eefocus

如果cpu是计算机的大脑,电流是计算机的血液,那么时钟则是计算机的心脏,时钟频率决定了处理器运算的快慢,它的每一次“跳动”都驱动着处理器不停的执行命令。不同的是,人的各个部位心率是一样的,但计算机却有多个频率,而且每个部位可能有不同的频率,比如“大脑”有一个频率,“手“有一个频率,“脚”使用的是另外一个频率,这样就产生了两个问题:怎么产生这些不同的频率?处理器怎么与自己不同频率的外设实现交互?


怎么产生这些不同的频率?

为了获取稳定的时钟,我们一般使用外部晶振来提供,晶振是由石英和震荡电路组成的,石英能够提供稳定的频率。一般一个计算机系统最少需要一个晶振,有些特殊的外设也会有自己特有的晶振,比如网卡,显卡等,但是对于大多数连接cup的外设来说是没有自己的晶振的,那么就需要cpu给他们提供时钟,然而不同的外设需要的时钟不一样,cpu是怎么给这些外设提供不同的时钟呢?


S3C2440处理器主要给外设提供了两种连接总线,AHB总线(Advanced high Performance Bus)和APB总线,这两种总线的时钟在没有初始化之前是一样的,频率等于外部晶振提供的频率,在初始化以后,它们就可以为外设提供不同的时钟了。


AHP和APB总线的内容将放到后面章节作为补充知识了解。由于这两种总线初始化以后,时钟是不一样的,所以连接的外设也不一样,如下图,一些工作频率较高的外设挂接在AHB总线上,比如内存,nandflash,LCD控制器等,而工作频率比较低的外设则挂接在APB总线上,比如UART串口,Watchdog,GPIO,USB等(注意:这里使用挂接,是因为这些设备是可以拔除的,而不影响其他外设的工作)。

我们这里先不管这些外设是怎么和总线连接的,但是先了解一点:连接在同一个总线上的外设,获取到的时钟是一样的。

上面这张图是s3c2440的时钟生成图,看上去挺复杂的,其实并不是那么回事,只要了解图中红色框框的部分就可以了,但是如果要编写UBS驱动或者摄像头驱动,则会涉及到图中灰绿色的部分。这里对USB和cam部分就不细讲了。


图中红色框表示的是主时钟的产生过程,灰绿色的框表示USB时钟的产生过程,红色线条表示输出HCLK,绿色线条表示PCLK,黄色线条表示FCLK。


uboot启动的时候,需要设置时钟分频,分频的目的就是产生三种时钟:PCLK、FCLK和HCLK,PCLK供APB总线使用,HCLK供AHB总线使用,FCLK则供cpu使用,而且从datasheet的电气参数那一章可以查到FCLK,HCLK和PCLK的最大值分别是400MHz,100MHz和50MHz。下面就依照图中的步骤来分析,这三种时钟是怎么产生的。下图是对上面这张图的简概:

1.时钟源


为了减少外界环境对开发板的电磁干扰,降低制作成本,通常开发板的外部晶振时钟频率都是很低的。从图中第一个红框可以看出,cpu可以连接两种外部时钟源,一种是振荡时钟源,一种是时钟信号,前者就是石英晶体振荡电路,后者是其他振荡器产生的时钟信号,比如信号发生器产生的时钟信号,虽然两者都是特定频率的正弦波形,但是在cpu的接线方式上是有不同的。

从这张表中可以看出,s3c2440可以连接两个时钟源,一个是主时钟源,一个是USB时钟源,如果主时钟源需要接晶振源,则OM3需要为0,也就是要接地(这里暂时不讨论ubs时钟),同理,如果UBS时钟源需要接晶振源,则OM2要接地。从电路图中可以看到,OM2和OM3都接地,而且XTIpll引脚和XTOpll引脚接的是外部12M晶振,所以这里开发板的时钟源是12M的外部晶振。(USB的时钟源这里不讨论)


需要注意的是,晶振提供的时钟,只有在上电以后才开始起振的,而外部提供的信号时钟是板子没有上电的时候就已经在振荡了,所以对晶振时钟源需要作一个特殊的处理——变频锁定。


2.变频锁定


开发板刚上电的时候,晶振OSC开始提供晶振时钟,由于系统刚刚上电,电压信号等都还不稳定,这时复位信号(nRESET)拉低,那么外部晶振则直接作为系统时钟FCLK,这时的FCLK是不规则的,为了让cpu使用规则的时钟频率,需要将clock disable一小段时间,这个时间就是图中的Lock Time,在这段时间里面,电压会慢慢稳定,时钟频率也会调整到一个新的稳定状态(VCO is adapted to new clock frequency),而且这段时间里面,FCLK是为0的,也就是说cpu是不会运行的,当这个Lock Time结束以后,FCLK就会获得一个新的频率(FCLK is new frequency)。注意这个时候的FCLK频率就是晶振提供的频率,他们的大小是一样的,当经过倍频以后,这个值将数倍的变化。

下面是变频锁定时间的设定寄存器:0~15位是设置主时钟源锁定时间的,后15位是设置USB锁频时间的,这里不考虑,值得注意的是对应的锁频时间可以从datasheet的电气数据表中查到(PLL Lock Time)。


3.倍频设置(锁相环)


当cpu能够获取到稳定的时钟时,就需要对时钟进行倍频了,现在知道外部晶振输入的时钟时12M,那怎样把这个时钟提高到100MHz,甚至是400MHz呢?这就涉及到了时钟生成图的第二个红框框了(注意框框上面的S,P,M字样),这个叫锁相环(PLL),主频的倍频操作是由MPLL来设置的,而USB的倍频操作是由UPLL来设置的,UPLL暂时不讨论。所以要让外部时钟经过变化,扩大到400M,就需要对MPLLCON寄存器进行设置。

从上图可以看出,不管是MLLCON或者UPLLCON,都由三个部分组成,主分频、预分频、后分频控制位,这些分频数值决定了12M进去的频率,将会输出多大频率,下面这张表是手册的推荐设置:比如我们要将12M是时钟频率倍频成405M,则需要MDIV=0x7f,PDIV=0x2,SDIV=1,注意49M和96M是给USB的UPPLCON设置的。

当然也可以不参考这个表格,使用计算公式:

4.设置比例(分频器)


设置完PLL寄存器以后,当稳定的时钟通过锁相环则会输出更大倍数的频率,而这个更大倍数的频率则是FCLK,现在这个值则是400MHz,而不是12MHz了,现在我们得到了想要的FCLK,那怎么得到PCLK和HCLK呢?下面就涉及到分频器的设置。

怎么设置HDIVN和PCIVN的数值,主要查找下面的表:

比如我们要将HCLK设置为100,PCLK设置为50,那么HCLK=FCLK/4,PCLK=FCLK/8,查表可知为1:4:8,所以HDIVN=0x2,PDIVN=0x1, dvin_UPLL是UBS的时钟,这里不讨论。


但是根据datasheet说明,当HDIV设置为非0的时候,cpu总线模式要进行改变,默认情况下FCLK=HCLK,cpu工作在fast bus mode快速总线模式下,HDIV设置为非0后,FCLK和HCLK不再相等,要将cpu改为异步总线模式,需要使用对应的代码进行设置。

所以上面三步的代码可总结如下:


所以S3C2440的时钟设置总结如下:


/* 设置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

*/


推荐阅读

史海拾趣

Colibrys SA公司的发展小趣事

随着市场的不断扩大和客户需求的多样化,Colibrys逐渐发展成为一站式制造商。公司提供从设计到制造以及最终测试的完整供应链服务,确保客户能够安全、高效地采购到一流性能的MEMS产品。这种服务模式不仅提高了公司的市场竞争力,也赢得了客户的广泛认可和信赖。

General Instrument Corp公司的发展小趣事
通常为0至5V(单电源供电),支持比例量测量或可选的外部电压参考。
FUJI公司的发展小趣事
相比ADC0831、ADC0832等早期产品,ML2281系列在转换速度、电源抑制比(PSRR)、共模抑制比(CMRR)等方面有显著提升。
Eurohm Resistors公司的发展小趣事

在电子行业的早期,Eurohm Resistors公司就以其独特的技术创新能力崭露头角。公司创始人敏锐地察觉到了半导体技术在电子行业中的重要地位,于是投入大量资源研发高精度、高稳定性的电阻器。通过不断的技术迭代和创新,Eurohm Resistors成功推出了一系列性能卓越的电阻器产品,赢得了市场的广泛认可。

Hitachi Chemical Co America Ltd公司的发展小趣事

在全球化的浪潮下,Eurohm Resistors公司积极拓展海外市场。公司深入分析了全球电子行业的发展趋势和市场需求,制定了详细的市场拓展计划。通过与当地合作伙伴的紧密合作,Eurohm Resistors成功打入了多个国家和地区的市场,实现了全球化布局。

Foxconn_Optical_Interconnect_Technologies__Inc.公司的发展小趣事

面对数字化浪潮的冲击,Eurohm Resistors公司积极拥抱数字化转型。公司建立了完善的数字化管理系统,实现了生产、销售、服务等各个环节的数字化管理。通过数据分析和智能化决策,公司能够更准确地把握市场变化和客户需求,提高运营效率和市场竞争力。

问答坊 | AI 解惑

电路图

1000W功放电路图…

查看全部问答>

TFT液晶屏驱动程序

TFT液晶屏驱动程序…

查看全部问答>

女生学嵌入式怎么样??希望有经验人士给点建议

我本科专业电子信息,考研准备考这个方向,专业名叫电路与系统,方向有嵌入式,估计算是硬件方面吧,我想问问女生学这个就业怎么样啊??工作环境呢?待遇呢??谢谢啦哦~~~我是初级者,积分少见谅哦,呜呜本想增加点分数,结果点错了~~见谅哦~~…

查看全部问答>

arm开发板,VFS无法加载问题

k9-Boot 1.0 (Mar 17 2007 - 10:40:26) Copy k9-Uboot.bin from 0x10020000 to 0x20F00000... Enter k9-Uboot Boot Begin from 0x20F00000... U-Boot 1.0.0 (Mar 17 2007 - 11:22:29) U-Boot code: 20F00000 -> 20F13684  BSS ...…

查看全部问答>

笔记本没有串口(九针),开发板只支持9针串口,怎么办?

刚刚买了个学习板,51的,还有条串口线,两边都是9针的,现在的问题是,我的笔记本T41没有相应的接口,只有USB和15针的接口。 我是新手,大虾们救命啊。…

查看全部问答>

SIMCOM SIM100-E 发送MMS问题

    是这样的,我现在要用我的SIM100-E GPRS/GSM模块来发送彩信,但是它不直接支持彩信的发送,不过支持TCP/UDP协议,我以前没弄过这块,想尽快得到方案,请问大家,我的这个模块可以实现彩信的发送吗?? 大体给我建议一下,让我有个方 ...…

查看全部问答>

高分求无线网络数据传输问题

无线网络数据传输是否一定要有IP地址? 大家好: 我想问一下,如果俩个带有无线网卡的笔记本之间在802。11协议下进行数据传输,是否一定要有IP地址呢? 我想把一台当作服务器,另一台当作客户端,如果不设IP地址,我想把数据传到另一台电脑上 ...…

查看全部问答>

wince, windows mobile, ppc, smartphone 等等一系列的疑惑???

刚入门,对这些东西之间的区别不是很明了. Windows Mobile搭建于WinCE之上 ,而Pocket PC和Smartphone是Windows Mobile的两个不同版本. 这个对不? 另外,WinCE最新版本是不是6.0? Windows Mobile的最新版本是不是5.0? WinCE5.0版本上搭建起来 ...…

查看全部问答>

求crc算法程序!

那位大哥可以提供一份,c语言的crc16算法,小弟先行谢过拉!!(我用的是2812).最好是效率高一点的!…

查看全部问答>

讨论一下为什么还有这么多人使用8051

讨论一下为什么还有这么多人使用8051?大家发表一下自己的看法。 [ 本帖最后由 zhaojun_xf 于 2011-5-5 08:32 编辑 ]…

查看全部问答>