S3C6410系统控制器包括两部分:系统时钟控制和电源管理。
将产生系统所需的时钟信号。共有三个PLL(锁相环)。其中第一个(ARM PLL)为ARMCLK专用,第二个(MAIN PLL)用于HCLK和PCLK,第三个(EXTRA PLL)用于外围设备,特别是用于音频设备的时钟。每个外围设备的时钟信号可以用软件来enable和disable,用来降低功耗。
1、ARMCLK -----> CPU
2、HCLK ------> AXI/Ahb 总线上的设备
3、PCLK ------> Apb 总线设备
S3C6410是由ARM1176核、一些多媒体协处理器(co-processors)、多种外设IPs组成。ARM1176核是通过64位AXI总线与存储控制器相连的,这样做是为了满足带宽的需要。 多媒体协处理(MFC多格式编码器、JPEG、camera接口、TV译码器、3D加速器等)器被分为五个电源域,这五个电源域可被单独控制以降低功耗。
时钟源在外部晶振和外部时钟二者之间进行选择。时钟发生器由三个PLL组成,最高可产生1.6GHz的信号。
下面为三星官方手册:
当OM[0]为0时,选择外部晶体;当为1时,选择外部信号。下图为6400的截图,也适用6410,关于6410的启动,网上有高手称是三星隐藏了什么,见下图。
如果使用nand flash则XSELNAND必须为1;如果使用onenand则必须为0.
三个锁相环:APLL、MPLL、EPLL。
VCO(电压控制震荡器)输出的频率与输入的电压成正比。预分频器将输入频率分频(P),主分频器将VCO的输出频率分频(M)送入鉴相器,post定标器将将VCO输出的频率分频(S)。相位差检测器检测相位差和电荷泵电压的增加和减少
ARM1176最大支持667MHZ,在不改变PLL的情况下,可以通过DIVarm来控制该频率。
S3C6410由AXI、AHB、APB总线组成。IPs可以连接相应总线来满足I/O带宽和操作性能。连接在AXI/AHB的总线上的设备,最高可以达到133MHz的速度。当连接在APB总线上时,最高可以达到66MHz的速度。总线速度很高程度上依赖于AHB和APB总线之间的同步数据传输。
注意图中的右侧部分:
HCLKx2用于两个DDR控制器,DDR0、DDR1,最高可达到266MHZ,每个DDR控制器可以单独控制,以用来降低功耗。
所有的AHB总线上的时钟是由DIVhclk分频得来的,同样,也可以单独控制来降低功耗。HCLK_GATE寄存器来配置HCLKx2和HCLK。
APB总线与AHB总线类似,但是注意:在AHB和APB总线之间的频率比必须隔着一个偶数值,例如:如果DIVhclk是1,那么DIVpclk必须是1、3…..,否则,则不能传输数据。
在AHB总线上的JPEG和安全子系统不能运行在133MHz。AHB总线用DIVjpeg和DIVsecur为它们单独产生时钟信号,因此它们与APB之间的频率也要隔着一个偶数。
APLL单独用于ARM核,其值不作约束。
可以通过控制HCLK_GATE、PCLK_GATE、SCLK_GATE。
有一个时钟输出端口,产生内部时钟,用于中断或调试。
使用同步接口模式(ARM核与AXI总线之间)时,ARMCLK和HCLK之间的时钟比必须是一个整数。
S3C6410在533MHZ的同步接口模式下没有任何限制,比如:ARMCLK=533M,HCLKx2=266M,HCLK=133M.但是,注意:如果超过533MHz,典型的是667MHz,那么只能使用1:2.5:5,也就是667M:266:133。
原因见下图:
ARMCLK、HCLKx2、HCLK的产生是由各自的预分频器和后分频器组成的。其中预分频器是固定的,不可配置的,APLL后面的预频率器为2分频,而MPLL后面的预分频器为5分频。而后分频器可以通过CLK_DIV0来配置。
如果使用同步667模式,如图,如果FOUT=1.33GHz,则经过预分频器后的ARMCLK为667MHz,经过另一个预分频器的则为266MHz.
同步667操作模式的5个使用步骤:
1、 正常模式:SYNC667寄存器相应位被清0,这时,就没有任何限制,典型的分频比:1:2:4(533:266:133MHz)。
2、 晶振模式:在设置SYNC667之前,S3C6410必须使用使用的是晶振的频率(通过设置CLK_SRC的APLL_SEL位为0),分频比为1:2:4(12:6:3MHz)。
3、 DIV112模式:从1:2:4模式转变成1:1:2模式(12:12:6MHz)
4、 SYNC667低频率模式:将SYNC667相应的位置位,将分频比调整为2:5:10(6:2.4:1.2MHz)
5、 SYNC667模式:当APLL的FOUT=1.33GHz时,就工作在SYNC667模式了。
退出667模式时,步骤与上述相反。
上述五步看上去好麻烦,有时间一定要弄一下,不知道提供的程序中有没有使用到667模式。
同步667模式的一些限制:
1、 不可以使用其它的时钟分频比ARM_RATIO、HCLKx2_RATIO、HCLK_RATIO必须是0,0和1.
2、 在SYNC667模式下,如果上述三者的比不是0,0,1,则应使用异步接口模式。
3、 不允许使用DVFS(Dnamic Voltage Frequency Scale),如果使用动态的比例调整,必须在异步接口模式下。
4、 在SYNC667模式下不支持停止、深度停止、睡眠模式,如果想进入这三种模式,必须先退出SYNC667模式。
支持正常模式、保持模式、电源选通模式和电源关闭4种模式。
所有的内部逻辑包括F/Fs(触发器)和内存运行在正常模式;保持模式是在停止或深度停止模式时用来减少不必要的功耗,但保留了预先状态和快速唤醒。注意:domain-V、I、P、F、S、G,不支持这种保持模式。它们可以通过内部的电源选择开关来控制是否选通来降低功耗。在睡眠模式下,外部的调节器将被关闭以降低功耗,这时S3C6410将最大限度的减小功耗,并将失去所有的信息除了ALIVE和RTC模块。
多种电源管理方案以降低功耗,有6个可控的电源域(范围):domain-G, domain-V, domain-I, domain-P, domain-F, domain-S.
S3C6410的电源管理分为四部分:
1、 general模式(通常模式、正常模式)
用于控制内总总线设备时钟的开、关。可利用这种模式来优化S3C6410的功耗,例如:如果你不需要使用定时器,你可以断开定时器的时钟。
2、 空闲模式(掉电模式)
该模式是断开了ARMCLK对CPU的供电。
3、 停止模式
通过禁止PLL来断开所有时钟信号(CPU和所有外设)。此时的功耗只剩下了漏电流的损耗。
4、 睡眠模式
该模式断开了内部(除了唤醒逻辑)电源。使用这种模式需要两个独立的电源,一个电源用于供给唤醒电路;另一个用于供给内部逻辑电路(包括CPU),这个电源必须可以被控制开、关。在睡眠模式中,第二个电源将会被关闭。
在正常和空闲模式下,通过NORMAL_CFG控制它们,如果控制位被清0,就会改变相应部分的选通模式和先前的状态。因此,用户程序必须保存先前的状态在清0前。当S3C6410改变成停止或深度停止模式时,子电源域会自动改变选通模式。
三种方式:
1、硬件复位
通过给XnRESET引脚置低电平,完全初始化系统(寄存器和引脚)。所有信息将丢失(除了RTC)。
当XnRESET被拉低后,XnRESETOUT也被拉低.
XnRESET是不可屏蔽,始终有效的。
2、看门狗复位
是一个硬件的block
3、唤醒复位
是从睡眠模式中唤醒,S3C6410睡眠后,内部的硬件都是不可用的状态,唤醒后需重新的初始化。
1、0x7E00 F0xx用来配置PLL和时钟发生器。
2、0x7E00 F1xx用来配置总线和内存
3、0x7E00 F8xx用来配置电源管理
4、0x7E00 F9xx用来显示内部状态
5、0x7E00 FA0x用来保存信息
转自:http://dogking.chinaunix.com/space.php?uid=24189228&do=blog&id=64167