裸机开发 时钟配置,EPIT

1.概念

时钟(clock):在电子系统中是一个产生稳定、周期性振荡信号的电路或组件。这个信号像节拍器或心跳一样,为数字电路中的各种操作提供同步时序基准。

PLL(phase locked loop)锁相环电路: 倍频

PFD(phase fractional Prescale)相位分数分频器: 输出频率可升可降

2.时钟配置

1.CCM

CCM 是 i.MX6U 时钟系统的 “大脑”,通过 PLL(锁相环,倍频) 和 Divider(分频器) 实现时钟信号的 “精准缩放”,核心模块包括:

  • PLL 模块(倍频核心)
    接收低频时钟源(如 24MHz XTAL),通过倍频生成高频时钟,供高性能模块使用。i.MX6U 针对不同时钟域设计了专用 PLL:

    • PLL1(ARM PLL)Cortex-A7 CPU 的专属 PLL,最高可将 24MHz 倍频至 792MHz(即 CPU 最高主频 792MHz,需配合电压调整)。
    • PLL2(System PLL):为外设域提供基础时钟,输出固定 528MHz,再通过分频供给 UART、SPI、GPT 等外设。
    • PLL3(USB PLL):专门为 USB 模块提供 480MHz 时钟(USB 2.0 高速模式需求)。
    • PLL4(Audio PLL):为音频模块(如 I2S)提供精准时钟,支持灵活配置频率。
  • Divider 模块(分频调节)
    对 PLL 输出的高频时钟进行 “降压”,适配不同模块的时钟需求(如 UART 常用 115200bps 波特率,需 8MHz 或 16MHz 时钟)。
    例:PLL2 输出 528MHz → 经分频器(÷66)得到 8MHz → 供给 UART1 模块。

  • Clock Gate(时钟门控)
    为每个模块提供独立的 “时钟开关”—— 未使用的模块可关闭时钟(如 UART2 未使用时,关闭其时钟),是 i.MX6U 低功耗设计的关键。

2.PLL模块

1.PLL1

kernal: CCM_ANALOG_PLL_ARMn

配置步骤:

  1. 先选择osc_clk,让step_clk为24MHz
  2. 再将PLL1的输出改成step_clk,让ARM暂时工作在24MHz;
  3. 配置PLL为1056MHz,注意设置倍频因子之前先把PLL之后的二分频设置好,避免ARM内核故障!!
  4. 最后改回pll1_main_clk

示例

//ARM工作时钟配置              先分频再倍频保证ARM内核正常工作CCM->CACRR &= ~(7 << 0);   //先清0CCM->CACRR |= (1 << 0);  //设置为2分频(001)CCM->CCSR &= ~(1 << 8);    //设置24MHzCCM->CCSR |= (1 << 2);     //设为另外一路(step_clk),此时 锁相环短路(pll1_main_clk)(PPL_ARM), 可安全配置PPL_ARMunsigned int t = CCM_ANALOG->PLL_ARM;   //此时可安全配置PPL_ARMt &= ~(0x7F << 0);t |= (88 << 0);t |= (1 << 13);t &= ~(3 << 14);CCM_ANALOG->PLL_ARM = t;CCM->CCSR &= ~(1 << 2);     //切换回PPL_ARM路

2.528PLL

它是 i.MX6U 芯片中负责为高速外设和关键功能模块提供稳定、高频时钟的核心锁相环(PLL),因输出时钟最高可配置为528MHz而得名,是整个芯片时钟树中至关重要的 “高频时钟源” 之一。

CCM_ANALOG_PFD_528n

由手册知,相关配置为

故PLL2下的PFDn需要配置的MHz如图,相关计算公式为

故对于PFD0来说为528 * 18 / 352 = 27

示例

    t = CCM_ANALOG->PFD_528;t &= ~((0x3F << 0) | (0x3F << 8) | (0x3F << 16) | (0x3F << 24));  //先清0t |= ((27 << 0) | (16 << 8) | (24 << 16) | (32 << 24));CCM_ANALOG->PFD_528 = t;

3.PLL3

在 i.MX6U 芯片中,PLL3(USB PLL) 是专门为 USB(通用串行总线)模块设计的锁相环(PLL),其核心作用是为 USB 控制器提供符合协议规范的高精度时钟信号

相关配置如图

示例如图

    t = CCM_ANALOG->PFD_480;t &= ~((0x3F << 0) | (0x3F << 8) | (0x3F << 16) | (0x3F << 24));  //先清0t |= ((12 << 0) | (16 << 8) | (17 << 16) | (19 << 24));CCM_ANALOG->PFD_480 = t;

3.时钟根配置

需配置AHB_CLK_ROOT    132MHZ

           PERCLK_CLK_ROOT  66MHz

           IPG_CLK_ROOT        66MHz

在 i.MX6U(基于 Cortex-A7 架构)的时钟树中,AHB_CLK_ROOTPERCLK_CLK_ROOT 和 IPG_CLK_ROOT 是三个核心的 “时钟根节点”,它们从上层 PLL 获取时钟信号后,通过分频或直接分配,为不同类型的外设、总线和功能模块提供时钟。三者的定位、频率来源和服务对象有明确分工,共同构成了外设时钟域的核心架构。

AHB(Advanced High-performance Bus,高级高性能总线)是芯片内部的高速数据传输总线,AHB_CLK_ROOT 是该总线的根时钟,决定了高速外设和内存接口的数据传输速率。

IPG(Internal Peripheral Bus,内部外设总线)是 AHB 总线的 “子总线”,主要连接中速外设,IPG_CLK_ROOT 是该总线的根时钟,也是多数通用外设的基础时钟源。

PERCLK(Peripheral Clock,外设时钟)是 IPG 总线的 “低速分支”,PERCLK_CLK_ROOT 专为对时钟频率要求较低的外设设计,是低速外设的统一时钟源。

示例

    //AHB_clk_root配置CCM->CBCMR &= ~(3 << 18);     //先清0CCM->CBCMR |= (1 << 18);      //选择 pll2的pfd2t = CCM->CBCDR;t &= ~(1 << 25);     //选通pll2的门t &= ~(7 << 10);     //清0t |= (2 << 10);      //设为010三分频//IPG_CLK_ROOT配置t &= ~(3 << 8);      //清0t |= (1 << 8);      //设为001二分频     IPG_CLK_ROOTCCM->CBCDR = t;//PRECLK-CLK_ROOT配置t = CCM->CSCMR1;t &= ~(1 << 6);       //选通所要选择的路t &= ~(0x3F << 0);    //设为1分频       PRECLK-CLK_ROOTCCM->CSCMR1 = t;

3.EPIT

1.工作模式

EPIT 支持两种经典工作模式,核心差异在于计数到 0 后的行为:

1. 重装载模式(Reload Mode)
  • 工作逻辑:计数器从 LR(重装载寄存器)的值开始向下计数,当计数到 0 时:
    1. 触发 “计数结束中断”;
    2. 自动将 LR 的值重新装
    3. 载到计数器,开始新一轮计数(无需软件干预)。
  • 核心特点:中断间隔严格固定(周期 = LR 值 × 计数周期),无累积误差,适合周期性任务(如 1ms 一次的系统节拍)。
  • 示例:若 LR=1000,计数周期 = 1μs,则每 1000μs(1ms)触发一次中断,循环往复。
2. 自由运行模式(Free-Run Mode)
  • 工作逻辑:计数器从 LR 的值开始向下计数,当计数到 0 时:
    1. 触发 “计数结束中断”;
    2. 计数器停止计数(保持 0 值),需通过软件重新写入 LR 值才能再次启动。
  • 核心特点:仅触发一次中断,适合单次定时(如延时 10ms 后执行某个初始化操作)。
  • 示例:若 LR=10000,计数周期 = 1μs,则 10ms 后触发一次中断,之后计数器停止。

2.相关配置

示例

void epit1_init(void)
{unsigned int t;t = EPIT1->CR;t &= ~(3 << 24);    //先清0,再写1t |= (1 << 24);     //设置时钟源为外设时钟irq_clk_roott |= (1 << 17);t &= ~(0xFFF << 4);  //清0t |= (65 << 4);      //分频66倍(65+1)后即为1MHzt |= (1 << 3);       //set-forget模式t |= (1 << 2);       //比较中断启用t |= (1 << 1);   EPIT1->CR = t;EPIT1->LR = 1000000;EPIT1->CMPR = 0;EPIT1->CNR = 1000000;//注册中断处理函数system_interrupt_register(EPIT1_IRQn, epit1_irq_handler);//GIC中断使能GIC_EnableIRQ(EPIT1_IRQn);//GIC中断优先级设置GIC_SetPriority(EPIT1_IRQn, 0);//enableEPIT1->CR |= (1 << 0);   //EPIT启用,注意最后再启用
}

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

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

相关文章

Linux-文本三剑客(grep、sed、awk)

Linux-文本三剑客前言一、grep二、sed三、awk模式 -- 正则表达式关系表达式、运算符表达模式匹配表达式动作 输出流程控制参数传递&#xff0c;awk接受外部变量统计数组的使用分组统计练习常用内置函数前言 grep、sed、awk 被称为 “文本三剑客”&#xff0c;它们是处理文本文…

主流反爬虫、反作弊防护与风控对抗手段

文章目录1. 写在前面2. 指纹检测3. 行为验证3. 加固防护4. 链路检测5. 风控埋点6. 游客注册7. 数据防护8. 账号权重9. 反调阻断【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、…

金蝶云星空插件开发记录(一)

实现目的&#xff1a;新增供应商保存后&#xff0c;触发钉钉审批流程&#xff0c;并根据钉钉审批结果回写是否合格供应商。实现思路&#xff1a;通过BOS平台供在应商管理界面新增两个复选框字段&#xff1a;是否钉钉审批、是否合格供应商&#xff0c;若在新建供应商档案时勾选是…

企业跨区域组网新解:SD-WAN技术打造安全稳定网络体系

前言在数字化浪潮席卷全球的今天&#xff0c;企业跨区域网络互联已成为支撑业务发展的关键基础设施。传统MPLS专线虽性能稳定&#xff0c;但高昂成本和漫长部署周期令众多企业望而却步。SD-WAN技术的出现&#xff0c;正以其智能、灵活和成本效益的优势&#xff0c;重塑企业组网…

Docker 容器化

引言在解释docker是什么之前&#xff0c;我们首先应该先了解的是容器化的概念。什么是容器&#xff1f;就是一个沙箱&#xff0c;在这个沙箱中涵盖了特定应用运行的一切依赖的内容。但他不是一个操作系统&#xff0c;且和底层的操作系统是隔离的。什么是容器化&#xff1f;容器…

LeetCode刷题——hot 100(3)

题目1&#xff1a;矩阵置零题目&#xff1a;问题分析&#xff1a;使用两个布尔数组来分别记录哪行哪列出现了0&#xff0c;当出现0的行和列&#xff0c;对应的布尔数组值置为true。再次遍历数组&#xff0c;当出现行数组和列数组中的值为true&#xff0c;则对应的原数组的值置为…

Ajax-day2(图书管理)-渲染列表

本篇笔记素材来自“黑马程序员” 渲染列表图书管理一、获取数据二、渲染数据完整代码图书管理 Bootstrap 框架渲染列表&#xff08;查&#xff09;新增图书&#xff08;增&#xff09;删除图书&#xff08;删&#xff09;编辑图书&#xff08;改&#xff09; 自己的图书数据&a…

MOS管的电路

MOS管的三极都会存在以下三个电容&#xff0c;分别是&#xff1a;Cgs,Cgd,Cds 输入电容CissCgsCgd 输出电容CossCgdCds 反向传输电容CrssCgd&#xff0c;也叫米勒电容 然而&#xff0c;这三个等效电容是构成串并联组合关系&#xff0c;他们并不是独立的&#xff0c;而是相互…

STM32_05_时钟树

时钟 d用来输入数据&#xff0c;CLK就是我们的时钟&#xff0c;CPU1s中72000000HZ个时钟周期STM32的时钟树锁相环HSE时钟源HSI时钟源LSE时钟源LSI时钟源SystemInit函数SetSysClock函数SetSysClockTo72函数SystemInit()后时钟频率大小总结RCC标准库函数定义变量a&…

C语言---判断语句

文章目录1. if 语句2. if...else 语句3. if...else if...else 语句4. switch 语句5. 三元运算符 ( ? : )总结与对比如何选择C语言中的判断语句用于根据给定的条件来决定执行哪一段代码。其核心是条件为真&#xff08;必须&#xff09;则执行一段代码&#xff0c;条件为假&…

[硬件电路-212]:电流的本质确实是电子的移动

1. 微观机制&#xff1a;电子的定向漂移与热运动定向漂移&#xff08;Drift Motion&#xff09;&#xff1a;在导体&#xff08;如金属&#xff09;中&#xff0c;自由电子&#xff08;价电子&#xff09;受电场驱动&#xff0c;从负端向正端定向移动&#xff0c;形成宏观电流。…

双RFSOC47DR-16通道5GSPS ADC采集模块

16通道5GSPS ADC采集板卡组成如图1所示。该板卡的输入接口为SMA单端输入&#xff0c;ADC采集和处理采用Xilinx公司的XCZU47DR-2FFVE1156I芯片。板卡需配备4路QSFP28光口输出&#xff0c;并需要集成网口、DDR4、SD卡、USB调试口。两块RF-Soc需确保连接通信功能。板卡的16通道需实…

pytest -- 中文文档

前言 零基础1小时快速入门pytest自动化测试教程&#xff0c;全套项目框架实战pytest配置文件可以改变pytest的运行方式&#xff0c;它是一个固定的文件pytest.ini文件&#xff0c;读取配置信息&#xff0c;按指定的方式去运行 非test文件 pytest里面有些文件是非test文件 pyt…

硬件开发2-ARM裸机开发3-IMX6ULL - 引入中断

一、铺垫引入中断 → 按键1、概要&#xff1a;实现按键控制发光二极管和蜂鸣器输入类型的外设&#xff1a;按键&#xff08;key&#xff09;2、参考手册内容完成配置过程&#xff08;1&#xff09;key 按键原理图&#xff08;2&#xff09;core 内核中命名 -- UART1 CTS&#x…

Ansible的 Playbook 模式详解

目录一、Playbook模式1.1 Playbook 的优势1.2 Playbook 的组成1.3 安装 httpd 服务案例1.4 Playbook 命令及常用参数1.5 Playbook 的语法 —— 权限相关1. remote_user2. become3. become_method1.6 Playbook 的通知与触发机制1. notify2. handlers3. 使用示例4. 使用场景1.6 P…

猿辅导Java后台开发面试题及参考答案

int 与 Integer 的区别是什么&#xff1f;若创建数量庞大的数字时使用 Integer&#xff0c;会对重复数字创建新对象吗&#xff1f;int 是 Java 中的基本数据类型&#xff0c;直接存储数值&#xff0c;占用 4 个字节&#xff0c;默认值为 0&#xff0c;不需要通过 new 关键字创建…

代码随想录学习摘抄day9(回溯1-11)

一个朴实无华的目录定义&#xff1a;回溯法也可以叫做回溯搜索法&#xff0c;它是一种搜索的方式。应用场景&#xff1a;回溯法解决的问题都可以抽象为树形结构代码模板题型第77题. 组合思路&#xff1a;每次从集合中选取元素&#xff0c;可选择的范围随着选择的进行而收缩&…

Altium Designer(AD24)打开工程文件的几种方法

🏡《专栏目录》 目录 1,概述 2,源文件 2,菜单栏 4,工具栏 5,注意事项 1,概述 本文介绍几种打开工程文件的方法。 2,源文件 找到工程的源文件存储路径,找到.PrjPcb的源工程文件,双击打开。 2,菜单栏 第1步:执行File→Open, 第2步:找到工程文件的存储路径,并选中…

Linux嵌入式自学笔记(基于野火EBF6ULL):2.点灯与ubuntu安装

一、点灯登录root&#xff1a;账号&#xff1a;root ; 密码&#xff1a;root点灯命令&#xff1a;echo 0 > /sys/class/leds/red/brightness #关闭red灯 echo 0 > /sys/class/leds/blue/brightness #关闭blue灯 echo 0 > /sys/class/leds/green/brightness …

【Java实战㊷】Java实战:MyBatis-Plus 开启MySQL数据库高效操作之旅

目录 一、MyBatis-Plus 环境集成 1.1 项目依赖引入 1.2 数据库配置 1.3 代码生成器使用 二、核心 CRUD 操作实现 2.1 基础查询 2.2 数据新增与修改 2.3 复杂查询场景 三、性能优化与高级特性 3.1 缓存配置 3.2 乐观锁实现 3.3 字段自动填充 四、实战案例:用户管理模块开发 4.1…