当前位置: 首页 > news >正文

02:2440---时钟体系

目录

一:时钟控制

1:基本概念

2:时钟结构图

3:结构图分析

4:总线

5:寄存器

A:FCLK--MPLLCON

 B:HCLK和PCLK--CLKDIVN

C:注意

二:上电复位

1:上电复位

2:时钟选择

三:代码


一:时钟控制

1:基本概念

        S3C2440A中的时钟控制逻辑可以产生所需的时钟信号,包括CPU的FCLK、AHB总线外设的HCLK和APB总线外设的PCLK。S3C2440A具有两个锁相环(pll):一个用于FCLK,HCLK和PCLK, 另一个专用于USB块(48Mhz)。时钟控制逻辑可以制作无锁相环的慢时钟,并通过软件将时钟连接断开到各个外设块,从而降低功耗。

        对于电源控制逻辑,S3C2440A具有多种电源管理方案,以保持给定任务的最佳功耗。S3C2440A的电源管理模块可以激活四种模式:NORMAL模式、SLOW模式、IDLE模式和SLEEP模式。

        NORMAL模式:该模块为CPU以及S3C2440A中的所有外设提供时钟。在此模式下,当所有外设都打开时,功耗将达到最大。它允许用户通过软件控制外设的操作。例如,如果不需要定时器,用户可以断开时钟(CLKCON寄存器)对定时器的连接,以减少功耗。

        SLOW mode:非pll模式。与正常模式不同,慢速模式在S3C2440A中直接使用外部时钟(XTipll或EXTCLK)作为FCLK,没有PLL。在这种模式下,功耗仅取决于外部时钟的频率。不包括PLL的功耗。

        IDLE模式:块只断开CPU核心的时钟(FCLK),而它向所有其他外设提供时钟。IDLE模式可以降低CPU核的功耗。任何对CPU的中断请求都可以从空闲模式唤醒。

        SLEEP模式:模块断开内部电源。因此,在这种模式下,除了唤醒逻辑外,不会发生CPU和内部逻辑的功耗。激活SLEEP模式需要两个独立的电源。其中一个电源为唤醒逻辑提供电源。另一个提供包括CPU在内的其他内部逻辑,并且应该控制电源的开/关。在SLEEP模式下,CPU和内部逻辑的第二电源将关闭。从SLEEP模式唤醒可以由EINT[15:0]或RTC告警中断发出。

2:时钟结构图

主时钟源 : 来自外部晶体(XTip12MHz) 或外部时钟(EXTCLK)。时钟发生器包括一个振荡器(振荡放大器),它连接到外部晶体,也有两个锁相环(锁相环),它产生S3C2440A所需的高频时钟。

FCLK: 直接挂载在ARM芯片上面---400MHZ

HCLK------挂载在AHB总线上(高速总线)====>挂载了nand flash ,  LCD控制,  USB, 电源管理等外设----136MHZ

PCLK-----挂载在APB总线上(低速总线)======>挂载了I2c,  ADC,  PWM等外设----68MHZ

CLKCNTL---是一个控制寄存器,用于控制系统时钟的分频和选择。它可以生成FCLK,然后通过HDIVN和PDIVN分频得到HCLK和PCLK。其中,FCLK传递给CPU,HCLK和PCLK用于其他外设

3:结构图分析

        晶振-----选择器-----PLL锁相环(MPLL和UPLL)具体内容见1------HCLK和PCLK分别挂载在AHB总线和APB总线上面-----在线上面又挂载了许多外设

        1:  晶振经过锁相环,  在经过FCLK处理完的晶振频率直接给到ARM芯片(CPU);  FCLK处理之后的晶振频率在经过HDIVN和PDIVN分频器的处理分别得到HCLK和PCLK ;

4:总线

时钟工作的最大频率:

5:寄存器

我们程序实现:  FCLK=400MHZ     HCLK=100MHZ    PCLK=50MHZ

A:FCLK--MPLLCON

通过编辑MPLLCON寄存器的MDIV, PDIV, SDIV;  来得到FCLK相应的频率

 我们看到了输入为12MHZ的晶振, 为了得到输出为400MHZ的晶振

MDIV=92(0x5c)       PDIV=1       SDIV=1

 公式为:


 

    ldr r0, =0x4C000004ldr r1, =(92<<12)|(1<<4)|(1<<0)str r1, [r0]

 B:HCLK和PCLK--CLKDIVN

 当CAMDIVN[9] = 0时, DHIVN[2:1]=10;                 DHIVN------400/4=100

PDIVN[0]=1--------PDIVN=100/2=50

CLKDIVN[2:0]=101=0x5

    ldr r0, =0x4C000014ldr r1, =0x5str r1, [r0]

不要忘记了CAMDIVN[9] = 0

我们可以看到了第9为默认为0, 但是我们为了保险设置一下

    ldr r0, =0x4C000018ldr r1, =(0<<9)str r1, [r0]

 完整代码

    ldr r0, =0x4C000018ldr r1, =(0<<9)str r1, [r0]ldr r0, =0x4C000014ldr r1, =0x5str r1, [r0]

C:注意

        1. CLKDIVN的设置要小心,不要超过HCLK和PCLK的限制。

        2. 如果HDIVN不是O,则需要按照下面的说明将CPU总线模式从快速总线模式切换到异步总线模式(S3C2440不支持同步总线模式)。

        3: 当HDIVN不为0且CPU总线模式为快速总线模式时,CPU将通过HCLK工作。该特性可以在不影响HCLK和PCLK的情况下,将CPU频率改变一半或更多。 

        所以我们需要在异步模式下工作, 将他调节为异步模式

/* 设置CPU工作于异步模式 */mrc p15,0,r0,c1,c0,0orr r0,r0,#0xc0000000   //R1_nF:OR:R1_iAmcr p15,0,r0,c1,c0,0

二:上电复位

1:上电复位

        上电复位(XTIpll)上电复位顺序的时钟行为如图所示。晶体振荡器在几毫秒内开始振荡。当OSC (XTipll)时钟稳定后释放nRESET后,PLL开始按照默认PLL配置工作。然而,PLL通常在上电复位后不稳定,因此在软件重新配置PLLCON之前,Fin直接馈送到FCLK而不是Mpll (PLL输出)。即使用户在复位后不希望改变PLLCON寄存器的默认值,用户也应该通过软件将相同的值写入PLLCON寄存器。只有软件为PLL配置了新的频率后,PLL才会向新的频率重新启动锁相序列。FCLK可以配置为锁定时间后立即PLL输出(Mpll)。

        这个nRESET。这里会维持一段时间。为什么一上电的时候nRESET不能够立刻拉高呢?因为。他要维持一段时间,等待你这个电源稳定,谁来帮你维持这个nRESET这么一段时间呢?我们的二四零里面有专用的复位芯片。

锁存时间寄存器

2:时钟选择

        时钟源的选择S3C2440A的模式控制引脚(OM3和OM2)组合与源时钟选择的关系。OM[3:2]状态通过参考nRESET上升沿的OM3和OM2引脚在内部锁存。

        虽然MPLL在复位后启动,但直到软件将有效设置写入MPLLCON寄存器时,MPLL输出(MPLL)才被用作系统时钟。在此有效设置之前,来自外部晶体或EXTCLK源的时钟将直接用作系统时钟。即使用户不想改变MPLLCON寄存器的默认值,用户也应该将相同的值写入MPLLCON寄存器。当OM[1:0]为11时,OM[3:2]用于确定测试模式。

三:代码


.text
.global _start_start:
/* 关闭看门狗 */ldr r0, =0x53000000ldr r1, =0str r1, [r0]/* 设置MPLL, FCLK : HCLK : PCLK = 400m : 100m : 50m *//* LOCKTIME(0x4C000000) = 0xFFFFFFFF */ldr r0, =0x4C000000ldr r1, =0xFFFFFFFFstr r1, [r0]/* CLKDIVN(0x4C000014) = 0X5, tFCLK:tHCLK:tPCLK = 1:4:8  */ldr r0, =0x4C000018ldr r1, =(0<<9)str r1, [r0]ldr r0, =0x4C000014ldr r1, =0x5str r1, [r0]/* 设置CPU工作于异步模式 */mrc p15,0,r0,c1,c0,0orr r0,r0,#0xc0000000   //R1_nF:OR:R1_iAmcr p15,0,r0,c1,c0,0/*设置MPLLCON*/ldr r0, =0x4C000004ldr r1, =(92<<12)|(1<<4)|(1<<0)str r1, [r0]/* 一旦设置PLL, 就会锁定lock time直到PLL输出稳定* 然后CPU工作于新的频率FCLK*//*设置内存: sp栈* 我们判断是nor启动还是nand启动/mov r1, #0ldr r0, [r1] /* 读出原来的值备份 */str r1, [r1] /* 0->[0] */ ldr r2, [r1] /* r2=[0] */cmp r1, r2   /* r1==r2? 如果相等表示是NAND启动 */ldr sp, =0x40000000+4096 /* 先假设是nor启动 */moveq sp, #4096  /* nand启动 */streq r0, [r1]   /* 恢复原来的值 */bl mainhalt:b halt

