您当前的位置: 首页 >  嵌入式

韩曙亮

暂无认证

  • 0浏览

    0关注

    1068博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【嵌入式开发】时钟初始化 ( 时钟相关概念 | 嵌入式时钟体系 | Lock Time | 分频参数设置 | CPU 异步模式设置 | APLL MPLL 时钟频率设置 )

韩曙亮 发布时间:2018-08-15 21:14:41 ,浏览量:0

文章目录
  • 一. 时钟相关概念解析
    • 1. 相关概念术语
      • ( 1 ) 时钟脉冲信号 ( 概念 : 电压幅度 时间间隔 形成脉冲 | 作用 : 时序逻辑基础 间隔固定 根据脉冲数量可计算出时间 )
      • ( 2 ) 时钟脉冲频率 ( 概念 : 单位时间内产生的脉冲个数 )
      • (3) 时钟源 ( 产生来源 : ① 晶振 ② 锁相环 PLL | 晶振 : 晶体震荡电路 | PLL 锁相环 : 晶振 + PLL 合成 | 晶振 与 PLL 对比 优缺点 )
  • 二. 时钟体系简介
    • 1. 2440 开发板 时钟体系
      • (1) 2440 开发板时钟体系介绍 ( 12MHz 晶振 | 2 PLL : ① MPLL ② UPLL | MPLL -> ① FCLK [ ARM 核 ] ② HCLK [ AHB 总线 ] ③ PCLK [ APB 总线 ] | UPLL -> UCLK [ USB 总线 ] )
      • (2) 6410 开发板时钟体系介绍 ( 12MHz 晶振频率 | 3 PLL : ① APLL ② MPLL ③ EPLL | APLL -> ACLK [ ARM 核 ] | MPLL -> ① HCLK [ AHB 总线 ] ② PCLK [ APB 总线 ] | EPLL -> SCLK [ USB 总线 ] )
      • (3) S5PV210 开发板时钟体系介绍 ( 24MHz 晶振频率 | 4 PLL ① APLL ② MPLL ③ EPLL ④ VPLL )
  • 三. S3C6410 初始化时钟
    • 1. S3C 6410 时钟初始化流程简介
      • (1) CPU 频率变化过程 ( ① 上电后 12MHz | ② 配置 PLL | ③ 处于 Lock Time 频率 0Hz | ④ 正常 PLL 频率 )
      • (2) 时钟初始化的四个步骤 ( ① 配置 Lock Time | ② 设置分频系数 | ③ 设置 APLL MPLL 频率 | ④ 设置 CPU 工作模式 -> 异步工作模式 )
    • 2. S3C 6410 时钟初始化 汇编代码编写
      • (1) 配置 Lock Time
      • (2) 设置分频系数
      • (3) 设置 CPU 异步工作模式
      • (4) 设置 APLL 和 MPLL 时钟频率
      • (5) 设置 时钟源
      • (6) 代码示例
    • 3. 链接器脚本
    • 4. Makefile 编译脚本
    • 5. 编译输出可执行文件
    • 6. 烧写代码到开发板并执行
      • ( 1 ) OK6410 开发板启动切换方式
      • ( 2 ) 制作 SD 卡启盘 并 准备程序
      • ( 3 ) SecureCRT 连接开发板并烧写程序
    • 7. 将程序烧写到开发板上运行 ( 仅做参考 )

本博客的参考文章及相关资料下载 :

  • 1.本博客代码及参考手册下载 :https://download.csdn.net/download/han1202012/10606616
一. 时钟相关概念解析 1. 相关概念术语 ( 1 ) 时钟脉冲信号 ( 概念 : 电压幅度 时间间隔 形成脉冲 | 作用 : 时序逻辑基础 间隔固定 根据脉冲数量可计算出时间 )

时钟脉冲信号 :

这里写图片描述

  • 1.概念 : 按照 一定的电压幅度 和 一定的时间间隔 , 连续发出的 脉冲信号, 就是 时钟 脉冲信号;
  • 2.重要作用 : 时钟脉冲信号 是 时序逻辑的 基础, 脉冲信号的 间隔是固定的, 可以 根据脉冲信号的个数 及 间隔 计算出对应的时间 ;
  • 3.应用场景 : 芯片 中的 晶体管 工作状态 都是由 0 1 组成, 即 开和关, 控制这些开关操作都是 按照 时钟信号 的 节奏 进行 的;
  • 4.说明示例 : 现在的主流 CPU i7 8700K 主频是 3.7GHz, 其中 1 GHz = 10^3 MHz = 10^6 KHz = 10^9 Hz 即 10亿 Hz, 每秒钟有 37亿 次时钟脉冲信号; 也就是 经常说的 每秒钟 运算 37 亿次; 当前的超级计算机可以到达 每秒 2亿亿次;
( 2 ) 时钟脉冲频率 ( 概念 : 单位时间内产生的脉冲个数 )

时钟脉冲频率 :

  • 1.概念 : 单位时间内 产生 的 时钟脉冲个数 就是 时钟脉冲频率;
  • 2.举例 : 1秒中 产生 1次, 就是 1Hz, 1秒钟产生 100 次就是 100Hz, 上面举例的 i78700K CPU, 一秒钟产生 37亿次, 就是 3.7GHz 的时钟脉冲频率;
(3) 时钟源 ( 产生来源 : ① 晶振 ② 锁相环 PLL | 晶振 : 晶体震荡电路 | PLL 锁相环 : 晶振 + PLL 合成 | 晶振 与 PLL 对比 优缺点 )

时钟源 : 时钟脉冲信号 是由 晶振 或 锁相环 PLL 产生;

  • 1.晶振 : 全称 晶体振荡器, 是由 石英晶体 制作的, 石英晶体 ① 按照一定的方位角 切割, 并 ② 在其内部添加电子元件组成振荡电路;
    • ① 震荡特性 : 如果 给晶振通电, 就会产生机械震荡, 其 频率由 制作的材质, 切割角度 等决定;
    • ② 物理特性 : 石英非常 稳定, 其控制的 震荡频率也很稳定, 其 频率可以根据集合尺寸精确控制;
    • ③ 晶振优势 : 晶振具有 A. 结构简单, B. 噪音低, C. 可提供精确定制的频率, 等优点;
    • ④ 晶振缺陷 : A. 生产成本高 , B. 交货的周期很长;
  • 2.PLL(锁相环) : 锁相环 比 晶振 更复杂, PLL 需要一个外部晶振作为输入, PLL 可以对外部晶振产生的频率进行 加倍 或 分频 操作, 即 提高 或 降低 频率;
    • ① 使用场景 : 简单系统一般采用 石英晶振, 复杂的系统采用 晶振 + PLL 合成 提供时钟源;
    • ② 降低成本 : 如果需要特定的时钟频率, 可以使用 PLL + 低频晶振 代替高频的晶振 , 这样成本比较低;
    • ③ 多时钟频率系统 : 如果 在一个设备上需要多个时钟频率系统, 可以使用 PLL + 晶振 合成提供时钟源, PLL 将 晶振频率 进行 加倍 或 分频 即可得到不同频率的时钟源;
    • ④ 与晶振对比 : PLL + 晶振 比 纯晶振 成本要低, 并且提供更加灵活多变的时钟频率 ;
二. 时钟体系简介

时钟体系学习步骤 : 对不不同的时钟体系, 需要按照下面的学习步骤学习即可; ① 晶振频率 ; ② PLL 个数 及 种类 ; ③ PLL 产生的时钟类型; ④ PLL 产生的时钟作用;

1. 2440 开发板 时钟体系

参考手册 : S3C2440.pdf , 章节 : 7 CLOCK & POWER MANAGEMENT , Page 235;

(1) 2440 开发板时钟体系介绍 ( 12MHz 晶振 | 2 PLL : ① MPLL ② UPLL | MPLL -> ① FCLK [ ARM 核 ] ② HCLK [ AHB 总线 ] ③ PCLK [ APB 总线 ] | UPLL -> UCLK [ USB 总线 ] )

2440 开发板时钟体系介绍 :

  • 1.晶振频率 : 12MHz;
  • 2.PLL (锁相环) : 有 2 个 PLL, 分别是 MPLL 和 UPLL;
  • 3.产生时钟个数 : ① MPLL 锁相环 产生出 FCLK , HCLK, PCLK 三个时钟; ② UPLL 锁相环 产生出 UCLK 时钟;
  • 4.各个时钟作用 :
    • ① FCLK 时钟作用 : 处理器 中使用, ARM 核使用的时钟是 FCLK, 该时钟是 MPLL 产生的;
    • ② HCLK 时钟作用 : AHB 总线中使用, 如 LCD, DMA 控制, 该时钟是 MPLL 产生的;
    • ③ PCLK 时钟作用 : APB 总线中使用, 如 Uart 串口, GPIO, 该时钟是 MPLL 产生的;
    • ④ UCLK 时钟作用 : USB 总线中使用, 该时钟是 UPLL 产生的;
  • 5.2440 时钟体系图示 : 该图在 S3C2440.pdf 文档中的 7 CLOCK & POWER MANAGEMENT 章节, 237 页 ;

这里写图片描述

(2) 6410 开发板时钟体系介绍 ( 12MHz 晶振频率 | 3 PLL : ① APLL ② MPLL ③ EPLL | APLL -> ACLK [ ARM 核 ] | MPLL -> ① HCLK [ AHB 总线 ] ② PCLK [ APB 总线 ] | EPLL -> SCLK [ USB 总线 ] )

参考手册 : S3C6410X.pdf , 章节 : 3.3.4.1 Clock selection between PLLs and input reference clock , Page 124;

6410 开发板时钟体系介绍 :

  • 1.晶振频率 : 12MHz;
  • 2.PLL (锁相环) : 有 3 个 PLL, 分别是 APLL , MPLL 和 EPLL;
  • 3.产生时钟个数 : ① APLL 锁相环 产生出 ACLK 一个时钟; ② MPLL 锁相环 产生出 HCLK, PCLK 时钟; ③ EPLL 产生 SCLK 时钟;
  • 4.各个时钟作用 :
    • ① ACLK 时钟作用 : 处理器中使用, ARM核中使用 ACLK 时钟, 该时钟是 APLL 锁相环产生;
    • ② HCLK 时钟作用 : AHB 总线中使用, 如 LCD, DMA ; 该时钟是 MPLL 产生的;
    • ③ PCLK 时钟作用 : APB 总线中使用, 如 Uart 串口, GPIO 中使用, 该时钟是 MPLL 产生的;
    • ④ SCLK 时钟作用 : USB 总线中使用, 该时钟是 EPLL 锁相环产生的;
  • 5.6410时钟体系图示 : 该图在 S3C6410X.pdf 文档中的 3.3.4.1 Clock selection between PLLs and input reference clock 章节, 124 页 ;

这里写图片描述

(3) S5PV210 开发板时钟体系介绍 ( 24MHz 晶振频率 | 4 PLL ① APLL ② MPLL ③ EPLL ④ VPLL )

参考手册 : S5PV210_UM_REV1.1.pdf , 章节 : 3.4 CLOCK GENERATION , Page 361;

S5PV210 开发板时钟体系介绍 :

  • 1.晶振频率 : 24MHz;
  • 2.PLL (锁相环) : 有 4 个 PLL, 分别是 APLL , MPLL , EPLL 和 VPLL;
  • 3.S5PV210 的 时钟体系分类 : 分为 以下 三类 ;
    • ① 主系统时钟体系 : MSYS , 由 APLL 锁相环产生, 产生的时钟有 ARMCLK, HCLK_MSYS, PCLK_MSYS , 应用在 ARM 核 中;
    • ② 显示相关时钟体系 : DSYS , 由 MPLL 锁相环产生, 产生的时钟有 HCLK_DSYS, PCLK_DSYS, 主要应用在显示相关的部件中 ;
    • ③ 外围设备时钟体系 : PSYS , 由 EPLL 锁相环产生, 产生的时钟有 HCLK_PSYS, CLK_DPM, 主要用于外设, 如 Uart 串口 等;
    • ④ VPLL 锁相环产生的时钟 : VPLL 产生的时钟 主要用于视频处理;
  • 4.S5PV210时钟体系图示 : 该图在 S5PV210_UM_REV1.1.pdf 文档中的3.4 CLOCK GENERATION, 361 页 ; 这里写图片描述
三. S3C6410 初始化时钟 1. S3C 6410 时钟初始化流程简介 (1) CPU 频率变化过程 ( ① 上电后 12MHz | ② 配置 PLL | ③ 处于 Lock Time 频率 0Hz | ④ 正常 PLL 频率 )

CPU 上电后 从 低频率 到 高频率的变化过程 :

  • 1.上电后的工作频率 : 上电后 ARM 核的工作频率就是晶振频率, 即 12MHz, 这个速度非常慢;
  • 2.配置锁相环 : 配置锁相环, 使 频率 增加;
  • 3.Lock Time 时间 : 配置 PLL 锁相环后, 会出现一段不工作的时间, 此时 CPU 频率为 0Hz, 这段时间叫 Lock Time;
  • 4.正常频率 : 在 Lock Time 之后, 就会进入正式的 锁相环 工作频率, 此时的频率是 晶振频率 经过 锁相环 处理后的 高频率;
  • 5.图示 : 下图是处理器上电后各种参数的变化, 横轴是时间轴, 没有纵轴, 各个参数在上电后的每个时间段的表现; 这里写图片描述

整个时钟初始化流程是需要软件帮助进行的, 因此这些步骤需要开发者进行开发, 这也是该博客的主要内容;

(2) 时钟初始化的四个步骤 ( ① 配置 Lock Time | ② 设置分频系数 | ③ 设置 APLL MPLL 频率 | ④ 设置 CPU 工作模式 -> 异步工作模式 )

时钟初始化流程 :

  • 1.配置 Lock Time : 配置 PLL 锁相环后会有一段 CPU 频率为 0 的时间, 这段时间处理器不工作, 这段时间就是 Lock Time;
  • 2.设置分频系数 : 通过 为 不同的时钟设置不同的分频系数, 根据这个分频系数, 来确定每个时钟的频率;
  • 3.设置 APLL MPLL 频率 : 设置一个时钟的频率, 可以根据分频系数计算出其它所有时钟的频率了;
  • 4.设置 CPU 工作模式 : 如果 FCLK 与 HCLK 的频率不同, 那么 CPU 需要设置为 异步工作模式, FCLK 是 ARM 核的时钟, HCLK 是 总线时钟, 如果两个时钟不一致, 需要将 CPU 设置为 异步工作模式;
    • ① 常用设置 : 一般情况下 设置 分频系数的时候, 不会给 FCLK 与 HCLK 设置相同的分频系数, 因此, 该步骤大部分情况下都要执行;
2. S3C 6410 时钟初始化 汇编代码编写

参考手册 : ARM芯片 手册 S3C6410X.pdf ( 基于 6410 开发板 ARM 11 )

  • 1.手册对应章节 : 3 SYSTEM CONTROLLER;
  • 2.S3C6410X.pdf手册下载地址 :
(1) 配置 Lock Time

配置 Lock Time :

  • 1.文档位置 : S3C6410X.pdf 手册, Page 141, 3.4.2.1 PLL Control Registers 章节; 这里写图片描述
  • 2.默认设置不变 ( 推荐 ) : 一般情况下, 使用开发板的默认设置即可, 如果有特殊定制需求才修改该 PLL_LOCK 寄存器的值;
(2) 设置分频系数

设置分频系数 :

  • 1.相关文档位置 : S3C6410X.pdf 手册, Page 125, 3.3.4.2 ARM and AXI/AHB/APB bus clock generation 章节; 这里写图片描述
  • 2.APLL 锁相环 : 12 MHz 的晶振频率, 经过 APLL 锁相环 产生 输出时钟, 该输出时钟 经过 DIVARM 分频, 产生 ARMCLK, 这是 ARM 核使用的时钟;
  • 3.MPLL 锁相环 : 12MHz 晶振频率时钟, 经过 MPLL 锁相环 产生的 时钟, 该时钟 经过 DIVHCLKX2 分频后, 产生 HCLKx2 时钟, 同时 DIVHCLKX2 分频后的时钟 又 经过不同的 分频 产生 HCLK, PCLK, CLKJPEG, CLKSECUR 时钟;
    • ① HCLK 时钟 : HCLKx2 时钟 经过 DIVHCLK 分频后, 产生 HCLK 时钟;
    • ② PCLK 时钟 : HCLKx2 时钟 经过 DIVPCLK 分频后, 产生 PCLK 时钟;
    • ③ CLKJPEG 时钟 : HCLKx2 时钟 经过 DIVCLKJPEG 分频后, 产生 CLKJPEG 时钟;
    • ④ CLKSECUR 时钟 : HCLKx2 时钟 经过 DIVCLKSECUR 分频后, 产生 CLKSECUR 时钟;
  • 4.分频参数参考 : 不同的时钟分频器的分频参数列表 , 来源 S3C6410X.pdf 手册, Page 126, 3.3.4.2 ARM and AXI/AHB/APB bus clock generation 章节; 这里写图片描述
  • 5.时钟分频公式 : 文档位置 S3C6410X.pdf 手册, Page 126, 3.4.2.3 Clock divider control register 章节;
    • ① DIVARM 分频公式 : ARMCLK = DOUTAPLL / (ARM_RATIO + 1) , DOUTAPLL 是 APLL 锁相环输出的时钟, ARM_RATIO 是设置的分频系数;
    • ② DIVHCLKX2 分频公式 : HCLKX2 = HCLKX2IN / (HCLKX2_RATIO + 1), HCLKX2IN 是 MPLL 锁相环的输出时钟频率, HCLKX2_RATIO 是设置的分频系数;
    • ③ DIVHCLK 分频公式 : HCLK = HCLKX2 / (HCLK_RATIO + 1), HCLKX2 是 DIVHCLKX2 分频后的时钟频率, HCLK_RATIO 是设置的分频系数;
    • ④ DIVPCLK 分频公式 : PCLK = HCLKX2 / (PCLK_RATIO + 1), HCLKX2 是 DIVHCLKX2 分频后的时钟频率, PCLK_RATIO 是设置的分频系数;
  • 6.PLL 锁相环输出频率 :
    • ① APLL 锁相环输出频率 : 533 MHz ;
    • ② MPLL 锁相环输出频率 : 533 MHz ;
  • 7.具体参考参数设置 : 从 6410 开发板中的 u-boot 源码中查找相关的时钟 分频系数 ;
    • ① DIVARM 分频参数 : 0 , APLL 输出频率为 533MHz, 根据公式计算 ARMCLK 时钟频率为 533MHz;
    • ② DIVHCLKX2 分频参数 : 1 , MPLL 输出频率 533MHz, 根据公式计算 HCLKX2 时钟为 266 MHz;
    • ③ DIVPCLK 分频参数 : 3 , HCLKX2 时钟为 266 MHz, PCLK 频率为 66MHz;
    • ④ DIVHCLK 分频参数 : 1 , HCLKX2 时钟为 266 MHz, HCLK 频率为 133MHz;

设置分频系数代码编写 :

  • 1.定义分频控制寄存器( Clock divider control register ) 地址 : 之前说的 分频参数 都是通过 CLK_DIV0 寄存器设置的, 将 CLK_DIV0 的地址定义成常量, #define CLK_DIV0 0x7E00F020; 这里写图片描述
  • 2.定义分频参数的值 : 参考 CLK_DIV0 值的表格 设置 CLK_DIV0 寄存器的实际值;
    • ① 定义 ARM_RATIO 分频参数 : 这个参数设置成 0, CLK_DIV0 寄存器的 [3:0] 位 设置该参数, 该参数单独为 0x0
关注
打赏
1663594092
查看更多评论
立即登录/注册

微信扫码登录

0.0508s