S3C2440时钟和电源管理

发布者:RadiantEnergy最新更新时间:2019-11-23 来源: eefocus关键字:S3C2440  时钟  电源管理 手机看文章 扫描二维码
随时随地手机看文章

一、时钟


1.系统架构


时钟源:为了减少外界环境对开发板电磁干扰,降低制作成本,通常开发板的外部晶振时钟频率都很低,TX2440开发板由12MHz的晶振来提供时钟源,要想让CPU运行在更高的频率就要通过时钟控制逻辑单元PLL(锁相环)来提高主频。


S3C2440里有两个PLL:MPLL和UPLL,MPLL用来产生FCLK的高频工作时钟(而HCLK和PCLK通过FCLK分频获取),UPLL用来为USB提供工作频率。


FCLK为ARM920T内核提供时钟,详见下图


HCLK主要为S3C2440 AHB总线(Advanced High performance Bus)上挂接硬件提供工作频率,AHB总线主要挂接有内存,NAND,LCD控制器等硬件,详见下图.


PCLK主要为APB总线提供工作频率,由图2-46所示,APB总线主要挂接UART串口,定时器、GPIO、AD、Watchdog等硬件控制器。

        

由上图可知


1、时钟源选择:由OM[3:2]决定。

 

由下面电路图可知:OM[3:2]=00,主时钟源=晶振12M,USB时钟源=晶振12M。

 

2、时钟初始化设置


开发板上电后,晶振OSC开始为ARM提供系统时钟FCLK。这时复位信号(nRESET)拉低,这时MPLL虽然默认启动,但是如果不向MPLLCON中写入值,那么外部晶振则直接作为系统时钟FCLK,过几毫秒后,复位信号上拉,CPU开始取指运行,这时可以通过代码设置启动MPLL,MPLL启动需要一定锁定时间(LockTime),这是因为MPLL输出频率还没有稳定,在这期间FCLK都停止输出,CPU停止工作,过了LockTime后时钟稳定输出,CPU工作在新设置的频率下,这时可以通过设置FCLK,HCLK和PCLK三者的频率比例来产生不同总线上需要的不同频率。     

下面详细介绍开启MPLL的过程:


 设置LockTime变频锁定时间

 设置FCLK与晶振输入频率(Fin)的倍数

 设置FCLK,HCLK,PCLK三者之间的比例

1、设置locktime 即设置寄存器LOCKTIME


由于变频后开发板所有依赖时钟工作的硬件都需要一小段调整时间,该时间计数通过设置LOCKTIME寄存器[31:16]来设置UPLL(USB时钟锁相环)调整时间,通过设置LOCKTIME寄存器 [15:0]设置MPLL调整时间,这两个调整时间数值一般用其默认值。


2、设置FCLK、UCLK于晶振输入频率倍数 即倍频设置MPLL、UPLL寄存器

公式:其中MPLLCON寄存器用于设置处理器内核时钟主频FCLK,而UPLLCON寄存器用于设置USB时钟UCLK 。


1、FCLK=MPLL=(2*m*Fin)/(p*2^s) , 其中m=(MDIV+8), p=(PDIV+2), s=SDIV。


2、UCLK=UPLL=(*m*Fin)/(p*2^s)  , 其中m=(MDIV+8), p=(PDIV+2), s=SDIV。             

下面以TX2440开发板:Fin=12M,需要设置FCLK=400MHz为例。  设置MDIV= 92  PDIV= 1  SDIV=1           


