ARM裸机-14(S5PV210的时钟系统)
1、时钟系统
1.1、什么是时钟
时钟是同步工作系统的同步节拍
1.2、SoC为什么需要时钟
Soc内部有很多器件,例如CPU、串口、DRAM控制制器、GPIO等内部外设,这些东西要彼此协同工作,需要一个同步的时钟系统来指挥。这个就是我们SoC的时钟系统。
1.3、时钟一般如何获得
(1)外部直接输入时钟信号,SoC有个引脚用来输入外部时钟信号,用的很少。
(2)外部晶振+内部时钟发生器产生时钟,大部分低频单片机都是这么工作的。
(3)外部晶振+内部时钟发生器+内部PLL产生高频时钟+内部分频器分频得到各种频率的时钟,210属于这种。
1.3.1、为什么不用外部高频晶振产生高频信号直接给CPU
主要是因为芯片外部电路不适宜使用高频率,因为传导辐射比较难控制;高频率的晶振太贵了。
1.3.2、为什么要内部先高频然后再分频
主要因为SoC内部有很多部件都需要时钟,而且各自需要的时钟频率不同,没法统一供应。因此设计思路是PLL后先得到一个最高的频率 (1GHZ、1.2GHz),然后各外设都有自己的分频器再来分频得到自己想要的频率
1.4、时钟和系统性能的关系、超频、稳定性
一般SoC时钟频率都是可以人为编程控制的,频率的高低对系统性能有很大影响。
S5PV210建议工作频率800MHZ~1.2GHZ, 一般我们都设置到1GHz主频。如果你设置到1.2GHZ就叫超频。超频的时候系统性能会提升,但是发热也会增大,因此会影响系统稳定性。
1.5、时钟和外设编程的关联
每个外设工作都需要一定频率的时钟,这些时钟都是由时钟系统提供的。时钟系统可以编程控制工作模式,因为程序员可以为每个外设指定时钟来源、时钟分频系统,从而制定这个外设的工作时钟。
1.6、时钟和功耗控制的关系
(1)SoC中各种设备工作时,时钟频率越高其功耗越大,发热越大,越容易不稳定,需要外部的散热条件越苛刻。
(2)SOC内部有很多外设,这些外设不用的时候最好关掉 (不关掉会一定程度浪费电),开关外设不是通过开关而是通过时钟。也就是说我们给某个外设断掉时钟,这个外设就不工作了。
2、S5PV210的时钟系统
2.1、时钟域:MSYS、DSYS、PSYS
因为S5PV210的时钟体系比较复杂,内部外设模块太多,因此把整个内部的时钟划分为3大块叫做3个域。、
(1)MSYS::CPU (Cortex-A8内核)、DRAM控制器 (DMCO和DMC1)、IRAM&IROM......
(2)DSYS:都是和视频显示、编解码等有关的模块。
(3) PSYS:和内部的各种外设时钟有关,例如串口、SD接口、I2C、AC97、USB等
2.1.1、为什么内部要分为3个域,怎么划分的
因为210内部的这些模块彼此工作时钟速率差异太大了,所以有必要把告诉的放在一起,相对低速的放在一起。
2.1.2、MSYS域
ARMCLK:给cpu内核工作的时钟,也就是所谓的主频。
HCLK_MSYS:MSYS域的高频时钟,给DMCO和DMC1使用
PCLK_MSYS:MSYS域的低频时钟
HCLK_IMEM:给iROM和iRAM (合称iMEM)使用
2.1.3、DSYS域
HCLK_DSYS:DSYS域的高频时钟
PCLK_DSYS:DSYS域的低频时钟
2.1.4、PSYS域
HCLK_PSYS:PSYS域的高频时钟
PCL_PSYS:PSYS域的低频时钟
SCLK_ONENAND:
2.1.5、总结
210内部的各个外设都是接在(内部AMBA总线)总线上面的,AMBA总线有1条高频分支叫AHB,有一条低频分支叫APB。上面的各个域都有各自对应的HCLK_XXX和PCLK_XXX,其中HCLK_XXX就是XXX这个域中AHB总线的工作频率:PCLK_XXX就是XXX这个域中APB总线的工作频率。
SoC内部的各个外设其实是挂在总线上工作的,也就是说这个外设的时钟来自于他挂在的总线,例如串口UART挂在PSYS域下的APB总线上,因此串口的时钟来源是PCLK_PSYS。
可以通过记住和分析上面的这些时钟域和总线数值,来确定我们各个外设的具体时钟频率。
2.2、时钟来源:晶振+时钟发生器+PLL+分频电路
S5PV210外部有4个晶振接口,设计板子硬件时可以根据需要来决定在哪里接晶振。接了晶振之后上电相应的模块就能产生振荡,产生原始时钟。原始时钟再经过一系列的筛选开关进入相应的PLL电路生成倍频后的高频时钟。高频时钟再经过分频到达芯片内部各模块上。 (有些模块,例如串口内部还有进一步的分频器进行再次分频使用)
2.3、PLL:APLL、MPLL、EPLL、VPLL
APLL: Cortex-A8内核 MSYS域
MPLL&EPLL:DSYS PSYS
VPLL:video视频相关模块
2.4、各时钟的典型值(默认值,iROM中设置的值)
(1)当210刚上电时,默认是外部晶振+内部时钟发生器产生的24MHz频率的时钟直接给ARMCLK的,这时系统的主频就是24MHz,运行非常慢。
(2)iROM代码执行时第6步中初始化了时钟系统,这时给了系统一个默认推荐运行频率。这个时钟频率是三星推荐的210工作性能和稳定性最佳的频率。
(3)各时钟的典型值:
freq(ARMCLK) = 1000 MHz
freq(HCLK_MSYS) = 200 MHZ
freq(HCLK_IMEM) = 100MHz
freq(PCLK_MSYS) = 100MHz
freq(HCEK_DSYS) = 166 MHz
freq(PCLK_DSYS) = 83 MHz
freq(HCLK_PSYS) = 133 MHz
freq(PCLK_PSYS) = 66MHz
freq(SCLK_ONENAND) = 133 MHz,166 MHz
2.5、S5PV210时钟体系框图
(1)时钟体系框图的位置:数据手册P361&P362,Figure3-3
(2)两张图之间是渐进的关系。第一张图从左到右依次完成了原始时钟生成->PLL倍频得到高频时钟->初次分频得到各总线时钟,第二张图是从各中间时钟 (第一张图中某个步骤生成的时钟)到各外设自己使用的时钟(实际就是个别外设自己再额外分频的设置)。可见,第一张图是理解整个时钟体系的关键,第二张图是进一步分析各外设时钟来源的关键。
(3)要看懂时钟体系框图,2个符号很重要:一个是MUX开关,另一个是DIV分频器
(3.1)MUX开关就是个或门,实际对应某个寄存器的某几个bit位的设置,设置值决定了哪条通道通的,分析这个可以知道右边的时钟是从左边哪条路过来的,从而知道右边时钟是多少
(3.2)DIV分频器,是一个硬件设备,可以对左边的频率进行n分频,分频后的低频时钟输出到右边。分频器在编程时实际对应某个寄存器中的某几个bit位,我们可以通过设置这个寄存器的这些对应bit位来设置分频器的分频系数(例如左边进来的时钟是80MHz,分频系数设置为8,则分频器右边输出的时钟频率为10MHz)。
(3.3)寄存器中的clock source x就是在设置MUX开关;clock divider control寄存器就是在设置分频器分频系数。
2.6、时钟设置的关键寄存器
2.6.1、xPLL_LOCK
xPLL_LOCK寄存器主要控制PLL锁定周期的。
2.6.2、xPLL_CON/xPLL_CONO/xPLL_CON1
PLL_CON寄存器主要用来打开/关闭PLL电路,设置PLL的倍频参数,查看PLL锁定状态等.
2.6.3、CLK_SRCn(n:0~6)
CLK_SRC寄存器是用来设置时钟来源的,对应时钟框图中的MUX开关。
2.6.4、CLK_SRC_MASKn
CLK_SRC_MASK决定MUX开关n选1后是否能继续通过。默认的时钟都是打开的,好处是不会因为某个模块的时钟关闭而导致莫名其妙的问题,坏处是功耗控制不精细、功耗高。
2.6.5、CLK_DIVn
各模块的分频器参数控制。
2.6.6、CLK_GATE_x
类似于CLK_SRC_MASK,对时钟进行开关控制。
2.6.7、CLK_DIV_STASn
状态位寄存器,用力啊查看DIV的状态是否已经完成还是在进行中。
2.6.8、CLK_MUX_STATn
状态位寄存器,用力啊查看MUX的状态是否已经完成还是在进行中。
2.6.7、总结
其中最重要的寄存器有3类::CON、SRC、DIV。其中CON决定PLL倍频到多少,SRC决定走哪一路,DIV决定分频多少。
3、汇编实现时钟设置代码
3.1、时钟设置的步骤分析
第1步:先选择不使用PLL。让外部24MHZ原始时钟直接过去,绕过APLL那条路。
第2步:设置锁定时间。默认值为0X0FFF,保险起见我们设置为0X0FFF。
第3步:设置分频系统,决定由PLL出来的最高时钟如何分频得到各个分时钟。
第4步:设置PLL,主要是设置PLL的倍频系统,决定由输入端24MHz的原始频率可以得到多大的输出频率。我们按照默认值设置输出为ARMCLK为1GHz。
第5步:打开PLL。前面4步已经设置好了所有的开关和分频系数,本步骤打开PLL后PLL开始
工作,锁定频率后输出,然后经过分频得到各个频率。
总结:以上5步,其实真正涉及到的寄存器只有5个而已。
3.2、CLK_SRC寄存器的设置分析
CLK_SRC寄存器其实是用来设置MUX开关的。在这里先将该寄存器设置为全0,主要是bit0和bit4设置为0,表示APLL和MPLL暂时都不启用。
3.3、CLK_LOCK寄存器的设置分析
设置PLL锁定延时的。官方推荐值为0xFFF,我们设置为0xFFFF
3.4、CLK_DIV寄存器的设置分析
0x14131440这个值的含义分析:
PCLK_PSYS = HCLK_PSYS / 2
HCLK_PSYS = MOUT_PSYS / 5
PCLK_DSYS = HCLK_DSYS / 2
HCLK_MSYS = ARMCLK / 5
ARMCLK = MOUT_MSYS /1
3.5、PLL倍频的相关计算
(1)、我们设置了APLL和MPLL两个,其他两个没有管。
(2)、APLL和MPLL设置的关键都是M、P、S三个值,这三个值都来自于官方数据手册的推荐值。
(3)、M、P、S的设置依赖《4.2.C语言位运算》中讲过的位运算技术。
3.6、结合寄存器、时钟框图、代码三者结合分析S5PV210的时钟系统
分析记得在图上做标记(把MUX开关选哪个和DIV分频多少都标出来),然后就清楚了。
4、C语言实现设置代码
4.1、C和汇编操作寄存器的不同
语法写法不同,核心是一样的
4.2、C的优势
位运算更加简单,C语言还是要简单一些
4.3、用C语言重写时钟初始代码
见代码
相关文章:
ARM裸机-14(S5PV210的时钟系统)
1、时钟系统 1.1、什么是时钟 时钟是同步工作系统的同步节拍 1.2、SoC为什么需要时钟 Soc内部有很多器件,例如CPU、串口、DRAM控制制器、GPIO等内部外设,这些东西要彼此协同工作,需要一个同步的时钟系统来指挥。这个就是我们SoC的时钟系统。…...

