s3c2410 时钟频率

PLL

PLL(Phase Locked Loop): 为锁相回路或锁相环,用来统一整合时脉讯号,使内存能正确的存取资料。PLL用于振荡器中的反馈技术。
  锁相环是一种反馈电路,其作用是使得电路上的时钟和某一外部时钟的相位同步。PLL通过比较外部信号的相位和由压控晶振(VCXO)的相位来实现同步的,在比较的过程中,锁相环电路会不断根据外部信号的相位来调整本地晶振的时钟相位,直到两个信号的相位同步。
  在数据采集系统中,锁相环是一种非常有用的同步技术,因为通过锁相环,可以使得不同的数据采集 板卡共享同一个采样时钟。因此,所有板卡上各自的本地80MHz和20MHz时基的相位都是同步的,从而采样时钟也是同步的。因为每块板卡的采样时钟都是 同步的,所以都能严格地在同一时刻进行数据采集。
  通过锁相环同步多块板卡的采样时钟所需要的编程技术会根据您所使用的硬件板卡的不同而不同。对 于基于PCI总线的产品(M系列数据采集卡,PCI数字化仪等),所有的同步都是通过RTSI总线上的时钟和触发线来实现的;这时,其中一块版板卡会作为 主卡并且输出其内部时钟,通过RTSI线,其他从板卡就可以获得这个用于同步的时钟信号,对于基于PXI总线的产品,则通过将所有板卡的时钟于PXI内置 的10MHz背板时钟同步来实现锁相环同步的。

 

http://www.altera.com.cn/support/devices/pll_clock/basics/pll-basics.html
  ---------------------------------------------------------------------------------------------
  PLL在电子电路中的应用
  PLL即锁相环,基本原理图是:
  输入信号-> 鉴相器 -> 低通滤波器 -> 压控振荡器-> 输出信号
  ^|_____________________ |
  鉴相器有两个输入,分别是输入信号和压控振荡器的输出信号,在二者相位差和频
  率差不是很大的情况下,鉴相器的输出与两输入信号之差成正比,鉴相器的输出为模
  拟信号,其通过低通滤波器虑除高频杂波,后进入压控振荡器,压控振荡器的输出频
  率随其输入电压的改变而改变。
  从原理图上看,PLL实际上是一负反馈系统,只要输入信号在正常范围内,输出信号
  在“一定时间内”都能跟上。输入信号发生变化后,输出信号跟踪输入信号的过程称之
  为捕获;输出信号跟踪完毕时称之为锁定;输入信号变化过快导致输出信号无法跟踪
  时称为失锁。
  通过PLL可以方便实现N倍频,原理如下:
  输入信号-> 鉴相器 -> 低通滤波器 -> 压控振荡器-> 输出信号
  ^|______N分频器______________|
  此外,可以实现小数倍频,原理如下:
  输入信号-> 鉴相器 -> 低通滤波器 -> 压控振荡器-> 输出信号
  ^|________N分频器/N+1分频_________|

 | |
  |------ 模式控制 ――---------> |
  模式控制模块可以选择分频器处于N分频器还是N+1分频,若通过模式控制模块实现
  10个clk中有9个clk为N分频,1个clk为N+1分频,则实际输出信号频率为(N+0.1)×
  输入频率。
  PLL电路本质是模拟电路,与ARM内核的数字电路截然不同,故在CPU中处于独立地
  位,另外很多CPU的PLL供电为单独供电,且对PLL供电质量要求较高。
  http://www.qingyangos.org/maillist/msg00025.html

其中pll 包含两种: MPLL 主要应用于各种设备时钟的提供,将重点讨论
UPLL 应用于USB时钟频率应用,为48M

其中MPLL的设置主要依靠使用各种锁相环和分频器来改变输入原始的频率,经过锁相环之后可以提升频率,关于频率的选择主要依靠改变CPU寄存器实现,MPLLCON通过改变其中的参数设置即可
Mpll = (m * Fin) / (p * 2s)
m = (MDIV + 8), p = (PDIV + 2), s = SDIV
MPLL就是要得到的频率,我建议用参考手册给定的频率设置即可,标准之际。
接下来该设置各种设备的频率:

我所认为的MPLL分出三种模式:FCLK、HCLK、PCLK

这三种也应用于不同的场合,FCLK应用于CPU的时钟,HCLK用于AHB bus各种外围设备,PCLK 用于APB bus各种接口设备。
其中FCLK 应用就是MPLL的频率,一样的,不用设置的。
HCLK 可以设置为FCLK或FCLK/2 ,即通过设置相应得寄存器CLKDIVN中的对应位HDIVN即可,其中HDIVN为0时对应FCLK,为1时对应FCLK/2
PCLK可以设置为HCLK或HCLK/2 ,即通过设置相应得寄存器CLKDIVN中的对应位PDIVN即可,其中PDIVN为0时对应HCLK,为1时对应HCLK/2

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.
以上这段文字也是讲关于写协处理器来控制协调内部总线和外部总线的关系,不过原文有点不太明白,又不敢把错的意思表达出来,贻害众生,只好原文照搬后谈点 看法,我感觉是当HCLK中设置为FCLK/2 时必须协调与内部总线关系,至于同步非同步还要通过协处理器来管理,这样就可以很好的协调各种总线的关系了,当出现HDIVN=1和CPU总线被设为快速 非同步模式时,CPU(我认为是总线频率)可以完全依靠HCLK提供频率,因此将会改变CPU频率时不会影响到其它的变化。

今天看数据手册时有发现了几点没有发现的东西,主要是关于协处理器的。
ARM920T 竟然有两种输入时钟方式,FCLK 和BCLK ,其中BCLK 主要提供给AMBA

Bus的,可也可以通过选择协处理器的R1的NF,iA位来选择是否供是时钟给核ARM920T


3, FCLK是核心频率, 是用ARM920T;
4, HCLK: 管理中断控制器, 内存控制器, LCD(你的液晶屏)控制器, DMA(直接内存访问)控制器, 和大家津津乐道的USB Host控制器;
(类似PC机的北桥芯片)
5, PCLK: 周边总线的频率(类似PC机的南桥芯片);
6, FCLK(核心频率)不变的情况下, 可以使 FCLK:HCLK:PCLK 在 1:1:1(默认) -> 1:8:16 之间获得多档频率, 而FCLK始终不变, 这点很重要


2410内部有三个时钟:FCLK、HCLK、PCLK,分别供CPU、AHB总线和

APB总线使用,为了降低功耗,一般都选择周期比为1:2:4的合理配置。 同时将PLL配置为运行环境时钟,一般都达到最高202M。


FCLK是供给CPU的 是主频

HCLK是供给AHB总线(主要用于高性能模块(如CPU、DMA和DSP等)之间的连接,作为SoC的片上系统总线)上的外围设备
PCLK是供给APB总线(APB主要用于低带宽的周边外设之间的连接,例如UART、1284等)上的外围设备
UCLK是两路PLL中一路供给USB的频率

FCLK, HCLK, and PCLK
FCLK is used by ARM920T.
HCLK is used for AHB bus, which is used by the ARM920T, the memory controller, the interrupt controller, the
LCD controller, the DMA and the USB host block.
PCLK is used for APB bus, which is used by the peripherals such as WDT, IIS, I2C, PWM timer, MMC interface,
ADC, UART, GPIO, RTC and SPI.
The S3C2410X supports selection of Dividing Ratio between FCLK, HLCK and PCLK. This ratio is determined by
HDIVN and PDIVN of CLKDIVN control register.
HDIVN PDIVN FCLK HCLK PCLK Divide Ratio
0 0 FCLK FCLK FCLK 1 : 1 : 1
(Default)
0 1 FCLK FCLK FCLK / 2 1 : 1 : 2
1 0 FCLK FCLK / 2 FCLK / 2 1 : 2 : 2
1 1 FCLK FCLK / 2 FCLK / 4 1 : 2 : 4
(recommended)

文章说明:calmarrow(lqm)原创,参考thisway.diy的《S3C2410完全开发》

文章引自:http://piaoxiang.cublog.cn


   clock部分比较容易,现在按照datasheet的思路梳理一下。

 
一、对clock的基本认识
 
       第七部分是“clock & power management”,总结如下:
 
       1 s3c2410的clock & power management模块包含三个部分:clock control、usb control、power control。现在的关注点是clock control。
 
       2、s3c2410有两个pll(phase locked loop,锁相环,在高频中学过,可以实现倍频,s3c2410的高频就是由此电路产生的)。其中一个是MPLL,M即为main,用来产生三种时钟信 号:Fclk(给CPU核供给时钟信号,我们所说的s3c2410的cpu主频为200MHz,就是指的这个时钟信号,相应的,1/Fclk即为cpu时 钟周期)、Hclk(为AHB bus peripherals供给时钟信号,AHB为advanced high-performance bus)、Pclk(为APB bus peripherals供给时钟信号,APB为advanced peripherals bus)。在这里,需要了解一下AMBA system architecture了。这个可以到官方网站 www.arm.com下载相关资料。简单的说,AMBA是一种协议,这种协议已经称为片上组织通信的事实上的标准(the de facto standard for on-chip fabric communication)。下面给出英文描述:
 
       The AMBA protocol is an open standard, on-chip bus specification that details a stategy for the interconnection and management of functional blocks that makes up a system-on-chip(SoC).It facilitates "right-first-time" development of embedded processors with one or more CPU/signal processors and multiple peripherals. The AMBA protocol enhances a resuable design methodology by defining a common backbone for SoC modules.
 
       需要知道的是,AMBA总线是ARM提出的一种解决方案,它并非唯一的规范,但是因为ARM的广泛使用,AMBA总线也就成为了事实上的规范了。现在 AMBA总线最新为AMBA 3 specification版本,包括AMBA 3 AXI Interface、AMBA 3 AHB Interface、AMBA 3 APB Interface、AMBA 3 ATB Interface。而s3c2410还只能支持AMBA 2 specification,这个版本包含AMBA 2 AHB Interface、AMBA 2 APB Interface。也就是在s3c2410的框图中看到的两种总线接口。需要注意的是,这两种总线所连的外设是有区别的。AHB总线连接高速外设,低速 外设则通过APB总线互连。显然,对不同总线上的外设,应该使用不同的时钟信号,AHB总线对应Hclk,APB总线对应Pclk。那么事先就应该弄清 楚,每条总线对应的外设有那些,这样在设置好时钟信号后,对应外设的初始化的值就要依此而确定了。
 
       AHB bus上的外设有LCD controller(CONT代表controller,控制器)、USB Host CONT、ExtMaster、Nand CONT和nand flash boot loader、bus CONT、interrupt CONT、power management、memory CONT(sram/nor/sdram等)。
 
       APB bus上的外设有UART、USB device、SDI/MMC、Watch Dog Timer、bus CONT、spi、iic、iis、gpio、rtc、adc、timer/pwm。
 
       3、主时钟源来自外部晶振或者外部时钟。复位后,MPLL虽然默认启动,但是如果不向MPLLCON中写入value,那么外部晶振直接作为系统时钟。 EDUKIT-III的外部晶振有两个,一是用于系统时钟,为12MHz;一个用于RTC,为32.768KHz。以前实验没有向MPLLCON写入数 值,所以系统时钟都是12MHz。从这里也可以发现一个问题,如果外部晶振开始没有焊上,那么系统是无法正常启动的。因为按照上述规则,复位后还没有写入 MPLLCON,这时又没有可以使用的时钟源,所以不会启动。也就是硬件完成后,这个12MHz的晶振是一定要焊上的,才能进行后续的硬件测试工作。
 
二、clock设置的步骤
 
       首先应该读懂下一段:
 

Power-On Reset (XTIpll)
Figure 7-4 shows the clock behavior during the power-on reset sequence. 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 the default 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 should write 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 lock time.

 
       这个主要是基于PLL的特点。简单的描述就是,上电复位后,几个ms后晶振起振。当OSC时钟信号稳定之后,nRESET电平拉高(这是硬件自动检测过 程)。这个时候,PLL开始按照默认的PLL配置开始工作,但是特殊性就在于PLL在上电复位后开始是不稳定的,所以s3c2410设计为把Fin在上电 复位后直接作为Fclk,这是MPLL是不起作用的。如果要想是MPLL起作用,那么方法就是写入MPLLCON寄存器值,然后等待LOCKTIME时间 后,新的Fclk开始工作。下面把这些步骤分来来描述,软件步骤部分结合程序进行。
 
       1、上电几个ms后,晶振输出稳定。Fclk=晶振频率。nRESET恢复高电平后,cpu开始执行指令,这完全是硬件动作,不需要软件设置。
 
       2、第一步软件工作: 设置P M S divider control,也就是设置MPLLCON寄存器。
 
       关于PMS,可以看Figure 7-2.寄存器MPLLCON的设置呢,其实有一定的规则,并非你想要的每个Fclk频率都可以得到。官方推荐了一个表PLL VALUE SELECTION TABLE,要按照这个进行。否则的话,就需要自己按照公式推算,但是mizi公司并不保证你的设置是合适的。所以,如果想要工作在200MHz,还是按 照vivi的推荐值即可。
 

@ step1: set P M S divider control
        mov r1, #CLK_CTL_BASE
        ldr r2, =vMPLLCON_200
        str r2, [r1, #oMPLLCON]

 
       其中,MDIV=0x5c,PDIV=0x04,SDIV=0x00.公式Mpll(Fclk)=(m×Fin)/(p×(2^s))【m=MDIV+8, p=PDIV+2,s=SDIV】
 
       3、第二步软件工作: 设置CLKDIVN。
       这一步是设置分频系数,即Fclk为cpu主频,Hclk由Fclk分频得到,Pclk由Hclk分频得到。假设Hclk是Fclk的二分频,Pclk是 Hclk的二分频,那么分频系数比就是Fclk:Hclk:Pclk=1:2:4.那么Hclk为100MHz,总线时钟周期为10ns。Pclk为 50MHz。

@ step2: change clock divider
        mov r1, #CLK_CTL_BASE
        mov r2, #vCLKDIVN
        str r2, [r1, #oCLKDIVN

       4、第三步软件工作: CLKDIVN的补充设置

If HDIVN = 1, the CPU bus mode has to be changed from the fast bus mode to the asynchronous bus mode usingfollowing 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=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

       5、第四步软件工作:等待locktime时间,让新的Fclk生效

@ step4: stay locktime
        mov r1, #CLK_CTL_BASE
        ldr r2, =vLOCKTIME
        str r2, [r1, #oLOCKTIME

 
       6、对外设的影响
 
       在这个实验中,主要是有两个需要改变,一个外设是UART,一个外设是SDRAM。
       (1)UART,它是接在APB总线上,所以对应的时钟信号为Pclk,现在为50MHz。如果想要设置波特率为115200bps,那么根据公式 UBRDIV0=(int)(PCLK/(bps*16))-1计算,应该为26。如果放到程序中,那么应该注意形式。具体如下:
 

UBRDIV0 = ((int)(PCLK/16./UART_BAUD_RATE) -1);

 
       (2)SDRAM,主要的影响因素为刷新频率。前面在SDRAM中没有具体分析,现在可以详细说明。使用了两片HY57V561620CT-H,查看手册 其刷新频率为8192 refresh cycles/64ms,所以刷新周期64ms/8192=7.8125us。看寄存器REFRESH的各个位的设置情况:
 
       ·REFEN[23]:开启自动模式,设为1
       ·TREFMD[22]:设为Auto refresh模式,设为0
       ·Trp[21:20]:看看RAS precharge Time,查看SDRAM手册,发现-H系列此参数至少为20ns,现在Hclk对应的时钟周期为10ns,所以至少应该为2个clock。可以设为00
       ·Tsrc: Semi Row Cycle Time,也就是RAS Cycle Time,至少65ms,所以至少得6.5clock,按照可选值,应该设置为11
       ·Refresh[10:0]:
       公式refresh period = (2^11 - refresh_count +1)/Hclk,由此推导出refresh_count=2^11+1-refresh period*Hclk。带入数值,计算得出1268=0x04f4,这个数值要用四舍五入,减少误差。
       ·其余的保留值,均设置为0
       由此得出该寄存器的值应该为0x008c04f4。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值