在讲述系统时钟之前,因为这些设备都是挂靠在系统时钟上的,所以必须先说系统时钟,S3C2440的时钟系统如下

外部时钟源分两种,晶振或者外部频率,由om3-2选择,时钟电路根据两种选择也有两种

我们来分析时钟图可以得到以下结论:  经过选择的外部时钟进入MPLL,进行锁相环倍频,经过锁相环之后的时钟MPLL_IN分成了三股,分别是FCLK,HCLK,PCLK.这其中HCLK和PCLK又是从HCLK分频得到的,最后ARM920T这个系统内核模块得到了两个时钟HCLK和FCLK,DMA控制器,LCD控制器,内存控制器,总线控制器,外部nand控制器和TIC,摄像头接口都来自于HCLK时钟,LCD控制器,nand控制器,cam摄像头控制器的时钟可以选择从总线上切断开来,IIC WDT IIS PWM SDI GPIO ADC RTC UART012 SPI AC97这些外设都挂接在PCLK总线上,而且除了WDT外,都可以断开和总线的连接,另外USB时钟直接从MPLL_IN倍频得到,生成UCLK,USB主机时钟可以选择UCLK或者HCLK,USB设备时钟可选UCLK或者PCLK,所以,有时候初次接触芯片看图是一个很好的选择,文字偏于细节,看图能很快浏览全貌,通过我们的分析可以得到下面这个再次简化的文档

输入时钟

MPLL

FCLK

HCLK

内存控制器,中断控制器,nand控制器,tic控制器等,系统内核920T,DMA控制器

PCLK

基本外设RTC,UART,spi等外设

只供给系统内核,

USB PLL

UCLK

USB主机时钟,usb设备时钟

这就是系统时钟的基本分布,剩下的细节无非就是如何分频,如何启用时钟停止时钟,锁相环配置等等了,首先关注MPLL

这是PLL的锁定时间,一般设置小一点查询是否锁定成功就好

这三个值搭配就可以选择不同的MCLK了,数据手册上有公式,经过MPLL倍频,就成功地获得了系统主时钟FCLK(也就是ARM920T时钟)

通过这个寄存器进行时钟的使能与切断,要使用外设的时候不要忘记这个寄存器

该寄存器确认以一种什么样的比例将FCLK分频为HCLK和PCLK

到这里基本上就描述完了系统时钟,只要弄清楚框架其实时钟也挺简单的,分频系数,功率控制,最主要要弄清楚哪个设备用了哪个时钟就OK了

接下来展示一段代码用来计算系统时钟(在2440init.s里面就有设置时钟的过程,可以参考)

Clock.c

#include "clock.h"#define FIN  (12000000)  U32 FCLK;
U32 HCLK;
U32 PCLK;
U32 UCLK;void CalcBusClk(void)    //计算总线频率
{U32 val,UPLL;U8 m, p, s;val = rMPLLCON;m = (val >> 12) & 0xff;p = (val >> 4) & 0x3f;s = val & 3;FCLK = ((m+8)*(FIN/100)*2)/((p+2)*(1<<s))*100;val = rCLKDIVN;m = (val >> 1) & 3;p = val & 1; val = rCAMDIVN;s = val >> 8;switch (m) {case 0:HCLK = FCLK;break;case 1:HCLK = FCLK >> 1;break;case 2:if(s & 2)HCLK = FCLK >> 3;elseHCLK = FCLK >> 2;break;case 3:if(s & 1)HCLK = FCLK / 6;elseHCLK = FCLK / 3;break;}if(p)PCLK = HCLK >> 1;elsePCLK = HCLK;val = rUPLLCON;m = (val >> 12) & 0xff;p = (val >> 4) & 0x3f;s = val & 3;UPLL = ((m+8)*FIN)/((p+2)*(1<<s));UCLK = (rCLKDIVN&8)?(UPLL>>1):UPLL;
}//************************[ HCLK, PCLK ]***************************
void ChangeClockDivider(int hdivn_val,int pdivn_val)
{int hdivn=2, pdivn=0;// hdivn_val (FCLK:HCLK)ratio hdivn// 11           1:1       (0)// 12           1:2       (1)// 13           1:3       (3) // 14           1:4       (2)// pdivn_val (HCLK:PCLK)ratio pdivn// 11           1:1       (0)// 12           1:2       (1)switch(hdivn_val) {case 11: hdivn=0; break;case 12: hdivn=1; break;case 13:case 16: hdivn=3; break;case 14: case 18: hdivn=2; break;}switch(pdivn_val) {case 11: pdivn=0; break;case 12: pdivn=1; break;}rCLKDIVN = (hdivn<<1) | pdivn;switch(hdivn_val) {case 16:        // when 1, HCLK=FCLK/8.rCAMDIVN = (rCAMDIVN & ~(3<<8)) | (1<<8); break; case 18:  // when 1, HCLK=FCLK/6.rCAMDIVN = (rCAMDIVN & ~(3<<8)) | (1<<9); break;}if(hdivn!=0)MMU_SetAsyncBusMode();else MMU_SetFastBusMode();
}//**************************[ UPLL ]*******************************
void ChangeUPllValue(int mdiv,int pdiv,int sdiv)
{rUPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;
}//***************************[ MPLL ]****************************
void ChangeMPllValue(int mdiv,int pdiv,int sdiv)
{rMPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;
}//*************************时钟配置函数*****************************
void SetClock(u8 mpll)
{if(mpll == MPLL271){ChangeMPllValue(173,2,2);    }else if(mpll == MPLL304){ChangeMPllValue(68,1,1);}else if(mpll == MPLL405){ChangeMPllValue(127,2,1);}else if(mpll == MPLL532){ChangeMPllValue(125,1,1);}ChangeClockDivider(14,12);      //设置分频比为1:4:8 fclk hclk pclk //并设置cpu异步总线模式CalcBusClk();                 //计算总线频率}

Clock.h

#ifndef __CLOCK_H_
#define __CLOCK_H_
#include "def.h"
#include "2440addr.h"
#include "2440slib.h"#define FIN  (12000000)  //外部晶振
#define MPLL271 1   //几个典型的时钟宏定义
#define MPLL304 2
#define MPLL405 3
#define MPLL532 4void CalcBusClk(void);    //计算总线频率
void ChangeClockDivider(int hdivn_val,int pdivn_val);//计算分频数值
void ChangeUPllValue(int mdiv,int pdiv,int sdiv);//配置usb总线
void ChangeMPllValue(int mdiv,int pdiv,int sdiv);
void SetClock(u8 mpll);//配置系统时钟extern U32 FCLK;
extern U32 HCLK;
extern U32 PCLK;
extern U32 UCLK;#endif

现在有了几个系统时钟的具体数字,我们就可以很好的进行外设时钟的配置了

注意,设置系统时钟的时候HCLK如果太大会导致取值SDRAM跟不上,为了解决这个问题,三星说了这样一个方案,大家要注意哦:

转载于:https://www.cnblogs.com/dengxiaojun/p/4279420.html

S3C2440时钟系统详解相关推荐

  1. ARM芯片的时钟系统详解(S5PV210芯片)

    1.时钟介绍 时钟是同步工作系统的同步节拍,时钟的快慢就是我们常说的工作频率,以赫兹(HZ)为单位.时钟系统指导器件的运行,我们分析器件的工作特性时,常常会看器件的时序图,时序图中的时钟周期就是时钟系 ...

  2. STM32开发 -- 时钟系统详解

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/81558649 上一篇文章讲了RTC,里面其实已经包含了时钟系统的介绍了.这篇 ...

  3. 【STM32】初学者必读STM32时钟系统详解

    目录 1 前言 2 时钟系统介绍 3 时钟源 3.1 系统时钟源 3.2 次级时钟源 3.3 时钟源特点 4 时钟 4.1 AHB总线时钟 4.2 APB1总线时钟 4.3 APB2总线时钟 5 时钟 ...

  4. Linux系统详解 系统的启动、登录、注销与开关机

    Linux系统详解 第六篇:系统的启动.登录.注销与开关机 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://johncai.blo ...

  5. 基于YOLOv5的目标检测系统详解(附MATLAB GUI版代码)

    摘要:本文重点介绍了基于YOLOv5目标检测系统的MATLAB实现,用于智能检测物体种类并记录和保存结果,对各种物体检测结果可视化,提高目标识别的便捷性和准确性.本文详细阐述了目标检测系统的原理,并给 ...

  6. linux小红帽系统装打印机驱动,Linux系统详解 第三篇:红帽RHEL的安装

    Linux系统详解 第二篇:红帽RHEL的安装 前言: 本系列文章取材广泛,有来自于互联网的,有来自教科书的,有来自自己的笔记的,也有来自自己对Linux的经验积累的.此系列的文章都是经过长时间的整理 ...

  7. 【STM32学习】时钟配置详解

    [STM32学习]时钟配置详解 看懂时钟图 结合代码 外部高速时钟修改 看懂时钟图 在刚开始学习32的时候,并不会在意这些,或者即使看了也看的不是很明白.随着学习的深入,我们发现看门狗.定时器.ADC ...

  8. STM32最小系统详解

    STM32最小系统详解 1. 电源电路 2. 晶振电路 3. 复位电路 4. 下载电路(串口下载) 本文章将以普中的STM32F103系列的开发板为载体,任何一款STM32开发板都是在其最小系统基础上 ...

  9. ExtJS 4.2 教程-08:布局系统详解

    ExtJS 4.2 系列教程导航目录: ExtJS 4.2 教程-01:Hello ExtJS ExtJS 4.2 教程-02:bootstrap.js 工作方式 ExtJS 4.2 教程-03:使用 ...

最新文章

  1. python画指数函数图像_解决python中的幂函数、指数函数问题
  2. ajax获取php echo值,ajax 接受 php echo 与 return 区别
  3. 大型软件公司.net面试题!一定得看(附答案)
  4. 虚幻4蓝图快速入门(二)
  5. 【动态规划】 石子合并问题(环形) (ssl 1597)
  6. FPGA(7)--有限状态机--交通灯
  7. UVA 11825 状态压缩DP+子集思想
  8. 联想90W快充是假的吗?官方回应:我们不玩文字游戏
  9. CAD图层管理技巧 使画图效率事半功倍
  10. 前端与移动开发----微信小程序----小程序(一)
  11. 两个分数化简比怎么化_分数比化简比练习题及答案.doc
  12. 小米平板2刷哪个系统更流畅_小米平板2刷lineage os与remix os及其体验
  13. 暑假计算机培训心得体会,暑期培训心得体会模板集锦10篇
  14. 那些年用过的机械键盘#入坑keychron#
  15. 快讯:预装Ubuntu 11.10小电脑南非开卖
  16. 32岁医生放弃医院编制,转行去做程序员!
  17. 把图片转换成二进制--把二进制转换成图片
  18. MFC提示this application has requested the runtime to terminate it in an unusual way editbox框已经删了还在使用
  19. 微信小程序:星座运势,周公解梦流量主微信小程序
  20. 锐浪html5打印,WEB打印

热门文章

  1. oracle的md5加密
  2. Python常见数据结构整理
  3. 宏定义和Typedef区别?
  4. php网站404页面302,404页面该怎么做?
  5. C++11与设计模式的交流
  6. 关于loader asyncTaskLoader AsyncTask的理解
  7. Http协议中的方法
  8. 上海经济适用房申请条件
  9. js(三) ajax异步局部刷新技术底层代码实现
  10. 转载:百度地图api 常用 例子