嵌入式Linux裸机开发(四)IMX6U主频和时钟配置

2023-10-08 01:20

本文主要是介绍嵌入式Linux裸机开发(四)IMX6U主频和时钟配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系列文章目录


文章目录

  • 系列文章目录
  • 介绍
  • 时钟来源
    • PLL时钟源
      • 内核时钟
      • PFD时钟
      • AHB、 IPG 和 PERCLK 根时钟设置
  • 结语


介绍

默认配置下 I.MX6U 工作频率为 396MHz,但该系列标准工作频率事528MHz,有些型号甚至可以工作到696MHz。

默认情况下内部 boot rom 会将 I.MX6U 的主频设置为 396MHz,下面介绍如何配置为528MHz

详细内容在参考手册的第十章和第十八章:

在这里插入图片描述
在这里插入图片描述

时钟来源

I.MX6U-ALPHA 开发板的系统时钟来源于两部分: 32.768KHz 和24MHz 的晶振
32.768KHz 晶振是 I.MX6U 的 RTC 时钟源, 24MHz 晶振是 I.MX6U 内核和其它外设的时钟源(和STM32很像)
在这里插入图片描述

PLL时钟源

外设时钟源分为7组,都是通过24MHz晶振的PLL得来的

在这里插入图片描述
这么复杂,黄色标注的都是寄存器,也就是需要配置的

内核时钟

在这里插入图片描述
箭头所指的此处没有进行 2 分频

配置:
PLL1 可以设置为1056MHz,寄存器 CCM_CACRR 的 ARM_PODF 位设置为 2 分频,内核主频为 528MHz。
PLL1 就可以设置为 696MHz, CCM_CACRR 的 ARM_PODF 设置为 1 分频,主频设为 696MHz。

PLL1 的频率可以通过寄存器 CCM_ANALOG_PLL_ARMn 来设置:

CCM_CACRR 的 ARM_PODF:
在这里插入图片描述
CCM_ANALOG_PLL_ARMn :
在这里插入图片描述
DIV_SELECT: 此位设置 PLL1 的输出频率,可设置范围为: 54~108, PLL1 CLK = Fin *div_seclec/2.0, Fin=24MHz。如果 PLL1 要输出 1056MHz 的话, div_select 就要设置为 88。

但是在修改PLL1时钟频率的时候,需要将内核时钟切换到其他的时钟源:
在这里插入图片描述
用到的寄存器寄存器 CCM_CCSR,切换到 osc_clk,也就是 24MHz 的晶振

	/* 1、设置ARM内核时钟为792MHz *//* 1.1、判断当前ARM内核是使用的那个时钟源启动的,正常情况下ARM内核是由pll1_sw_clk驱动的,而*      pll1_sw_clk有两个来源:pll1_main_clk和tep_clk。*      如果我们要让ARM内核跑到792M的话那必须选择pll1_main_clk作为pll1的时钟源。*      如果我们要修改pll1_main_clk时钟的话就必须先将pll1_sw_clk从pll1_main_clk切换到step_clk,*		当修改完pll1_main_clk以后在将pll1_sw_clk切换回pll1_main_clk。而step_clk的时钟源可以选择* 		板子上的24MHz晶振。*/if((((CCM->CCSR) >> 2) & 0x1 ) == 0) 	/* 当前pll1_sw_clk使用的pll1_main_clk*/{	CCM->CCSR &= ~(1 << 8);				/* 配置step_clk时钟源为24MH OSC */	CCM->CCSR |= (1 << 2);				/* 配置pll1_sw_clk时钟源为step_clk */}/* 1.2、设置pll1_main_clk为792MHz*      因为pll1_sw_clk进ARM内核的时候会被二分频!*      配置CCM_ANLOG->PLL_ARM寄存器*      bit13: 1 使能时钟输出*      bit[6:0]: 66, 由公式:Fout = Fin * div_select / 2.0,792=24*div_select/2.0,*              		得出:div_select=    66 */CCM_ANALOG->PLL_ARM = (1 << 13) | ((66 << 0) & 0X7F); 	/* 配置pll1_main_clk=792MHz */CCM->CCSR &= ~(1 << 2);									/* 将pll_sw_clk时钟重新切换回pll1_main_clk */CCM->CACRR = 0;											/* ARM内核时钟为pll1_sw_clk/1=792/1=792Mhz */

PFD时钟

PLL2、 PLL3 和 PLL7 固定为 528MHz、 480MHz 和 480MHz, PLL4~PLL6 都是针对特殊外设的,用到的时候再设置。
在这里插入图片描述
以PLL2为例子,寄存器是 CCM_ANALOG_PFD_528n:
在这里插入图片描述
分为四组,分别对应PFD0~PFD3,每组 8 个 bit
每组对应的寄存器为:
PFD0_FRAC: PLL2_PFD0 的分频数, PLL2_PFD0 的计算公式为 52818/PFD0_FRAC,可设置的范围为 12~35 。 如 果 PLL2_PFD0 的 频 率 要 设 置 为 352MHz 的话,PFD0_FRAC=52818/352=27。
PFD0_STABLE: 此位为只读位,可以通过读取此位判断 PLL2_PFD0 是否稳定。
PFD0_CLKGATE: 为 1 的时候关闭 PLL2_PFD0 的输出,为 0 的时候使能输出。

其余同理

AHB、 IPG 和 PERCLK 根时钟设置

7 路 PLL 和 8 路 PFD 设置完成以后最后还需要设置 AHB_CLK_ROOT 和 IPG_CLK_ROOT的时钟

在这里插入图片描述

我们就将 AHB_CLK_ROOT、IPG_CLK_ROOT 和 PERCLK_CLK_ROOT 分 别 设 置 为 132MHz 、 66MHz 、 66MHz
在这里插入图片描述
这些东西全在参考手册里面:
在这里插入图片描述

结语

暂时先这样,先不深入学习了,内容太多了

这篇关于嵌入式Linux裸机开发(四)IMX6U主频和时钟配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Vue 2 项目中配置 Tailwind CSS 和 Font Awesome 的最佳实践举例

《Vue2项目中配置TailwindCSS和FontAwesome的最佳实践举例》:本文主要介绍Vue2项目中配置TailwindCSS和FontAwesome的最... 目录vue 2 项目中配置 Tailwind css 和 Font Awesome 的最佳实践一、Tailwind CSS 配置1. 安

SpringBoot中HTTP连接池的配置与优化

《SpringBoot中HTTP连接池的配置与优化》这篇文章主要为大家详细介绍了SpringBoot中HTTP连接池的配置与优化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、HTTP连接池的核心价值二、Spring Boot集成方案方案1:Apache HttpCl

Maven 插件配置分层架构深度解析

《Maven插件配置分层架构深度解析》:本文主要介绍Maven插件配置分层架构深度解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Maven 插件配置分层架构深度解析引言:当构建逻辑遇上复杂配置第一章 Maven插件配置的三重境界1.1 插件配置的拓扑

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

ubuntu16.04如何部署dify? 在Linux上安装部署Dify的技巧

《ubuntu16.04如何部署dify?在Linux上安装部署Dify的技巧》随着云计算和容器技术的快速发展,Docker已经成为现代软件开发和部署的重要工具之一,Dify作为一款优秀的云原生应用... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。它

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

VSCode中配置node.js的实现示例

《VSCode中配置node.js的实现示例》本文主要介绍了VSCode中配置node.js的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一.node.js下载安装教程二.配置npm三.配置环境变量四.VSCode配置五.心得一.no

一文教你如何解决Python开发总是import出错的问题

《一文教你如何解决Python开发总是import出错的问题》经常朋友碰到Python开发的过程中import包报错的问题,所以本文将和大家介绍一下可编辑安装(EditableInstall)模式,可... 目录摘要1. 可编辑安装(Editable Install)模式到底在解决什么问题?2. 原理3.

Linux系统调试之ltrace工具使用与调试过程

《Linux系统调试之ltrace工具使用与调试过程》:本文主要介绍Linux系统调试之ltrace工具使用与调试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、ltrace 定义与作用二、ltrace 工作原理1. 劫持进程的 PLT/GOT 表2. 重定

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA