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); //设置输出频率为528M

    while ((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);      // 使能USBPHYn

    CCM_ANALOG->PLL_USB1 &= ~(0x01 << 0);//设置输出频率为480MHz

    while ((CCM_ANALOG->PLL_SYS & (0x80000000)) == 0)//等待设置生效

    {

    }



    /*关闭暂时不使用的 PLL4 、PLL5  、PLL6 、PLL7*/

    CCM_ANALOG->PLL_AUDIO = (0x1000);    //关闭PLL4

    CCM_ANALOG->PLL_VIDEO = (0x1000);    //关闭PLL5

    CCM_ANALOG->PLL_ENET =  (0x1000);    //关闭PLL6

    CCM_ANALOG->PLL_USB2 =  (0x00);           //关闭PLL7


2.3设置PFD时钟

细分每一路的PLL时钟

    /******************第三层时钟设置--PFD*******************/

    /*禁用PLL2 的所有PFD输出*/

    CCM_ANALOG->PFD_528 |=(0x80U) ;      //关闭PLL2 PFD0

    CCM_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 输出频率为 352M

    CCM_ANALOG->PFD_528 |= (0x10 << 8); //设置PLL2 PFD0 输出频率为 594M

    CCM_ANALOG->PFD_528 |= (0x18 << 16); //设置PLL2 PFD0 输出频率为 396M

    CCM_ANALOG->PFD_528 |= (0x30 << 24); //设置PLL2 PFD0 输出频率为 198M



    /*启用PLL2 的所有PFD输出*/

    CCM_ANALOG->PFD_528 &= ~(0x80U) ;      //开启PLL2 PFD0

    CCM_ANALOG->PFD_528 &= ~(0x8000U) ;    //开启PLL2 PFD1

    CCM_ANALOG->PFD_528 &= ~(0x800000U) ;  //开启PLL2 PFD2

    CCM_ANALOG->PFD_528 &= ~(0x80000000U); //开启PLL2 PFD3





    /*禁用PLL3 的所有PFD输出*/

    CCM_ANALOG->PFD_480 |=(0x80U) ;      //关闭PLL3 PFD0

    CCM_ANALOG->PFD_480 |=(0x8000U) ;    //关闭PLL3 PFD1

    CCM_ANALOG->PFD_480 |=(0x800000U) ;  //关闭PLL3 PFD2

    CCM_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 输出频率为 720M

    CCM_ANALOG->PFD_480 |= (0x10 << 8); //设置PLL3 PFD0 输出频率为 540M

    CCM_ANALOG->PFD_480 |= (0x11 << 16); //设置PLL3 PFD0 输出频率为 508.2M

    CCM_ANALOG->PFD_480 |= (0x13 << 24); //设置PLL3 PFD0 输出频率为 454.7M



    /*启用PLL3 的所有PFD输出*/

    CCM_ANALOG->PFD_480 &= ~(0x80U) ;      //开启PLL3 PFD0

    CCM_ANALOG->PFD_480 &= ~(0x8000U) ;    //开启PLL3 PFD1

    CCM_ANALOG->PFD_480 &= ~(0x800000U) ;  //开启PLL3 PFD2

    CCM_ANALOG->PFD_480 &= ~(0x80000000U); //开启PLL3 PFD3

  

2.4外设时钟设置

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



    /******************第四层时钟设置--外设****************/

    CCM->CSCDR1 &= ~(0x01 << 6); //设置UART选择 PLL3 / 6 = 80MHz

    CCM->CSCDR1 &= ~(0x3F);     //清零

    CCM->CSCDR1 |= ~(0x01 << 0); //设置串口根时钟分频值为1,UART根时钟频率为:80M / (dev + 1) = 40MHz

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

十一、常用API——正则表达式

目录 练习1&#xff1a; 正则表达式的作用 正则表达式 字符类&#xff08;只匹配一个字符&#xff09; 预定义字符&#xff08;只匹配一个字符&#xff09; 数量词 类 Pattern 正则表达式的构造摘要 反斜线、转义和引用 字符类 行结束符 组和捕获 Unicode 支持 与…

leetcode234. 回文链表

题目 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;hea…

关于KT6368A双模蓝牙芯片的BLE在ios的lightblue大数量数据测试

测试简介 关于KT6368A双模蓝牙芯片的BLE在ios的lightblue app大数量数据测试 测试环境&#xff1a;iphone7 。KT6368A双模程序96B6 App&#xff1a;lightblue ios端 可以打开log日志查看通讯流程 测试数据&#xff1a;长度是1224个字节&#xff0c;单次直接发给KT6368A&a…

ELK之Filebeat输出日志格式设置及输出字段过滤和修改

一、Filebeat输出日志格式设置 1.1 编辑vim filebeat.yml文件,修改输出格式设置 # output to console output.console:codec.format: string: %{[@timestamp]} %{[message]}pretty: true### 1.2 测试 执行 ./filebeat -e 可以看到/tmp/access.log(目前文件里只有140.77.188…

【Java 设计模式】结构型之桥接模式

文章目录 1. 定义2. 应用场景3. 代码实现结语 桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;它将抽象部分与实现部分分离&#xff0c;使它们可以独立变化&#xff0c;从而降低它们之间的耦合。桥接模式通过将抽象部分和实现部分分离&#x…

【PyTorch】PyTorch之Tensors操作篇

文章目录 前言一、Tensor创建1、TENSOR2、SPARSE_COO_TENSOR3、SPARSE_CSR_TENSOR4、ASARRAY5、AS_TENSOR6、FROM_NUMPY7、FROMBUFFER8、ZEROS和ZEROS_LIKE9、ONES和ONES_LIKE10、ARANGE11、LINSPACE12、LOGSPACE13、EYE14、EMPTY和EMPTY_LIKE15、FULL和FULL_LIKE 前言 介绍Te…

Docker搭建MySQL主从数据库-亲测有效

1、测试环境概述 1、使用MySQL5.7.35版本 2、使用Centos7操作系统 3、使用Docker20版本 案例中描述了整个测试的详细过程 2、安装Docker 2.1、如果已经安装docker,可以先卸载 yum remove -y docker \ docker-client \ docker-client-latest \ docker-common \ docker-l…

Nginx重写功能location与rewrite

1. location 从功能看 rewrite 和 location 似乎有点像&#xff0c;都能实现跳转&#xff0c;主要区别在于 rewrite 是在同一域名内更改获取资源的路径&#xff0c;而 location 是对一类路径做控制访问或反向代理&#xff0c;还可以proxy_pass 到其他机器。 rewrite 对访问的…

java数据结构与算法刷题-----LeetCode977. 有序数组的平方

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 时间复杂度 空间复杂度 O(n * l o g 2 n log_2{n} log2​…

Qt通用属性工具:随心定义,随时可见(三)

传送门: 《Qt通用属性工具&#xff1a;随心定义&#xff0c;随时可见&#xff08;一&#xff09;》 《Qt通用属性工具&#xff1a;随心定义&#xff0c;随时可见&#xff08;二&#xff09;》 《Qt通用属性工具&#xff1a;随心定义&#xff0c;随时可见&#xff08;三&#xf…

MFC 绘图

目录 MFC中绘图 CPaintDC&#xff0c;封装了在WM_PAINT消息中绘图的绘图设备 CClientDC类&#xff0c;封装了在客户区绘图的绘图设备 CGdiObject类(绘图对象类)&#xff0c;封装了各种绘图对象相关的操作 MFC中绘图 Windows绘图需要绘图设备&#xff0c;Win32&#xff1a;…

jvm -Djava.library.path 无法打开共享对象文件:

项目代码修改 java -jar -Xms1024m -Xmx1024m -Dloader.path/data/encrypt/lib -Djava.library.path/data/encrypt/libVtExtAPI.so server-1.0.0-SNAPSHOT.jar 重新启动

JavaScript基础语法

速通回顾一遍 引入方式 一般会把<script>标签置于<body>元素底部&#xff0c;改善显示速度&#xff1a; 内部脚本&#xff1a;<script></script>标签内外部脚本&#xff1a;<script src""></script>配置src 外部js文件中&…

Cacti 前台SQL注入漏洞复现(CVE-2023-39361)

0x01 产品简介 Cacti 是一套基于 PHP,MySQL,SNMP 及 RRDTool 开发的网络流量监测图形分析工具。 0x02 漏洞概述 该漏洞存在于graph_view.php文件中。默认情况下,访客用户无需身份验证即可访问graph_view.php,在启用情况下使用时会导致SQL注入漏洞。 攻击者可能利用此漏洞…

跨平台兼容,无限可能:Apple Remote Desktop for Mac让远程控制更简单

Apple Remote Desktop for Mac是一款远程桌面管理软件&#xff0c;提供了一系列强大的功能&#xff0c;让用户可以轻松地管理和控制远程计算机。以下是该软件的一些主要功能和特点&#xff1a; 实时远程访问和控制&#xff1a;使用Apple Remote Desktop&#xff0c;用户可以在…

文件操作函数总结(Linux)

目录 一、fopen/fclose 二、fgetc/getc/getchar 三、fputc/putc/putchar 四、fgets/gets 五、fputs/puts 六、fread/fwrite 六、open/close 七、ftell/fssek/rewind/fflush 八、sprintf/sscanf/fprintf/fscanf 九、opendir/closedir/readdir 十、stat 十一、动态/静态…

一款开源且不限制大小可以设置过期时间的支持分享的的开源文件共享系统picoshare 部署教程

1.拉取镜像 2.部署 创建目录 mkdir -p /opt/picoshare/data 部署 其中:"somesecretpass"是密码 docker run \--env "PORT4001" \--env "PS_SHARED_SECRETsomesecretpass" \--publish 10005:4001/tcp \--volume "/opt/picoshare/data:…

UG阵列-数字递增

在UG中&#xff0c;我们对一个文本进行阵列&#xff0c;可以得到很多个相同文本&#xff0c;但是如果文本中的数据是递增数列&#xff0c;需要用到表达式 先画一根参考线&#xff0c;标注参考线长度&#xff0c;并记录系统生成对应长度的表达式&#xff0c;例如p15 然后插入一个…

IO、NIO、IO多路复用

IO是什么&#xff1f; IO分为两类&#xff0c;它们之间是有区别的&#xff0c;而且有很大的区别&#xff1b;1. 文件系统的IO 也叫本地io&#xff0c;就是和磁盘或者外围存储设备进行读写操作&#xff0c;外围设备有USB、移动硬盘等等&#xff1b;2. 网络的IO 将数据发送给对方…