Milvus Cloud凭借AI原生,可视化优势荣登全球向量数据库性能排行榜VectorDBBench.com 榜首
在当今的大数据时代,随着人工智能技术的快速发展,向量数据库作为处理大规模数据的关键工具,其性能和效率越来越受到关注。最近,全球向量数据库性能排行榜 VectorDBBench.com 公布了一份最新的评估报告,引人瞩目的是,成立不到一年的新兴公司 Milvus Cloud 凭借其 AI 原生和…...

测试岗?从功能测试进阶自动化测试开发,测试之路不迷茫...
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 测试新人在想什么…...

算法与数据结构(五)--树【1】树与二叉树是什么
一.树的定义 树是一个具有层次结构的集合,是由一个有限集和集合上定义的一种层次结构关系构成的。不同于线性表,树并不是线性的,而是有分支的。 树(Tree)是n(n>0)个结点的有限集。 若n0&…...

打开的idea项目maven不生效
方法一:CtrlshiftA(或者help---->find action), 输入maven, 点击add maven projects,选择本项目中的pom.xml配置文件,等待加载........ 方法二:view->tools windows->mave…...

kvm+qemu+libvirt管理虚机
virt-manager 图形化创建虚拟机 #virt-manager纳管远程kvm虚拟机 # 可以指定kvm虚机的ssh端口和virt-manager所在主机的私钥 virt-manager -c qemussh://root10.197.115.17:5555/system?keyfileid_rsa --no-fork # 如果你生成的ssh-key 的名称是 test-key,在/home/ssh-key/ 目…...

