Linux-ubuntu之主频和时钟配置

embedded/2024/12/26 20:09:21/

Linux-ubuntu之主频和时钟配置

  • 一,主频
  • 二,其它时钟配置
    • 1.PLL2和PLL3的PFD0-3设置
    • 2.AHB_CLK_ROOT
    • 3.IPG 和 PERCLK时钟
  • 三,总结

一,主频

在这里插入图片描述在这里插入图片描述24MHz 晶振为内核和其它外设提供时钟源,经电路后到PLL1变为996MHZ,再经过CACRR(ARM_PODF)2分频,变为498MHZ。内部电路:
在这里插入图片描述进行频率更改时,更改的过程要找个频率先顶着,即step_clk。先判断为CCSR的pll1_sw_clk_sel比特位为0(Pll1_main_clk),切换频率,先用step_clk,选择CCSR的step_sel,设置频率即寄存器 CCM_ANALOG_PLL_ARMn,使能并且设置低位,设置完后,切换到Pll1_main_clk。

	/*配置主频*/if(((CCM->CCSR >> 2)&0x01)==0)//pll1_main_clock{CCM->CCSR &= ~(1<<8);//CCSRde step_sel设置0CCM->CCSR |= (1<<2);//设置为step_clock模式}CCM_ANALOG->PLL_ARM = (1<<13) |((66<<0) & 0x7f);//设置频率1000MHZ,使能CCM->CCSR &= ~(1<<2);//打开pll1_main_clkCCM->CACRR =0;//设置1分频/*配置PLL和PFD,主要是PLL2和PLL3*/

二,其它时钟配置

1.PLL2和PLL3的PFD0-3设置

在这里插入图片描述PLL2的PDF由CCM_ANALOG_PFD_528n控制,读取值后,根据公式 528*18/PFD0_FRAC计算。

	unsigned int reg=0;reg = CCM_ANALOG->PFD_528;reg = reg & (~(0x3f3f3f3f));//将PFD0-3的频率清零reg = reg | (32<<24);//PLL2—PFD3=297MHZ  528*18/297=32reg = reg | (24<<16);//PLL2—PFD2=396MHZreg = reg | (16<<8);//PLL2—PFD1=594MHZreg = reg | (27<<0);//PLL2—PFD0=352MHZCCM_ANALOG->PFD_528 = reg;reg = CCM_ANALOG->PFD_480;reg = reg & (~(0x3f3f3f3f));//将PFD0-3的频率清零reg = reg | (19<<24);//PLL3—PFD3=297MHZreg = reg | (17<<16);//PLL3—PFD2=396MHZreg = reg | (16<<8);//PLL3—PFD1=594MHZreg = reg | (12<<0);//PLL3—PFD0=352MHZCCM_ANALOG->PFD_480 = reg;

2.AHB_CLK_ROOT

在这里插入图片描述AHB_CLK_ROOT的时钟源是PLL2_PFD2,因此①选择1,②选择0,③选择分频,由于PLL2_PFD2是396MHZ,AHB_CLK_ROOT想要132MHZ,选择三分频。

/*AHB_CLOCK_ROOT 132MHZ*/CCM->CBCMR =CCM->CBCMR & (~(3<<18));//清除为0CCM->CBCMR =CCM->CBCMR | (1<<18);//选用PPL2_PFD2时钟源CCM->CBCDR =CCM->CBCDR & (~(1<<25));//选择信号while(CCM->CDHIPR & (1 << 5));//只有开关允许,才将其写入

3.IPG 和 PERCLK时钟

在这里插入图片描述
IPG_CLK_ROOT和PERCLK_CLK_ROOT要的是66MHZ,AHB_CLK_ROOT是132MHZ。对于IPG_CLK_ROOT,先读取将CBCDR的IPG_PODF,再将CBCDR的IPG_PODF比特位设置为二分即可。对于PERCLK_CLK_ROOT,设置来着OSC,再将CSCMR1设置为1分频。

	/*IPG_CLK_ROOT 66MHZ*/CCM->CBCDR =CCM->CBCDR & (~(3<<8));//读取BIT:IPG_PODFCCM->CBCDR =CCM->CBCDR | (1<<8);//设置2分频/*PER_CLK_ROOT  66MHZ*/CCM->CSCMR1 &= ~(1 << 6);	//设置来自OSCCCM->CSCMR1 &= ~(7 << 0);    //设置1分频

三,总结

时钟利用树这种结构,将24MHZ的晶振,利用寄存器进行相关数值和使能配置,实现倍频,然后在利用各种分频实现不同频率的时钟,就像先由晶振产生PLL时钟源,再利用类似门控的选择信号以及分频,到AHB,再对AHB频率进行选择分频,实现IPG 和 PERCLK时钟 ,从而应用。就像由一个源头,再依次往下,形成使用各种外设和设备的时钟信号。


http://www.ppmy.cn/embedded/148246.html

相关文章

概率论得学习和整理31: 连续型随机变量的概率本质是求面积,均匀分布等

目录 1 连续性随机变量 2 连续性随机变量和 离散型随机变量&#xff0c;分布的区别 3 不要混淆概念 4 均匀分布的相关 4.1 定义 4.2 例子 1 连续性随机变量 连续性随机变量最大的特点&#xff0c;单个点上的概率0多了一个分布函数&#xff0c;因为从1维变2维了&#xff…

算法设计期末复习

文章目录 1. 什么是算法&#xff0c;算法有哪些特征&#xff0c;算法设计的基本步骤&#xff0c;算法的时间复杂度的确定2. 什么是算法分析&#xff0c;算法分析的主要内容是什么&#xff1f;怎么确定算法的时间复杂度&#xff1f;3. 什么是分治算法&#xff0c;分治算法通常用…

ACL-2024 | MapGPT:基于地图引导提示和自适应路径规划机制的视觉语言导航

作者&#xff1a; Jiaqi Chen, Bingqian Lin, Ran Xu, Zhenhua Chai, Xiaodan Liang, Kwan-Yee K. Wong, 单位&#xff1a; 香港大学&#xff0c;中山大学深圳校区&#xff0c;美团 原文链接&#xff1a;MapGPT: Map-Guided Prompting with Adaptive Path Planning for Visio…

armsom产品Debian系统开发

第一章 构建 Debian Linux 系统 我们需要按【armsom产品编译&烧录Linux固件】全自动编译一次&#xff0c;默认是编译 Buildroot 系统&#xff0c;也会编 译 uboot 和内核&#xff0c;buildroot 某些软件包依赖内核&#xff0c;所以我们必须编译内核再编译 Buildroot。同 理…

什么?Flutter 可能会被 SwiftUI/ArkUI 化?全新的 Flutter Roadmap

在刚刚过去的 FlutterInProduction 活动里&#xff0c;Flutter 官方除了介绍「历史进程」和「用户案例」之外&#xff0c;也着重提及了未来相关的 roadmap &#xff0c;其中就有 3.27 里的 Swift Package Manager 、 Widget 实时预览 和 Dart 与 native 平台原生语言直接互操作…

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证2)

根据参考文献8中的介绍&#xff0c;JWT Token主要分为3个部分&#xff1a;   1&#xff09;标题&#xff08;Header&#xff09;&#xff1a;主要记录令牌类型、签名算法&#xff08;加密算法&#xff09;类型&#xff0c;格式为Json字符串&#xff0c;然后使用Base64编码字符…

探索Linux中的Zombie僵死进程

文章目录 探索Linux中的Zombie僵死进程什么是Zombie僵死进程&#xff1f;僵死进程的产生原因如何识别僵死进程&#xff1f;如何清理僵死进程&#xff1f;僵死进程对系统的影响总结 探索Linux中的Zombie僵死进程 在Linux系统中&#xff0c;进程管理是一个非常重要的主题&#x…

Python发送带key的kafka消息

在Python中发送带有键&#xff08;key&#xff09;的Kafka消息&#xff0c;通常会使用confluent-kafka或kafka-python这样的库。这里我将分别展示如何使用这两个库来实现这个功能。 ### 使用 confluent-kafka 首先&#xff0c;确保你已经安装了confluent-kafka库。如果没有安装…