FCLK=MPLL=(2*m*Fin)/(p*2^s) =(2*(MDIV+8)*12/((PDIV+2)*2^SDIV)=24*100/(3*2)=400MHz,与需要设置一样。


MDIV、PDIV、SDIV设置值可以参考datasheet提供推荐值

         

3、设置FCLK,HCLK,PCLK三者之间的比例 即设置时钟分频寄存器CLKDIVN和摄像头分频寄存器CAMDIVN


    

 

详细FCLK:HCLK:PCLK分频配置如下表:

例如已知FCLK=400MHz,需要设置HCLK=50MHz,PCLK=25MHz,则FCLK:HCLK:PCLK=1:8:16,


由上表可知:HDIVN=2,PDIVN=1,HCLK3_HALF=0,HCLK4_HALF=1,


即CLKDIVN=(HDIVN<<1)| PDIVN,  CAMDIVN=(CAMDIVN & ~(3<<8))  |  (HCLK4_HALF<<9)


注:

1、谨慎设置CLKDIVN,不要使HCLK和PCLK低于最小值


2、时钟控制寄存器CLKCON,使能/禁止 硬件模块和工作模式时的时钟源。


3、程序


分析TX2440提供源码。


//选择系统时钟频率,用SetSysFclk()

#define FCLK_200M ((94<<12)|(4<<4)|1)

#define FCLK_300M ((67<<12)|(1<<4)|1)

#define FCLK_400M ((92<<12)|(1<<4)|1)

#define FCLK_440M ((102<<12)|(1<<4)|1)

#define FCLK_220M ((102<<12)|(4<<4)|1)

void Main(void)

{

SetSysFclk(FCLK_400M);  //设置系统时钟 400M     

ChangeClockDivider(2, 1); //设置分频 1:8:16

CalcBusClk();           //计算总线频率,其中未设置locktime,使用默认值

Uart_Select(0);

Uart_Init(0, 115200);

Uart_Printf("tFCLK = %d MHzn", FCLK/1000000);

Uart_Printf("tHCLK = %d MHzn", HCLK/1000000);

Uart_Printf("tPCLK = %d MHzn", PCLK/1000000);

}

void SetSysFclk(int val) //设置系统时钟

{

rMPLLCON = val;

}

 

 

void ChangeClockDivider(int hdivn,int pdivn) //设置分频寄存器

{

     // hdivn,pdivn FCLK:HCLK:PCLK

     //     0,0         1:1:1 

     //     0,1         1:1:2 

     //     1,0         1:2:2

     //     1,1         1:2:4

     //     2,0         1:4:4或1:8:8 由HCLK4_HALF决定,这里默认HCLK4_HALF=1,即1:8:8

     //     2,1         1:4:8或1:8:16由HCLK4_HALF决定,这里默认HCLK4_HALF=1,即1:8:16

     //     3,0         1:3:3或1:6:6由HCLK3_HALF决定,这里默认HCLK3_HALF=1,即1:6:6

     //     3,1         1:3:6或1:6:12由HCLK3_HALF决定,这里默认HCLK3_HALF=1,即1:6:12

    rCLKDIVN = (hdivn<<1) | pdivn;    

 

if (hdivn == 2)

rCAMDIVN = (rCAMDIVN & ~(3<<8)) | (1<<9);//(1<<9)即HCLK4_HALF=1

if (hdivn == 3)

rCAMDIVN = (rCAMDIVN & ~(3<<8)) | (1<<8);

}

 

void CalcBusClk(void) //计算总线频率

{

U32 val;

U8 m, p, s;

val = rMPLLCON;

m = (val >> 12) & 0xff;//读取MDIV

p = (val >> 4) & 0x3f;//读取PDIV

s = val & 3; //读取SDIV

 

FCLK = ((m+8)*(FIN/100)*2)/((p+2)*(1<

val = rCLKDIVN;

m = (val >> 1) & 3; //获取m=HDIVN

p = val & 1; //获取m=PDIVN

val = rCAMDIVN;

s = val >> 8;   //获取s=由HCLK4_HALF和由HCLK3_HALF

/*下面分频计算方法参考CLKDIVN寄存器说明

HDIVN [2:1]

       00:HCLK = FCLK/1

            01:HCLK = FCLK/2

            10:HCLK = FCLK/4 当CAMDIVN[9] = 0 时

                HCLK = FCLK/8 当CAMDIVN[9] = 1 时

            11:HCLK = FCLK/3 当CAMDIVN[8] = 0 时

                HCLK = FCLK/6 当CAMDIVN[8] = 1 时

     PDIVN [0]

        0:PCLK 是和HCLK/1 相同的时钟

             1:PCLK 是和HCLK/2 相同的时钟

*/

switch (m)  

{

case 0:

HCLK = FCLK;

break;

case 1:

HCLK = FCLK >> 1;

break;

case 2:

if(s & 2)

HCLK = FCLK >> 3;

else

HCLK = FCLK >> 2;

break;

case 3:

if(s & 1)

HCLK = FCLK / 6;

else

HCLK = FCLK / 3;

break;

}

if(p)

PCLK = HCLK >> 1;

else

PCLK = HCLK;

val = rUPLLCON;

m = (val >> 12) & 0xff;

p = (val >> 4) & 0x3f;

s = val & 3;

UPLL = ((m+8)*FIN)/((p+2)*(1< UCLK = (rCLKDIVN&8)?(UPLL>>1):UPLL;//判断CLKDIVN[3]中UCLK选择位?

                                       //若为1,UCLK=UPLL/2;若为0,UCLK=UPLL

}

 

void ChangeMPllValue(int mdiv,int pdiv,int sdiv) //修改MPLL

{

    rMPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;

}

 

void ChangeUPllValue(int mdiv,int pdiv,int sdiv)//修改UPLL

{

    rUPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;

}


二、电源管理(待完善)


关于电源控制逻辑,S3C2440A 包含了各种电源管理方案来保证对给定任务的最佳功耗。S3C2440A 中的电源管理模块可以激活成四种模式:正常(NORMAL)模式、慢速(SLOW)模式、空闲(IDLE)模式和睡眠(SLEEP)模式。


普通(NORMAL)模式:这个模式提供时钟给CPU,也提供给所有S3C2440A 的外设。在此模式中,当所有外设都开启时功耗将将达到最大。它允许用户用软件控制外设的运行。例如如果一个定时器不是必须的,用户可以断开连接到定时器的时钟(CLKCON 寄存器),以降低功耗。


慢速(SLOW)模式:无PLL 模式。不像普通模式,慢速模式使用一个外部时钟(XTIpll 或EXTCLK)直接作为FCLK 给S3C2440A,而没有使用PLL。在此模式中,功耗只取决于外部时钟的频率。排除了因PLL 而产生的功耗。


空闲(IDLE)模式:这个模块只断开了CPU 内核的时钟(FCLK),但它提供时钟给所有其它外设。空闲模式产生了因CPU 内核而产生的功耗减少的结果。任何中断请求给CPU 都可以使其从空闲模式中唤醒。


睡眠(SLEEP)模式:这个模块与内部供电是分离的。因此在此模式中发生了没有因CPU 和除唤醒逻辑以外的内部逻辑的功耗。要激活睡眠模式需要两个独立的供电电源。两个电源之一提供电源给唤醒逻辑。另一个提供电源给包括CPU 在内的其它内部逻辑,而且应当能够控制供电的开和关。在睡眠模式中,第二个为CPU 和内部逻辑供电电源将被关闭。可以由EINT[15:0]或RTC 闹铃中断产生从睡眠模式中唤醒。

关键字:S3C2440  时钟  电源管理 引用地址:S3C2440时钟和电源管理

上一篇:TX2440裸机程序-LCD
下一篇:TX2440裸机程序-AD

推荐阅读最新更新时间:2024-11-22 05:35

2课:单片机引脚介绍
单片机的40个引脚大致可分为4类:电源、时钟、控制和I/O引脚。 ⒈ 电源: ⑴ VCC - 芯片电源,接+5V; ⑵ VSS - 接地端; ⒉ 时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。 ⒊ 控制线:控制线共有4根, ⑴ ALE/PROG:地址锁存允许/片内EPROM编程脉冲 ① ALE功能:用来锁存P0口送出的低8位地址 ② PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。 ⑵ PSEN:外ROM读选通信号。 ⑶ RST/VPD:复位/备用电源。 ① RST(Reset)功能:复位信号输入端。 ② VPD功能:在Vcc掉电情况下,接
[单片机]
S3C2440—9.复制程序到SDRAM中执行
一.S3C2440的启动方式 S3C2440的MMU有一种“steppingstone”.技术,是协助MCU从无法执行程序的NAND FLASH执行启动程序的一种方法,其启动步骤如下: 1、系统上电后,首先自动判断是否是autoboot模式,如果使用 s3c2440是带有nandflash的,并且被设置成autoboot,从nandflash开始启动. 2、在判断是autoboot模式后,mcu内置的nandflash控制器自动将nandflash的最前面的4k区域(这4k区域存放着 bootloader的最前面4k代码)拷贝到samsung所谓的 steppingstone 里面(steppingstone是在S3C2440
[单片机]
瑞萨电子推出业内效率最高且体积最小的多相电源管理IC
2018年4月25日,日本东京讯 – 半导体解决方案供应商瑞萨电子株式会社(TSE:6723)今日宣布推出三款可编程电源管理IC---ISL91302B、ISL91301A和ISL91301B,可为智能手机和平板电脑应用处理器提供最高效的电源管理,同时具备最小的展板体积。上述几个电源管理IC还为人工智能(AI)处理器、FPGA和工业MPU提供电源管理,它们非常适合为固态驱动器(SSD)、光收发器和各种消费类电子产品,以及工业和网络设备中的各路负载供电。ISL91302B单/双输出多相电源管理集成电路,可以在70 mm2解决方案尺寸(比竞品同类电源管理集成电路小40%以上*)内,提供高达20A的输出电流和94%的峰值效率。 I
[半导体设计/制造]
瑞萨电子推出业内效率最高且体积最小的多相<font color='red'>电源管理</font>IC
Ramtron Processor Companion成功应用到DMS系列改装DPF中
F-RAM 替代 EERPOM,在严苛的汽车环境中提供可靠的数据记录 Ramtron FM3130 和 FM3104 Processor Companion已成功应用到Blue Planet 公司的DMS 系列改装 DPF 的数据记录器中,Blue Planet是韩国主要的改装柴油颗粒过滤器 (DPF) 设备与诊断模块供应商。 FM3130 将 64Kb F-RAM 存储器与增强型的实时时钟 (RTC)、高度集成的支持与针对处理器为基础系统的外设功能相结合。F-RAM 已在 DMS 系列 DPF 系统中取代 EERPOM,F-RAM 与 RTC 的结合为收集和存储车辆排气温度、系统背压及时间记录等密集数据提供了理想的解决方案。
[焦点新闻]
基于51单片机的可由按键切换12\24小时制的电子时钟proteus仿真
仿真电路图: 部分源代码: #include reg51.h #define uchar unsigned char #define uint unsigned int sbit lcdrs=P3^5; sbit lcden=P3^4; sbit s1=P3^0; sbit s2=P3^1; sbit s3=P3^2; sbit s4=P3^3; sbit beep=P2^2; sbit led=P2^3; uchar count,s1num,s4num; char year,month,day,week,miao,shi,fen,pshi; uchar code table = 20 -
[单片机]
基于51单片机的可由按键切换12\24小时制的电子<font color='red'>时钟</font>proteus仿真
精通USB 2.0集线器电源管理
  USB集线器不仅可向下游的USB端口提供数据和电源,还允许主机通过软件对连接到下游端口的设备进行电源管理。USB 2.0集线器系统中的电源分配与管理堪称决定系统是否完全符合USB规范(2.0版)的主要因素。    电源分配   所有连接到USB端口的设备可配置成低功率或高功率,这取决于设备的电压和电流要求(如表1和表2所示)。      首先将所有USB设备枚举为低功率器件。主机在枚举完成后检查设备配置描述符的bMaxPower字段。如果bMaxPower表明该设备属于高功率,并且可提供相应电源,那么主机会允许将该设备转为高功率。   USB设备可被分为自供电和总线供电。图1给出了这两种集线器配置。       总线供电集线
[电源管理]
精通USB 2.0集线器<font color='red'>电源管理</font>
深入分析S3C2440启动代码中大小端问题
一、ADS1.2中关于大小端的设置以及对编译后的代码的影响 下面是一段代码在线段模式下编译,生成的二进制文件的内容 大端模式下编译,生成二进制文件的内容 根据上面的内容可以看出:它们的字节序是相反的,也就是说,ADS1.2中对大小端的设置会影响最终生成的二进制文件的字节序。 二、S3C2440启动代码中与大小管相关的代码 Option.inc中相关代码 view plain copy print ? GBLL ENDIAN_CHANGE NDIAN_CHANGE SETL {FALSE} GBLA ENTRY_BUS_WIDTH NTRY_BUS_WIDT
[单片机]
深入分析<font color='red'>S3C2440</font>启动代码中大小端问题
发射应用中多个高速、复用DAC的同步
概述 在很多发射应用中必须产生多路相对相位准确已知的模拟输出。在正交调制器中(图1),I和Q通道必须具有明确的相位关系来实现镜频抑制。图1中,DAC1和DAC2的延迟必须匹配。使用数字波束成形技术的发射器需要准确地控制大量DAC之间的相对相位。             图1. 使用多路复用DAC的I/Q发射器中的DAC和第一上变频级 使用具有多路输入的DAC (MUX-DAC)如MAX19692,或具有数据时钟输出的内插DAC时,输入数据速率为DAC刷新速率的1/N,DAC在一个或两个数据时钟跳变沿锁存数据。MAX19692中N = 4,输入数据速率为DAC刷新速率的1/4。DAC输出一个由输入时钟经数字分频得到的数据时钟(
[模拟电子]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved