S3C2440的时钟可以选用晶振(XTAL),也可以使用外部时钟(EXTCLK),由系统复位时,在复位信号上升沿对引脚OM3、OM2所测的状态来确定。由于我所用的开发板这两个引脚接地,故外部晶振作为主锁相环(MPLL)和usb锁相环(UPLL)的时钟源。

含有两个锁相环MPLL、UPLL产生系统所需要的不同频率的时钟
MPLL:
 为CPU产生FCLK时钟
 为AHB产生HCLK时钟
 为APB产生PCLK时钟

UPLL:
 为usb(Host and Device)产生UCLK(48M)

FCLK,HCLK和 PCLK 
FCLK是提供给ARM920T 的时钟。 
HCLK 是提供给用于 ARM920T,存储器控制器,中断控制器,LCD 控制器,DMA 和 USB 主机模块的 AHB
总线的时钟。 
PCLK 是提供给用于外设如WDT,IIS,I2C,PWM 定时器,MMC/SD 接口,ADC,UART,GPIO,RTC 和
SPI的APB 总线的时钟。

下图为PLL(锁相环)方框图

设置FCLK要用到PLL控制寄存器MPLLCON

例如:如果外部晶振Fin为12MHZ,设置FCLK为400MHZ,

由公式Fout = 2 × m × Fin / ( p*2^s) 此处:m =MDIV+8, p=PDIV+2, s=SDIV

可知rMPLLCON=((92<<12)|(1<<4)|1)    其中(MDIV=92, PDIV=1,SDIV=1)。

下面的这个函数是配置FCLK HCLK PCLK的比例的函数,用到时钟分频寄存器CLKDIVN

[cpp] view plaincopy
  1. void ChangeClockDivider(int hdivn,int pdivn)
  2. {
  3. // hdivn,pdivn FCLK:HCLK:PCLK
  4. //     0,0         1:1:1
  5. //     0,1         1:1:2
  6. //     1,0         1:2:2
  7. //     1,1         1:2:4
  8. //     2,0         1:4:4
  9. //     2,1         1:4:8
  10. //     3,0         1:3:3
  11. //     3,1         1:3:6
  12. rCLKDIVN = (hdivn<<1) | pdivn;
  13. if (hdivn == 2)
  14. rCAMDIVN = (rCAMDIVN & ~(3<<8)) | (1<<9);
  15. if (hdivn == 3)
  16. rCAMDIVN = (rCAMDIVN & ~(3<<8)) | (1<<8);
  17. }
[cpp] view plaincopy
  1. //**************************[ UPLL ]*******************************
  2. void ChangeUPllValue(int mdiv,int pdiv,int sdiv)    //配置UPLLCON寄存器
  3. {
  4. rUPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;
  5. }
[cpp] view plaincopy
  1. void CalcBusClk(void)   //计算总线频率
  2. {
  3. U32 val;
  4. U8 m, p, s;
  5. val = rMPLLCON;
  6. m = (val >> 12) & 0xff;
  7. p = (val >> 4) & 0x3f;
  8. s = val & 3;
  9. //(m+8)*FIN*2 不要超出32位数!
  10. FCLK = ((m+8)*(FIN/100)*2)/((p+2)*(1<<s))*100;    //计算FCLK频率
  11. val = rCLKDIVN;
  12. m = (val >> 1) & 3;   //HDIVN 的值
  13. p = val & 1;        //PDIVN 的值
  14. val = rCAMDIVN;
  15. s = val >> 8;     //CAMDIVN[8:9],为HDIVN分频改变位
  16. switch (m)      //计算HCLK频率
  17. {
  18. case 0:
  19. HCLK = FCLK;
  20. break;
  21. case 1:
  22. HCLK = FCLK >> 1;
  23. break;
  24. case 2:
  25. if(s & 2)   //见CAMDIVN寄存器HCLK4_HALF
  26. HCLK = FCLK >> 3;
  27. else
  28. HCLK = FCLK >> 2;
  29. break;
  30. case 3:
  31. if(s & 1)   //见CAMDIVN寄存器HCLK3_HALF
  32. HCLK = FCLK / 6;
  33. else
  34. HCLK = FCLK / 3;
  35. break;
  36. }
  37. if(p)       //计算PCLK频率
  38. PCLK = HCLK >> 1;
  39. else
  40. PCLK = HCLK;
  41. val = rUPLLCON;
  42. m = (val >> 12) & 0xff;
  43. p = (val >> 4) & 0x3f;
  44. s = val & 3;
  45. UPLL = ((m+8)*FIN)/((p+2)*(1<<s));
  46. UCLK = (rCLKDIVN&8)?(UPLL>>1):UPLL;   //计算UCLK频率
  47. }

下图为外部时钟为晶振时的上电复位顺序