相关文章:

02:2440---时钟体系

目录 一:时钟控制 1:基本概念 2:时钟结构图 3:结构图分析 4:总线 5:寄存器 A:FCLK--MPLLCON B:HCLK和PCLK--CLKDIVN C:注意 二:上电复位 1:上电复位 2:时钟选择 三:代码 一:时钟控制 1:基本概念 S3C2440A中的时钟控制逻辑可以产生所需的时钟信号&#xff0c;包括C…...

SOEM源码解析——ecx_siiSM(读取SII的SM信息)

0 工具准备 1.SOEM-master-1.4.0源码1 ecx_siiSM函数总览 /** Get SM data from SII SM section in slave EEPROM.从SII的SM段获取SM信息* @param[in] context = context struct 句柄* @param[in] slave = slave number 从站序号* @param[out] SM = first SM str…...

【见缝插针】射击类游戏-微信小程序项目开发流程详解

还记得小时候玩过的见缝插针游戏吗&#xff0c;比一比看谁插得针比较多&#xff0c;可有趣了&#xff0c;当然了&#xff0c;通过它可以训练自己的手速反应&#xff0c;以及射击水平&#xff0c;把握时机&#xff0c;得分越高就越有成就感&#xff0c;相信小朋友们会喜欢它的&a…...

flutter开发实战-TweenSequence实现动画序列

flutter开发实战-TweenSequence实现动画序列 一、TweenSequence TweenSequence是允许创建一个Animation由一系列补间动画来确定值&#xff0c;每个TweenSequenceItem都有定义在动画的持续时间的权重确定动画间隔。 TweenSequence 动画组类TweenSequenceItem 用来定义每一个动…...

Flowable 外部表单

内置表单需要在每个节点中去配置&#xff0c;当如果多个节点使用同一套表单属性就要配置多次比较麻烦&#xff0c;修改的时候也要修改多次&#xff0c;外部表单可以定义一次&#xff0c;然后其它节点都去引用同一个表单属性。 外部表单需要定义一个.form后缀的文件。 外部表单…...

[mysql]索引优化-2

目录 一、分页查询优化1.根据自增且连续的主键排序的分页查询2.根据非主键字段排序的分页查询 二、Join关联查询优化1.嵌套循环连接 Nested-Loop Join(NLJ) 算法2.基于块的嵌套循环连接 Block Nested-Loop Join(BNL)算法 三、count(*)查询优化1.查询mysql自己维护的总行数2.sho…...

数据分析实战 | 泊松回归——航班数据分析

目录 一、数据及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 八、模型评价 一、数据及分析对象 CSV文件&#xff1a;o-ring-erosion-only.csv 数据集链接&#xff1a;https://download.csdn.net/download/m0_7…...

Fliki AI:让视频创作更简单、更高效

在当今的数字时代&#xff0c;视频已经成为人们获取信息和娱乐的重要方式。无论是企业宣传、教育培训还是个人创作&#xff0c;视频都发挥着越来越重要的作用。然而&#xff0c;视频制作是一项复杂的工作&#xff0c;需要掌握一定的技能和经验。这对于初学者或没有专业视频制作…...

webGL编程指南 第五章 MultiTexture.html

我会持续更新关于wegl的编程指南中的代码。 当前的代码不会使用书中的缩写&#xff0c;每一步都是会展开写。希望能给后来学习的一些帮助 git代码地址 &#xff1a;空 上一章节中我们学习texParameteri的使用,这一章节中我们两个图片进行混合 <!DOCTYPE html> <htm…...

mysql8安装和驱动jar包下载

方式一&#xff1a;基于docker安装 下拉镜像 docker pull mysql:8.0.21 启动镜像 docker run -p 3307:3306 --name mysql -e MYSQL_ROOT_PASSWORDhadoop -d mysql:8.0.21 启动成功后&#xff0c;进入容器内部拷贝配置文件&#xff0c;到宿主主机 docker cp mysql:/etc/mysql…...

(SpringBoot)第五章:SpringBoot创建和使用

文章目录 一&#xff1a;Spring和SpringBoot&#xff08;1&#xff09;Spring已解决和未解决的问题&#xff08;2&#xff09;SpringBoot 二&#xff1a;Spring项目的创建&#xff08;1&#xff09;IDEA创建&#xff08;2&#xff09;网页端创建 三&#xff1a;项目目录介绍及运…...

Linux重定向

文章目录 1. 文件描述符分配规则2. 重定向接口dup2自定义shell重定向(补充) 3. 标准输出和标准错误4. 如何理解一切接文件 本章代码gitee地址&#xff1a;文件重定向 1. 文件描述符分配规则 文件描述符的分配规则是从0下标开始&#xff0c;寻址最小的没有使用的数组位置&#…...

Python之文件与文件夹操作及 pytest 测试习题

目录 1、文本文件读写基础。编写程序&#xff0c;在 当前目录下创建一个文本文件 test.txt&#xff0c;并向其中写入字符串 hello world。2、编写一个程序 demo.py&#xff0c;要求运行该程序后&#xff0c;生成 demo_new.py 文件&#xff0c;其中内容与demo.py 一样&#xff0…...

物联网:实现数据驱动决策,推动经济发展

开发物联网系统的意义主要体现在以下几个方面&#xff1a; 连接一切&#xff1a;物联网的目标是连接一切&#xff0c;将生活中的各种物理对象互联起来。通过物联网开发&#xff0c;我们可以实现各类设备的智能化&#xff0c;包括家居设备、交通工具、工业设备等。这将为人们提…...

Leetcode 2929. Distribute Candies Among Children II

Leetcode 2929. Distribute Candies Among Children II 1. 解题思路2. 代码实现 题目链接&#xff1a;2929. Distribute Candies Among Children II 1. 解题思路 这一题很惭愧&#xff0c;没能自力搞定&#xff0c;最后是看了大佬的思路之后才做出来的&#xff0c;唉…… 这…...

【面经】ES中分片是什么?副本是什么?

ES分片 分片是将一个索引切分为多个底层物理的Lucene索引&#xff0c;这些被切分出来的每个部分称为一个分片。 每个分片都是一个全功能且独立的索引&#xff0c;可由集群中的任何主机存储。 在创建索引时&#xff0c;用户可以指定其分片的数量。 默认情况下&#xff0c;每个索…...

【算法练习Day46】判断子序列不同的子序列

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 判断子序列不同的子序列总结…...

Java设计模式之访问者模式

目录 定义 结构 案例 优点 缺点 使用场景 扩展 分派 案例实现须知 动态分派 静态分派 双分派 定义 封装一些作用于某种数据结构中的各元素的操作&#xff0c;它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。 结构 访问者模式包含以下主要角色…...

PySide/PYQT如何用Qt Designer和代码来设置文字属性,如何设置文字颜色?

文章目录 📖 介绍 📖🏡 环境 🏡📒 实现方法 📒📝 Qt Designer设置📝 代码📖 介绍 📖 本人介绍如何使用Qt Designer/代码来设置字体属性(包含字体颜色) 🏡 环境 🏡 本文使用Pyside6来进行演示📒 实现方法 📒 📝 Qt Designer设置 首先打开Qt De…...

ubuntu 设置最大带宽

背景 近日做实验&#xff0c;需要限制一些机子的带宽以达到模拟的效果。在网上搜索了一阵子&#xff0c;结合自己实操的经验&#xff0c;潦草写下这篇文章&#xff0c;供自己与有需要的人参考。 环境&#xff1a; Ubuntu 22.04.1 LTS 安装 wondershaper 和 speedtest-cli w…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

微服务通信安全:深入解析mTLS的原理与实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言&#xff1a;微服务时代的通信安全挑战 随着云原生和微服务架构的普及&#xff0c;服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...

基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究

摘要&#xff1a;在消费市场竞争日益激烈的当下&#xff0c;传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序&#xff0c;探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式&#xff0c;分析沉浸式体验的优势与价值…...