电气防火限流式保护器在汽车充电桩使用上的作用
【摘要】 随着电动汽车行业的不断发展,电动汽车充电设施的使用会变得越来越频繁和广泛。根据中汽协数据显示,2022年上半年,我国新能源汽车产销分别完成266.1万辆和260万辆,同比均增长1.2倍,市场渗透率达21.6%。因此,电动汽车的安全…...

VBA技术资料MF38:VBA_在Excel中隐藏公式
【分享成果,随喜正能量】佛祖也无能为力的四件事:第一,因果不可改,自因自果,别人是代替不了的;第二,智慧不可赐,任何人要开智慧,离不开自身的磨练;第三&#…...

Gson:解析JSON为复杂对象:TypeToken
需求 通过Gson,将JSON字符串,解析为复杂类型。 比如,解析成如下类型: Map<String, List<Bean>> 依赖(Gson) <dependency><groupId>com.google.code.gson</groupId><art…...
伪彩色处理及算法
伪色彩(false color)是指将真实世界的中无法被肉眼观察到的色彩通过计算机或其他技术转换为可见光,从而使人们能够看到这些原本无法看到的色彩。这种技术被广泛应用于军事、医学、科研等领域。 在医学领域,伪色彩技术被用于医学影像诊断。例如,通过将不同灰度的图像映射到…...

