IMX6LL|时钟控制

一.时钟控制模块

4个层次配置芯片时钟

  • 晶振时钟
  • PLL与PFD时钟
  • PLL选择时钟
  • 根时钟/外设时钟

1.1晶振时钟

系统时钟来源

  • RTC时钟源:32.768KHz,连接RTC模块,进行时间计算。
  • 系统时钟:24MHz,芯片主晶振

在这里插入图片描述

1.2PLL和PFD倍频时钟

7路锁相环电路

  • ARM_PLL:驱动 ARM 内核
  • 528_PLL:倍频参数固定为22,系统总线时钟
  • USB1_PLL:驱动第一个 USB 物理层
  • AUDIO_PLL:驱动音频接口
  • VIDEO_PLL:驱动视频接口
  • ENET_PLL:驱动外部以太网接口
  • USB2_PLL:驱动第二个 USB 物理层

10.3.1 Centralized components of clock management system
在这里插入图片描述

18.6 CCM Memory Map/Register Definition

  • CCM_ANALOG_PLL_XXX

    • 设置PPL时钟主频(pll1_main_clk)
    • 使能PLL时钟输出
  • CCM_ANALOG_PFD_XXX

    • 设置PPL下PFD的分频系数

1.3PLL选择时钟

对 PLL1 和 PLL3 的输出进行选择、对 PLL4 和 PLL5 进行分频

  • cpu内核时钟来于PLL1时钟。

  • 刚上电时,PLL1时钟未初始化,arm内核先使用24M晶振频率,等PLL1时钟稳定输出后,再切换回PLL1时钟。

CCM_CCSR:选择pll1_sw_clk、step_clk时钟源

  • step_clk时钟源设置为24M晶振
  • pll1_main_clk时钟源设置为 step_clk或pll1_main_clk

18.5.1.5.1 Clock Switcher

1.4外设时钟

给外设设置时钟源,外设时钟源是可以有多个选择的:

  • 梯形图标表示上一级时钟源配置
  • 正方形图标表示分频系数

图标旁边标明了相关寄存器

18.3 CCM Clock Tree

在这里插入图片描述

二.时钟模块编程流程

2.1设置晶振时钟

设置晶振时钟,实质上是让CPU运行PLL1时钟,将CPU运行到ARM PLL时钟上。因为CPU默认使用24MHz的芯片主晶振。

 /******************* 第一层时钟设置--晶振时钟***********************//*CCM中包括很多关于时钟的寄存器 */if ((CCM->CCSR & (0x01 << 2)) == 0) //CPU 使用的是 ARM PLL{/*将CPU时钟切换到XTAL (OSC) 时钟*/                   CCM->CCSR &= ~(0x01 << 8); //控制CCSR: step_sel ,选择 osc_clk 作为时钟源CCM->CCSR |= (0x01 << 2);  //设置GLITCHLESS MUX 选择 step_clk 作为时钟源}

2.2设置PLL时钟

主要是设置七路PPL时钟

/******************* 第二层时钟设置--PLL时钟***********************//*设置PLL1输出时钟为792MHz,它将作为CPU时钟*/CCM_ANALOG->PLL_ARM |= (0x42 << 0);/*将CPU 时钟重新切换到 ARM PLL*/CCM->CCSR &= ~(0x01 << 2);/*设置时钟分频系数为0,即不分频*/CCM->CACRR &= ~(0x07 << 0); //清零分频寄存器   不分频//CCM->CACRR |= (0x07 << 0);     // 8分频/*设置PLL2(System PLL) 输出时钟*//* Configure SYS PLL to 528M */CCM_ANALOG->PLL_SYS_SS &= ~(0x8000);     //使能PLL2 PFD输出CCM_ANALOG->PLL_SYS_NUM &= ~(0x3FFFFFFF);//设置分频系数为0,即不分频。CCM_ANALOG->PLL_SYS |= (0x2000); //使能PLL2 输出CCM_ANALOG->PLL_SYS |= (1 << 0); //设置输出频率为528Mwhile ((CCM_ANALOG->PLL_SYS & (0x80000000)) == 0) //等待设置生效{}/*设置PLL3(System PLL) 输出时钟*//* Configure USB PLL to 480M */CCM_ANALOG->PLL_USB1 |= (0x2000);    //使能 PLL3时钟输出CCM_ANALOG->PLL_USB1 |= (0x1000);    //PLL3上电使能CCM_ANALOG->PLL_USB1 |= (0x40);      // 使能USBPHYnCCM_ANALOG->PLL_USB1 &= ~(0x01 << 0);//设置输出频率为480MHzwhile ((CCM_ANALOG->PLL_SYS & (0x80000000)) == 0)//等待设置生效{}/*关闭暂时不使用的 PLL4 、PLL5  、PLL6 、PLL7*/CCM_ANALOG->PLL_AUDIO = (0x1000);    //关闭PLL4CCM_ANALOG->PLL_VIDEO = (0x1000);    //关闭PLL5CCM_ANALOG->PLL_ENET =  (0x1000);    //关闭PLL6CCM_ANALOG->PLL_USB2 =  (0x00);           //关闭PLL7

2.3设置PFD时钟

细分每一路的PLL时钟

    /******************第三层时钟设置--PFD*******************//*禁用PLL2 的所有PFD输出*/CCM_ANALOG->PFD_528 |=(0x80U) ;      //关闭PLL2 PFD0CCM_ANALOG->PFD_528 |=(0x8000U) ;    //关闭PLL2 PFD1// CCM_ANALOG->PFD_528 |=(0x800000U) ;  //关闭PLL2 PFD2 ,DDR使用的是该时钟源,关闭后程序不能运行。暂时不关闭CCM_ANALOG->PFD_528 |=(0x80000000U); //关闭PLL2 PFD3/*设置PLL2 的PFD输出频率*/CCM_ANALOG->PFD_528 &= ~(0x3FU); //清零PLL2 PFD0 时钟分频CCM_ANALOG->PFD_528 &= ~(0x3F00U); //清零PLL2 PFD1 时钟分频CCM_ANALOG->PFD_528 &= ~(0x3F00U); //清零PLL2 PFD2 时钟分频CCM_ANALOG->PFD_528 &= ~(0x3F00U); //清零PLL2 PFD3 时钟分频CCM_ANALOG->PFD_528 |= (0x1B << 0); //设置PLL2 PFD0 输出频率为 352MCCM_ANALOG->PFD_528 |= (0x10 << 8); //设置PLL2 PFD0 输出频率为 594MCCM_ANALOG->PFD_528 |= (0x18 << 16); //设置PLL2 PFD0 输出频率为 396MCCM_ANALOG->PFD_528 |= (0x30 << 24); //设置PLL2 PFD0 输出频率为 198M/*启用PLL2 的所有PFD输出*/CCM_ANALOG->PFD_528 &= ~(0x80U) ;      //开启PLL2 PFD0CCM_ANALOG->PFD_528 &= ~(0x8000U) ;    //开启PLL2 PFD1CCM_ANALOG->PFD_528 &= ~(0x800000U) ;  //开启PLL2 PFD2CCM_ANALOG->PFD_528 &= ~(0x80000000U); //开启PLL2 PFD3/*禁用PLL3 的所有PFD输出*/CCM_ANALOG->PFD_480 |=(0x80U) ;      //关闭PLL3 PFD0CCM_ANALOG->PFD_480 |=(0x8000U) ;    //关闭PLL3 PFD1CCM_ANALOG->PFD_480 |=(0x800000U) ;  //关闭PLL3 PFD2CCM_ANALOG->PFD_480 |=(0x80000000U); //关闭PLL3 PFD3/*设置PLL3 的PFD输出频率*/CCM_ANALOG->PFD_480 &= ~(0x3FU);   //清零PLL3 PFD0 时钟分频CCM_ANALOG->PFD_480 &= ~(0x3F00U); //清零PLL3 PFD1 时钟分频CCM_ANALOG->PFD_480 &= ~(0x3F00U); //清零PLL3 PFD2 时钟分频CCM_ANALOG->PFD_480 &= ~(0x3F00U); //清零PLL3 PFD3 时钟分频CCM_ANALOG->PFD_480 |= (0xC << 0); //设置PLL3 PFD0 输出频率为 720MCCM_ANALOG->PFD_480 |= (0x10 << 8); //设置PLL3 PFD0 输出频率为 540MCCM_ANALOG->PFD_480 |= (0x11 << 16); //设置PLL3 PFD0 输出频率为 508.2MCCM_ANALOG->PFD_480 |= (0x13 << 24); //设置PLL3 PFD0 输出频率为 454.7M/*启用PLL3 的所有PFD输出*/CCM_ANALOG->PFD_480 &= ~(0x80U) ;      //开启PLL3 PFD0CCM_ANALOG->PFD_480 &= ~(0x8000U) ;    //开启PLL3 PFD1CCM_ANALOG->PFD_480 &= ~(0x800000U) ;  //开启PLL3 PFD2CCM_ANALOG->PFD_480 &= ~(0x80000000U); //开启PLL3 PFD3

2.4外设时钟设置

选择具体的时钟和最后的分频。

/******************第四层时钟设置--外设****************/CCM->CSCDR1 &= ~(0x01 << 6); //设置UART选择 PLL3 / 6 = 80MHzCCM->CSCDR1 &= ~(0x3F);     //清零CCM->CSCDR1 |= ~(0x01 << 0); //设置串口根时钟分频值为1,UART根时钟频率为:80M / (dev + 1) = 40MHz

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/632462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Go】A和*A在作为Receiver和接口实现上的差别

内容均来自 https://www.bilibili.com/video/BV1Eb4y1F7b9 https://juejin.cn/post/6963476381728702501 什么时候要使用指针接收器&#xff1f; 1.A很大&#xff0c;因为Go语言在执行函数时会进行参数的拷贝&#xff0c;拷贝一个大的对象和拷贝一个 指针相比代价肯定要大。 2.…

Jenkins-Pipeline

Pipeline 1 安装插件 2 新建一个 Pipline 工程 3 配置Pipeline 脚本 agent的使用可以参考这个文档 pipeline {agent anystages {stage(Build) { steps {echo Building project...}}stage(Test) { steps {echo Testing project...}}stage(Deploy) { steps {echo Deploying …

java基础之线程安全问题以及线程安全集合类

线程安全问题 当多个线程同时访问同一个临界资源时,原子操作可能被破坏,会导致数据丢失, 就会触发线程安全问题 临界资源: 被多个线程同时访问的对象 原子操作: 线程访问临界资源的过程中不可更改和缺失的操作 互斥锁 每个对象都默认拥有互斥锁, 该锁默认不开启. 当开启互斥…

Go新项目-Gin中wire的依赖注入方式实战(6)

选型Go项目过程中&#xff0c;针对依赖注入方式的分析和使用 参考资料 https://go.dev/blog/wirehttps://medium.com/dche423/master-wire-cn-d57de86caa1bhttps://toutiao.io/posts/et0t2lk/previewhttps://imlht.com/archives/223/https://lailin.xyz/post/go-training-week…

即将被AI取代的工作

这个博客 100% 是由人类而不是机器人撰写的。至少在某种程度上&#xff0c;目前仍然需要内容作家。 你的工作怎么样&#xff1f;您是否想过人工智能&#xff08;AI&#xff09;是否有可能渗透到您生活的无形本质&#xff1f;您花费数年时间获得的所有知识、技能和经验是否会因…

谈谈前端开发中的防抖和节流

本文作者为 360 奇舞团前端开发工程师 李武阳 概述 防抖和节流是前端开发中常用的函数优化手段&#xff0c;它们可以限制函数的执行频率&#xff0c;提升性能和用户体验。主要用于处理高频触发的事件&#xff0c;例如&#xff1a;用户的滚动、输入、点击和表单的重复提交等。 防…

OceanBase OBCA认证考试预约流程

【OceanBase】OBCA认证考试预约流程 - 课程体系 - 云贝教育https://www.yunbee.net/Home/News/detail/article_id/541.html 一、OBCA账号登录/注册&#xff0c;链接 https://www.oceanbase.com/ob/login/mobile?gotohttps%3A%2F%2Fwww.oceanbase.com%2Ftraining%2Fdetail%3Fle…

Windows Redis图形客户端 Another Redis Desktop Manager的简单使用教程

1、 Redis官方文档 2、 Redis国内中文版文档 3、 Redis客户端 Another Redis Desktop Manager 4、连接redis服务 我直接使用的是公司搭建好的服务。连接服务需要以下几个信息&#xff1a; HostPortPasswordSSL 5、New Key 5.1 如何创建一个Key&#xff1f; 点击New k…

从前端角度浅谈性能 | 京东物流技术团队(转载)

1 前言 自网站诞生以来&#xff0c;页面白屏时间、用户交互的响应速度等一直都是开发者关心的问题&#xff0c;这直接影响了一个网站能否为用户的浏览提供舒适的服务&#xff0c;而这种舒适度&#xff0c;直接关系着对用户的吸引力&#xff0c;毕竟谁都不能忍受一个页面长达10秒…

webassembly003 whisper.cpp的项目结构CMakeLists.txt

注&#xff1a;带星号的为非重要部分 基础配置 cmake_minimum_required (VERSION 3.5)project(whisper.cpp VERSION 1.5.0)# Add path to modules list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/") # 在\cmake文件夹下还有BuildTypes.cmake&a…

Uboot-5(U-Boot源码分析1-启动第一阶段)

来源&#xff1a;朱有鹏老师的嵌入式linux核心教程 1、start.S引入 1.1、u-boot.lds中找到start.S入口 (1)、在C语言中整个项目的入口就是main函数&#xff08;这是C语言规定的&#xff09;&#xff0c;所以譬如说一个有10000个.c文件的项目&#xff0c;第一个要分析的文件就…

Go 中 slice 的 In 功能实现探索

文章目录 遍历二分查找map key性能总结 之前在知乎看到一个问题&#xff1a;为什么 Golang 没有像 Python 中 in 一样的功能&#xff1f;于是&#xff0c;搜了下这个问题&#xff0c;发现还是有不少人有这样的疑问。 补充&#xff1a;本文写于 2019 年。GO 现在已经支持泛型&am…

腾讯云 腾讯云服务器 - 腾讯云 产业智变·云启未来

腾讯云服务器CVM提供安全可靠的弹性计算服务&#xff0c;腾讯云明星级云服务器&#xff0c;弹性计算实时扩展或缩减计算资源&#xff0c;支持包年包月、按量计费和竞价实例计费模式&#xff0c;CVM提供多种CPU、内存、硬盘和带宽可以灵活调整的实例规格&#xff0c;提供9个9的数…

【工作记录】基于springboot3+springsecurity6实现多种登录方式(一)

前言 springboot3已经推出有一段时间了&#xff0c;近期公司里面的小项目使用的都是springboot3版本的&#xff0c;安全框架还是以springsecurity为主&#xff0c;毕竟亲生的。 本文针对基于springboot3和springsecurity实现用户登录认证访问以及异常处理做个记录总结&#x…

Linux miniGUI移植分析

框架介绍 常用GUI程序对比 https://www.cnblogs.com/zyly/p/17378659.html MiniGUI分为底层的GAL&#xff08;图形抽象层&#xff09;和IAL&#xff08;输入抽象层&#xff09;&#xff0c;向上为基于标准POSIX接口中pthread库的Mini-Thread架构和基于Server/Client的Mini-L…

JSONObject - 用最通俗的讲解,教你玩转 JSON 数据的解析和修改

目录 一、JSONObject 1.1、为什么要使用他&#xff1f; 1.2、应用 1.2.1、依赖 1.2.2、JSON 数据示例 1.2.3、JSON 数据的构建 1.2.4、JSON 数据的解析 一、JSONObject 1.1、为什么要使用他&#xff1f; 在还没有接触过这个东西的时候&#xff0c;一直是通过 ObjectMap…

Spring 核心之 IOC 容器学习二

基于 Annotation 的 IOC 初始化 Annotation 的前世今生 从 Spring2.0 以后的版本中&#xff0c;Spring 也引入了基于注解(Annotation)方式的配置&#xff0c;注解(Annotation)是 JDK1.5 中引入的一个新特性&#xff0c;用于简化 Bean 的配置&#xff0c;可以取代 XML 配置文件…

深度学习记录--归—化输入特征

归化 归化输入(normalizing inputs),对特征值进行一定的处理&#xff0c;可以加速神经网络训练速度 步骤 零均值化 通过x值更新让均值稳定在零附近&#xff0c;即为零均值化 归化方差 适当减小变量方差 解释 归化可以让原本狭长的数据图像变得规整&#xff0c;梯度下降的…

Electron中苹果支付 Apple Pay inAppPurchase 内购支付

正在开发中&#xff0c;开发好了&#xff0c;写一个完整详细的过程&#xff0c;保证无脑集成即可 一、先创建一个App 一般情况下&#xff0c;在你看这篇文章的时候&#xff0c;说明你已经开发的app差不多了。 但是要上架app到Mac App Store&#xff0c;则要在appstoreconnect…

WPF中Image控件Source的多种指定方式

XAML中 1、直接绝对路径直接给Source 2、将图片放到项目里面&#xff0c;设置图片为资源&#xff1b;Source写法为&#xff1a; &#xff08;1&#xff09;Source"pack://application:,,,/label里面的Content;component/folder/test.png" &#xff08;2&…