S3C2440时钟电源管理相关推荐

  1. S3C2440时钟和电源管理:空闲模式:电源管理模块断开CPU时钟FCLK,而只给外设提供时钟,CPU不耗时钟,故而减少功耗,任何中断请求都可将CPU从空闲模式唤醒。

    七.时钟&电源管理 概述 时钟&电源管理模块包含三部分:时钟控制,USB控制,电源控制. 时钟控制逻辑可以生成三种时钟信号,CPU使用的FCLK,AHB总线外设使用的HCLK,APB总 ...

  2. 时钟,复位和电源管理

    文章目录 一.电源管理和复位 二.时钟 1.时钟的分类和特性 2.时钟图 杨桃32学习笔记,本文图片文字皆为转述 一.电源管理和复位 (1)8MHZ的振荡器给arm内核提供,40khz给RTC使用也就 ...

  3. linux时钟与电源管理,SOC的时钟和电源管理

    SOC的时钟和电源管理 (2013-04-27 18:58:07) 标签: it dm3730 时钟 linux 电源 现在的SOC,因为多用做手持设备,所以在节省能源方面都不遗余力.我看原因到不是为 ...

  4. linux系统电源时钟,linux电源管理的一些梳理

    由于项目产品需要过能源之星3.0,所以最近做了一些电源管理低功耗方面的工作,抽个时间正好梳理一下. 其实Linux 电源管理非常复杂,牵扯到很多方面,比如系统级的待机.频率电压变换.系统空闲时的处理以 ...

  5. 【STM32】初识STM32(型号+封装+内核+储存器+时钟、复位和电源管理+工作模式+ADC)

    折腾着折腾着终于开始了 目录 ■STM32型号的说明: ■几种封装样式: ■ 内核:ARM 32位的Cortex™-M3 CPU ■ 存储器 ■ 时钟.复位和电源管理 ■内嵌RC振荡器和外接晶振: ■ ...

  6. soc(三) 电源管理

    历史 一开始的电源管理没有做的比较粗糙,随着时代的发展,越来越精细 和时钟基本上是相同等级(芯片工作的基础),电源管理框图和时钟框图很相似 一个模块供电,供时钟,然后他基本上就可以工作了.根据ARM的 ...

  7. MTK6573电源管理(PM)小结

    继续MTK平台的研究 开始研究电源管理,因为PM永远是嵌入式的核心技术,所以静下来走一遍流程. MTK启动的过程: 硬件板载的启动入口为 static __init int board_init(vo ...

  8. linux 电源管理 regulator,Linux内核电源管理综述

    资料: http://blog.csdn.net/bingqingsuimeng/article/category/1228414 http://os.chinaunix.net/a2006/0519 ...

  9. stm32之电源管理(实现低功耗)

    目录 1.硬件原理 2.低功耗模式 3.睡眠模式实验 4.停止模式实验 5.待机模式实验 前言:STM32F10xxx系列产品都有电源管理模块,芯片功耗会影响到一个产品的续航能力:比如在一些终端传感器 ...

  10. 从Var Tick角度来对CE电源管理

    从Var Tick角度来对CE电源管理 一.相关的基础知识如下 1.OAL中Timer相关函数说明 1> OALTimerInit 参数: msecPerSysTick: 每个系统调度Tick对 ...

最新文章

  1. 搞懂限流算法这一篇就够了
  2. mysql order by 多字段排序
  3. JAVA并发编程实战---第三章:对象的共享
  4. [转]项目经理面试指南
  5. Geany 权限问题:Error opening file ... : permission denied.,原因及解决办法。
  6. python类和对象介绍_python中的类,对象,方法,属性等介绍
  7. python随机生成字母和数字的混合字符串_用python生成数字、字母和特殊字符混合的字符串...
  8. Ice_cream's world I HDU - 2120(并查集判环)
  9. ShardingSphere-Proxy 主从读写 入门使用
  10. 蓝桥杯 ALGO-63 算法训练 乘法表
  11. 怎样解决DEDE织梦友情链接字数限制与链接个数限制
  12. mysql个人记账系统_个人记账系统
  13. [GIS教程] 6.1空间数据采集与处理具体步骤
  14. eds能谱图分析实例_热场发射扫描电子显微镜与能谱分析仪
  15. 收集了一下WINDDOWS VISTA密码破解的方法
  16. php框架 f,ShuipFCMS: ShuipFCMS是一款基于ThinkPHP框架开发的内容管理系统!
  17. 2022-2028年全球与中国摆式斗式提升机市场现状及未来发展趋势分析报告
  18. 虚幻4地形怎么增加层_虚幻周报20200806 | 早晚的事
  19. 生死看淡,不服就干,小米终于迎来了久违的大幅反弹
  20. 什么是主动式计算机用户,电脑电源主动PFC是什么意思

热门文章

  1. C#中的常量、类型推断和作用域
  2. Qt QString to char*
  3. App_Code 目录
  4. [ NOI 2005 ] 聪聪与可可
  5. grid@m3#39;s password: Permission denied, please try again.
  6. 现有php环境下安装memcached并测试(centos6.4系统64位)
  7. ColorTransform类应用实例:鼠标经过时使图片发光。
  8. LeetCode 951. Flip Equivalent Binary Trees
  9. ORM数据库框架 LitePal SQLite MD
  10. 解决Maven关于本地jar包的打包处理