exynos4412—CMU裸板复习
本章描述了Exynos 4412 SCP的时钟管理单元(CMUs)。在Exynos 4412 SCP中,CMUs控制相位锁相环(PLLs),并为CPU、总线和单个ip的功能时钟生成系统时钟。它们还与电源管理单元(PMU)通信,以便在进入某些低功耗模式之前停止时钟,从而通过最小化时钟切换来降低功耗。
7.1时钟域
在Exynos 4412 SCP中,它将函数块彼此异步计时,以提供更广泛的操作频率选择。它还简化了物理实现。
- CPU块由Cortex-A9 MPCore处理器、L2缓存控制器和CoreSight组成。它的工作电压为0.875 V-1.30 V。Cortex-A9 MPCore的工作频率为200MHz - 1.4 GHz,核心视程时钟最高可达200MHz。CPU块中的CMU (CMU CPU)为CPU块中的ip生成所有必要的时钟。它还为Cortex-A9 MPCore产生一定的控制信号。
- DMC块由DRAM内存控制器(DMC)、安全子系统(SSS)和通用中断控制器(GIC)组成。DMC块中的CMU (CMU_DMC)生成400mhz DRAM时钟,200mhz与DRAM时钟同步的AXI总线时钟,100MHz时钟用于寄存器访问。它还为加速器相干端口(ACP)总线生成200mhz时钟,用于内存相干性检查并连接CPU和SSS总线主机。
- 左总线和右总线块包含全局数据总线,它们的时钟频率为200mhz。全局数据总线在DRAM和各个子块之间传输数据。它还包含以100兆赫兹为时钟的全局外围总线。您可以使用100mhz时钟进行寄存器访问。
- CMU TOP为所有剩余的功能块生成时钟,包括G3D、MFC、LCDO、ISP、CAM TV。FSYS, MFC, GPS, MAUDIO, danger和PERIR。它生成运行在400 / 200 / 160/ 133/ 100 MHz的总线时钟。它还生成各种特殊的时钟来操作Exynos 4412 SCP中的IPs
- 另外,异步总线桥接被插入到两个不同的功能块之间。
做串口的时候所用时钟,时钟源还为外围总线提供时钟源
硬件来说,一共有三种:锁相环、选择器、分频器。
PLL结尾的:锁相 环,用于倍频
DIV:分频器
例如:
核心板中可以找到相应引脚:
APLL_CON0中:
MDIV | [25:16] | RWX | PLL M Divide Value | 0xC8 |
PDIV | [13:8] | RWX | PLL P Divide Value | 0x6 |
SDIV | [2:0] | RWX | PLL S Divide Value | 0x1 |
锁相环与时钟管理相关配置表:
以串口时钟为例分析:
回到第七章去找
我想从后往前找,看它的分频因子是多少,
试着搜索 divuart0后:
开始验证:
打印:
结果:
低四位 = 7
MOUTUART0 / (UART0_RATIO + 1) = MOUTUART0 / (7 + 1)
MOUTUART0取决于 八位选择器的输出 ,存在于与这个寄存器相关的某一个区域:搜索MUXUART0
结果:
我们打印这个寄存器的值:
结果:
选择的时钟源即为:SCLKMPULL_USER_T
打印第四位,查看结果:
结果:
下面打印一下
结果:
找完一圈,找到了
即,800 / 8 = 100 MHz
至此,分析出了UART的时钟源为100MHz
注意:以上是在bootloader层面去验证,如果从事bootloader的设计的话,要自己设置这些寄存器得到想要的时钟频率。
exynos4412—CMU裸板复习的更多相关文章
- exynos4412—UART裸板复习
我们通过RS232来做实验. 通过电平转换芯片, 连接至核心板: 即:GPA0_0 GPA0_1 配置引脚为串口专用模式: 然后看 ULCONn [31:0] 0x3 设置串口 ...
- S5PV210裸板驱动:启动
以往2440和6410的启动方式,只要我们把裸板代码烧写到NAND FLASH的开始位置,当开发板上点启动时,处理器会自动从NAND FLASH上拷贝前面一段的代码到内部的RAM中执行.按照以前的方法 ...
- 嵌入式 hi3518c裸板uboot烧写、kernel烧写、fs烧写小结
1.在uboot中我可以添加自己的命令,添加的方法是找到一个uboot的命令,然后模仿着去增加属于自己的命令代码以及实现函数就可以 2.记住在使用printf进行调试的时候,在遇到指针或者字符串的时候 ...
- 裸板驱动总结(makefile+lds链接脚本+裸板调试)
在裸板2440中,当我们使用nand启动时,2440会自动将前4k字节复制到内部sram中,如下图所示: 然而此时的SDRAM.nandflash的控制时序等都还没初始化,所以我们就只能使用前0~40 ...
- uboot-tiny4412启动流程(下)----如何将自己的裸板测试程序加入uboot中启动测试
今天在工作上搞了一天高通的芯片uboot程序,目的是希望将一个裸板的程序移植到uboot中,并且开机让它运行.这个芯片是NXP4330,目前是高通的一个芯片,基于ARM-contexA9架构,那么就跟 ...
- 关于在arm裸板编程时使用printf问题的解决方法
在ARM裸板驱动编程中,是不允许程序直接调用C库程序的.为什么呢?因为此时kernel还没有被加载,所以在封装在kernel层的C库的API是用不了的,那怎么办? 在开发过程中,printf的功能我不 ...
- 【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705 参考博客 : [嵌入式开发]嵌入式 开发环境 (远 ...
- [转载非常好的文章]JLink+GDBServer调试S3C6410裸板的初始化代码 For OK6410开发板
要调试裸板,有两种初始化方法,一个是用烧好的uboot初始化,再有就是直接用JLink+GDBServer初始化.代码参考了网上的资料,根据手头的OK6410开发板做了修改.整体代码如下: # Con ...
- Mini2440 通过 SPI 操作 OLED (裸板下使用 SPI 控制器)
在裸板下使用 SPI 的话,有两种方法可选: 使用 IO 口模拟 SPI 进行操作 使用 SPI 控制器进行操作 这里我们选用控制器的方式,简单方便. 初始化 SPI static void SPIC ...
随机推荐
- Windows Azure系列公开课 - 第三课:创建虚拟机 (基础篇)
Windows Azure微软智能云平台主要提供四大类服务:计算服务(Compute),数据服务 (Data Services) ,应用服务 (App Services) ,网络服务(Network) ...
- C++学习笔记——C++简介
1.C++发展史 C++语言来源于C语言,在C语言的基础上增加了面向对象设计的要素从而得到了发展. 1979 年,C++ 是由 Bjarne Stroustrup在新泽西州美利山贝尔实验室开始设计开发 ...
- 集合、深浅copy
集合set: 集合也和列表数组一样有增加,但是集合是真正的没有顺序的 所以集合无法查找的,并且集合的外观你看着好像是字典和列表的组合,因为它是用字典的括号一样 ,但是又是里面并没有键值对 只是一个 ...
- 4 Dockerfile指令详解 && COPY 指令
COPY 指令将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置.比如: COPY package.json /usr/src/app/ ...
- 月报 提取/保存 到OneDrive. 并发送反馈邮件
- mysql_fetch_row,mysql_fetch_array,mysql_fetch_object,mysql_fetch_assoc
php从mysql中访问数据库并取得数据,取得结果的过程中用到好几个类似的方法,区别及用法值得区分一下,看下面的代码 代码如下: <?php $link=mysql_connect('local ...
- Scala隐式转换和隐式参数
隐式转换 Scala提供的隐式转换和隐式参数功能,是非常有特色的功能.是Java等编程语言所没有的功能.它可以允许你手动指定,将某种类型的对象转换成其他类型的对象或者是给一个类增加方法.通过这些功能, ...
- Maven创建项目一些常见的问题
1 .创建的项目中没有src/main/java.没有src/test/java 主要原因在于在创建项目的时候,使用的是系统自带的jdk,修改方法: 右键项目——Properties——javaBui ...
- vlc-android native调试配置
1, 按照官网给出的链接,git clone代码,配置好android sdk,ndk...后运行compile.sh; 2, 出现一个protobuf相关的问题(貌似要求protobuf3),自己去 ...
- CC2640R2F&TI-RTOS 拿到 TI CC2640R2F 开发板 第三件事就是使用 TI-RTOS 创建 一个任务 和 使用 信号量 超时来闪烁 LED灯
/* * data_process.c * * Created on: 2018年7月5日 * Author: admin */ #include <ti/sysbios/knl/Task.h& ...