IMX6LL|时钟控制

news2024/11/25 12:10:42

一.时钟控制模块

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

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

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

相关文章

MySQL进阶45讲【2】日志系统:一条SQL更新语句是如何执行的?

1 前言 上篇文章我们系统了解了一个查询语句的执行流程&#xff0c;并介绍了执行过程中涉及的处理模块。相信大家还记得&#xff0c;一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块&#xff0c;最后到达存储引擎。 那么&#xff0c;一条更新语句…

【Nuxt3】目录中components文件夹的用法

简言 在Nuxt3中&#xff0c;components文件夹和vue文件夹用处一样&#xff0c;都是放置vue公共组件的地方。只不过由于Nuxt3中components文件内的组件自动导入机制&#xff0c;用法些许不同。 components components/ 目录是你放置所有 Vue 组件的地方。 Nuxt 会自动导入该目…

刷题 ------ 双指针

文章目录 1.验证回文串 ||2.计数二进制字串3. 字符的最短距离4.按奇偶排序数组5.仅仅反转字母6. 奇偶排序数组 ||7.长按键入8. 递减字符匹配9.有序数组的平方10.复写零11.删除回文子序列12.检查单词是否为剧中其他单词的前缀13.交替合并的字符串14.反转单词前缀15.找出数组中的…

阿赵UE学习笔记——11、地形系统

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的用法&#xff0c;这次来学习一下虚幻引擎的地形系统的用法。 一、创建地形 在选项模式里面&#xff0c;选择地形&#xff1a; 进入到地形界面之后&#xff0c;需要先创建一个地形&#xff1a; 留意看…

npm依赖库备份

常用命令 设置默认使用本地缓存安装Nodejs时会自动安装npm&#xff0c;但是局路径是C:\Users\Caffrey\AppData\Roaming\npm默认的缓存路径是C:\Users\Caffrey\AppData\Roaming\npm-cache&#xff1b;查看npm的prefix和cache路径配置信息设置路径 设置默认使用本地缓存 npm con…

李沐《动手学深度学习》线性神经网络 softmax回归

系列文章 李沐《动手学深度学习》预备知识 张量操作及数据处理 李沐《动手学深度学习》预备知识 线性代数及微积分 李沐《动手学深度学习》线性神经网络 线性回归 目录 系列文章一、softmax回归&#xff08;一&#xff09;问题背景&#xff08;二&#xff09;网络架构&#xf…

路飞项目--02

补充&#xff1a;axios封装 # 普通使用&#xff1a;安装 &#xff0c;导入使用 const filmListreactive({result:[]}) axios.get().then() async function load(){let responseawait axios.get()filmList.resultresponse.data.results } # 封装示例&#xff1a;请求发出去之前…

【计算机组成与体系结构Ⅱ】虚拟存储器以及虚拟变换(实验)

实验7&#xff1a;虚拟存储器以及虚拟变换 一、实验目的 1&#xff1a;加深对虚拟存储器基本概念、基本组织结构以及基本工作原理的理解。 2&#xff1a;掌握页式、段式&#xff0c;段页式存储的原理以及地址变换的方法。 3&#xff1a;理解LRU与随机替换的基本思想。 二、…

easy Exsel导出

目录 一、首先引入依赖 二、然后封装一个VO 三、Controller层 四、Service实现类 引用样式 自适应列宽 自适应行高 五、测试 postman ​编辑 浏览器 异常 分配到这个任务了&#xff0c;写个小demo记录下&#xff0c;具体可参考EasyExcel官方文档 我用的是web上传…

redis数据安全(五)事务

一、概念&#xff1a; 1、介绍&#xff1a;Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令&#xff0c;一个事务中所有命令都会被序列化。在事务执行过程&#xff0c;会按照顺序串行化执行队列中的命令&#xff0c;其他客户端提交的命令请求不会插入到事务执行命…

css实现动态水波纹效果

效果如下&#xff1a; 外层容器 (shop_wrap)&#xff1a; 设置外边距 (padding) 提供一些间距和边距 圆形容器 (TheCircle)&#xff1a; 使用相对定位 (position: relative)&#xff0c;宽度和高度均为 180px&#xff0c;形成一个圆形按钮圆角半径 (border-radius) 设置为 50%&…

Linux编译器--gcc和g++使用

gcc和g使用 一、gcc/g的作用1.1 预处理1.2 编译1.3 汇编1.4 链接 二、静态库和动态库三、make/Makefile3.1 make/Makefile3.2 依赖关系和依赖方法3.3 多文件编译3.4 make原理3.5 项目清理 四、linux下的第一个小程序-进度条4.1 行缓冲区的概念4.2 \r和\n4.3 进度条代码 一、gcc…

rt-thread修改全局中断屏蔽函数,解决内核频繁关闭中断影响精密计时问题

带rtt-nano实时操作系统的小板子需要读取单总线设备&#xff0c;使用软件延时吧&#xff0c;总是由于时隙不精确&#xff0c;通信不稳定。按说不稳定情况也不频繁&#xff0c;但考虑到未来需要对上百、上千米外的单总线设备通信&#xff0c;开发的时候偷个懒&#xff0c;到应用…

Jmeter后置处理器——JSON提取器

目录 1、简介 2、使用步骤 1&#xff09;添加线程组 2&#xff09;添加http请求 3&#xff09; 添加JSON提取器 1、简介 JSON是一种简单的数据交换格式&#xff0c;允许互联网应用程序快速传输数据。JSON提取器可以从JSON格式响应数据中提取数据、简化从JSON原始数据中提取特定…

《Unix环境高级编程》第三版源代码编译报错汇总(WSL)

文章目录 Error: unable to disambiguate: -dylib (did you mean --dylib ?)undefined reference to majorerror: ‘FILE’ has no member named ‘__pad’; did you mean ‘__pad5’?error: ‘FILE’ has no member named ‘_flag’; did you mean ‘_flags’?error: ‘FIL…

AAAI 2024 | TEx-Face,5秒内按需生成照片级3D人脸

本文介绍一篇来自浙江大学ReLER实验室的工作&#xff0c;"Controllable 3D Face Generation with Conditional Style Code Diffusion"&#xff0c;目前该文已被AAAI 2024录用。 论文题目&#xff1a; Controllable 3D Face Generation with Conditional Style Code D…

(C语言)冒泡排序

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//实现buble_sort函数&#xff1b; void buble_sort(int arr[], int sz) {//初始化变量值&#xff1b;int i 0;//嵌套循环冒泡排序&#xff1b;//外层循环&…

adb、monkey的下载和安装

adb下载 官网网址&#xff1a;Downloads - ADB Shell 尽量不要下载最新的ADB Kits&#xff0c;因为兼容性可能不太好。 点击下载 ADB Kits 作者下载的版本是1.0.36 解压adb 到指定的目录即可。 然后把adb配置 环境变量。 检查adb是否安装成功

android 自定义八边形进度条

自定义八边形动画效果图如下 绘制步骤&#xff1a; 1.先绘制橙色底部八边形实心 2.黑色画笔绘制第二层&#xff0c;让最外层显示一条线条宽度即可 3.再用黄色画笔绘制黄色部分 4.使用渐变画笔根据当前进度绘制覆盖黄色部分 5.使用黑色画笔根据当前进度绘制刻度条 6.黑色画笔绘制…

C语言经典练习3——[NOIP2008]ISBN号码与圣诞树

前言 在学习C语言的过程中刷题是很重要的&#xff0c;俗话说眼看千遍不如手动一遍因为在真正动手去刷题的时候会暴露出更多你没有意识到的问题接下来我就为各位奉上两道我认为比较有代表性的题 1. [NOIP2008]ISBN号码 1.1 题目描述 每一本正式出版的图书都有一个ISBN号码与之对…