当前位置: 首页 > 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…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...