Gradle-02:问题Plugin with id ‘maven‘ not found
1. 背景 在一次使用 Gradle 构建自己项目,完事,需要上传到本地 Maven 仓库,因为事先并不清楚 apply plugin: maven 插件已经被 Gradle 移除,找了一圈,才找到解决方案。 2. 原因 apply plugin: maven def localRepo f…...

jupyter lab环境配置
1.jupyterlab 使用虚拟环境 conda install ipykernelpython -m ipykernel install --user --name tf --display-name "tf" #例:环境名称tf2. jupyter lab kernel管理 show kernel list jupyter kernelspec listremove kernel jupyter kernelspec re…...

Unity Sort Group(排序组)
** Unity 中的Sort Group组组件允许让Sprite Renderer(精灵渲染器)重新决定渲染顺序. ** 作为组件存在 组件内容: Unity 使用Sort Group 组件的Sort layer 和Order in layer的值来确定排序组在渲染队列内相对与场景内其他排序组和游戏对象的优先级。 属性功能So…...

基于总线加锁和缓存锁(CPU实现原子操作的两种方式)
总线锁 总线锁就是使用处理器提供的一个LOCK#信号,当一个处理器在总线上输出此信号时,其他处理器的请求将被阻塞住,那么该处理器可以独占共享内存。 CPU和内存之间的通信被锁!! 如果多个处理器同时对共享变量进行读写…...

MybatisPlus存在 sql 注入漏洞(CVE-2023-25330)解决办法
首先我们了解下这个漏洞是什么? MyBatis-Plus TenantPlugin 是 MyBatis-Plus 的一个为多租户场景而设计的插件,可以在 SQL 中自动添加租户 ID 来实现数据隔离功能。 MyBatis-Plus TenantPlugin 3.5.3.1及之前版本由于 TenantHandler#getTenantId 方法在…...

【java】使用maven完成一个servlet项目
一、创建项目 创建一个maven项目 maven是一个管理java项目的工具,根据maven的pom.xml可以引入各种依赖,插件。 步骤 打开idea,点击新建项目 点击创建项目,项目创建就完成了 进入时会自动打开pom.xml文件。 pom是项目的配置文件…...

前端Vue入门-day07-Vuex入门
(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 自定义创建项目 vuex概述 构建 vuex [多组件数据共享] 环境 创建一个空仓库 state 状态 1. 提供数据&…...

2023再谈前端状态管理
目录 什么是状态管理? 状态 常见模式 要解决的问题 心智模型 React Context Context 的问题 优点 缺点 React 外部状态管理库 概览 Class 时代 Redux 单向数据流 三大原则 如何处理异步 如何处理数据间联动 优点 缺点 Dva icestore Mobx 设…...
ffmpeg SDL播放器--播放udp组播流
c调用ffmpeg api及SDL库播放播放udp组播流。 代码及工程见https://download.csdn.net/download/daqinzl/88168574 参考文档:https://blog.csdn.net/a53818742/article/details/109312740 开发工具:visual studio 2019 记得推送udp流,可采…...

__attribute__((noreturn))
GNU C 的一大特色就是__attribute__ 机制,__attribute__ 可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。 语法格式为: __attribute__((att…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...