关于3C2440 FCLK, HCLK, PCLK的关系(转载)

ADS1.2 中关于时钟的C 代码

ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);

ChangeClockDivider(key, 12);   

1 FLCKHCLKPCLK 的关系

S3C2440 有三个时钟FLCK HCLKPCLK

s3c2440 官方手册上说P7-8 写到:

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 USB host block. 也就是总线时钟,包括USB 时钟。

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. IO 接口时钟,例如串口的时钟设置就是从PCLK 来的;

那么这三个时钟是什么关系呢?

这三个时钟通常设置为1:4:81:3:6 的分频关系,也就说如果主频FLCK400MHz ,按照1:4:8 的设置,那么HLCK100MHzPLCK50MHz

寄存器CLKDIVN 表明并设置了这三个时钟的关系

如果CLKDIVN 设置为0x5, 那么比例即为1:4:8 ,前提是CAMDIVN[9]0.

2 )输入时钟FIN 与主频FCLK 的关系

现代的CPU 基本上都使用了比主频低的多的时钟输入,在CPU 内部使用锁相环进行倍频。对于S3C2440 ,常用的输入时钟FIN 有两种:12MHz16.9344MHz ,那么CPU 是如何将FIN 倍频为FCLK 的呢?

S3C2440 使用了三个倍频因子MDIVPDIVSDIV 来设置将FIN 倍频为MPLL ,也就是FCLK

MPLL=(2*m*FIN)/(p*2^s) where m=(MDIV+8), p=(PDIV+2), s="SDIV"

寄存器MPLLCON 就是用来设置倍频因子的

理论上,你可以通过设置该寄存器来实现不同的频率,然而,由于实际存在的各种约束关系,设置一个适当的频率并不容易,手册上列出了一些常用频率的表格,

例如,假设输入时钟FIN=16.9344MMDIV=110, PDIV="3", SDIV="1"

利用上面的公式,FCLK=2*16.9344*(110+8)/((2+3)*2)=399.65

3 )关于USB 时钟

S3C2440 有两个锁相环,一个主锁相环MPLL 提供给FCLK 的,另外一个UPLL 是提供给USB 时钟(48MHz),MPLL 一样,UPLL 的产生也是通过UPLLCON 寄存器设置分频因子得到,计算公式稍有不同:

UPLL=(m*FIN)/(p*2^s) where m=(MDIV+8), p=(PDIV+2), s="SDIV", 同样,可以通过查表得到一个合适的值。

最后值得一提的是,在CLKDIVN 的第三位DIVN_UPLL 用来设置USB 时钟UCLKUPLL 的关系,如果UPLL 已经是48Mhz 了,那么这一位应该设置为0 ,表示1:1 的关系,否则是12 的关系

2410 的时钟和电源管理

概述

时钟和电源管理模块由 3 部分组成:时钟控制、 USB 控制、电源控制。

时钟控制部分产生 3 种时钟信号: CPU 用的 FCLK,AHB 总线用的 HCLK,APB 总线用的 PCLK 。有 2 个锁相环,一个用于 FCLK HCLK PCLK, 另一个用于 48MHz USB 时钟。可以通过不使能锁相环来达到慢速省电目的。

电源管理模块提供了 4 种模式: Normal 模式、 Slow 模式、 Idle 模式、 Power_Off 模式。

Normal Mode

该模式下如果所有外围设备都打开时电流消耗最大,允许用户通过软件关闭外围设备达到省电目的。

Slow Mode

不采用 PLL 的模式,能量消耗仅取决于外时钟的频率。由外部提供的时钟源作 FCLK

Idle Mode

关掉了给 cpu FCLK 时钟,但外围设备时钟仍存在,任何到 CPU 的中断请求可以将 cpu 唤醒。

Power_off Mode

这种模式关掉了内部供电,仅有给 wake_up 部分的供电还存在。可以通过外部中断或实时时钟中断可以唤醒。

功能描述

时钟结构:主时钟源来自外部晶振 XTlpll 或外部时钟 EXTCLK

时钟源选择:通过 OM[3: 2] 的高低电平选择,现在我们采用 00 OM[3 2] 的状态在 nRESET 的上升沿锁存。尽管 MPLL 在上电复位后就开始工作,但是 MPLL 输出不作为系统时钟,只有对 MPLLCON 写入适当的数值后才可以。即使用户不想改变 MPLLCON 的值,也要重新写一遍才能使其起作用。

时钟控制逻辑:时钟控制逻辑决定要使用的时钟源,当锁相环被设置为一个新的值时,时钟控制逻辑切断 FCLK 直到 PLL 输出稳定。时钟控制逻辑在上电复位或从 power_down 状态启动时使能。

上电复位:注意上电后必须通过设置 PLLCON 才能使 PLL 作用。

在正常操作状态下改变 PLL 设置:通过改变PMS的值来实现。

USB时钟控制:UCLK不起作用直到UPLL被设置。

FCLK、HCLK、PCLK:可以通过 HDIVN PDIVN CLKDIVN 来改变 3 种时钟的比率,推荐采用 1 2 4 的比率。在设置完 PMS 的值后,需要设置 CLKDIVN 寄存器,该寄存器设置的值在 PLL 锁定后生效,只需要 1.5 HCLK 即可完成比率的修改。

电源管理: 4 种模式及特点。

Power_Off 模式:外部中断 EINT[15:0] RTC alarm 中断可以从该模式 wakeup.

进入 PowerOff 模式的流程: 1 。将 GPIO 端口设置为适当的状态; 2 。……… .

VDDi VDDiarm 的控制:在 PowerOff 模式,仅 VDDi VDDiarm 通过 PWREN 管脚控制被关闭。如果 PWREN 为高, VDDi VDDiarm 被外部电源提供,如果为低则关闭。 尽管 VDDi VDDiarm VDDi_MPLL VDDi_UPLL 可能被关闭,其他电源必须被提供。

EINT[15:0] 启动信号: EINTn 管脚必须被设置为中断管脚,在启动后,相应的 EINTn 管脚将不被用作启动,可以被用作外部中断请求。

电池故障信号 (nBATT_FLT): cpu 不在 PowerOff 模式时, nBATT_FLT 将要引起低电平触发的中断。当在 PowerOff 模式时, nBATT_FLT 信号将会禁止芯片从 PowerOff 模式启动,故所有的 wakeup 信号被屏蔽,此举用来保护系统电量低时不出现故障。

时钟和电源管理部分寄存器

LOCKTIME:   UPLL MPLL 锁定时间的计数值。

MPLLCON   UPLLCON: 这两个寄存器都有 MDIV PDIV SDIV 设置,对于输入12M的晶振,有相应的推荐值,产生200M和48M的频率。

CLKCON: 为各种外围接口提供时钟。

CLKSLOW:  是否打开2个PLL。

CLKDIVN: 设置 CLK HCLK PCLK 比率的寄存器。

系统分类: 嵌入式    |   用户分类: 嵌入式    |   来源: 转贴   |   【推荐给朋友】    |   【添加到收藏夹】

该用户于2009/8/30 10:32:57编辑过该文章

你可能感兴趣的:(c,工作,timer,嵌入式,IIS,interface)