当前位置: 首页 > news >正文

玳瑁的嵌入式日记---0925(ARM--时钟)

一、核心概念定义

1. 定时器(EPIT/GPT)

定时器是一种通过对已知频率的时钟信号进行计数,实现定时、延时或事件计数功能的硬件模块或软件机制。在嵌入式系统中,主要以硬件定时器模块形式存在,如 EPIT、GPT 等,是实现精准时序控制的核心组件。

2. 时钟(Clock)

在电子系统中,时钟是产生稳定、周期性振荡信号的电路或组件。其作用类似 “节拍器” 或 “心跳”,为数字电路(如 CPU、定时器、外设)的所有操作提供同步时序基准,确保各模块按统一节奏协同工作。

3. 实时时钟(RTC, Real Time Clock)

RTC 是微处理器中的专用功能模块,核心特点是在系统主电源关闭时,可通过备用电源(如纽扣电池)继续工作,从而持续提供精确的日历(年 / 月 / 日)和时间(时 / 分 / 秒)信息,常用于记录事件发生时间、唤醒休眠系统等场景。

二、硬件基础:时钟与分频相关组件

1. 时钟源:晶体振荡器

  • 核心作用:为整个系统提供最原始、最稳定的时钟信号,是所有时序的 “源头”。
  • 工作原理:将石英晶体切割成特定形状(如音叉形),对其施加交变电压后,晶体会因 “压电效应” 产生稳定的机械振荡,进而转化为电信号输出,频率精度远高于普通 RC 振荡电路。

2. PLL(Phase Locked Loop,锁相环电路)

  • 核心功能倍频(将输入时钟频率放大)。
  • 作用场景:当晶体振荡器输出频率较低(如 12MHz),无法满足 CPU 或高速外设(如 USB、以太网)的高频需求时,通过 PLL 将基础频率倍频至目标频率(如 72MHz、1GHz),为系统提供高速时钟。

3. Prescale(分频器)

  • 核心功能分频(将输入时钟频率降低)。
  • 作用场景:高速时钟(如 CPU 核心时钟)直接供给低速外设(如定时器、UART)时,会导致外设计数过快、功耗过高。通过分频器按固定比例(如 1/2、1/4、1/16)降低频率,得到外设所需的低速时钟。

4. PFD(Phase Fractional Prescale,相位分数分频器)

  • 核心功能灵活调节频率,输出频率可升可降(区别于普通分频器仅能降频),且支持非整数倍的频率调节(如将 10MHz 调节为 12.5MHz)。
  • 优势:相比整数分频器,能提供更精细的频率梯度,满足不同外设对时钟精度的差异化需求。

三、经典单片机 / 处理器定时器工作原理

1. 51 单片机定时器

51 单片机定时器核心为8 位 / 16 位计数器,工作依赖系统时钟分频后的信号,核心特点如下:

  • 8 位定时器(如 T0/T1 模式 0/2):支持自动重装。初始化时设置 “计数初值”,计数器从初值开始累加,当计数到最大值(0xFF)时,自动将初值重新载入计数器,无需在中断服务程序中手动赋值,适合产生固定频率的脉冲或定时。
  • 16 位定时器(如 T0/T1 模式 1):需在中断服务程序中手动重装初值。16 位计数器最大值为 0xFFFF,计数溢出后会触发中断,需在中断服务函数中重新写入初值,才能继续下一轮定时,适合需要更长定时周期的场景。

2. I.MX6ULL 处理器定时器

I.MX6ULL 作为 ARM 架构处理器,定时器模块更丰富,核心介绍EPITGPT两种常用定时器:

(1)EPIT(Enhanced Periodic Interrupt Timer,增强型周期中断定时器)
  • 核心定位:专注于周期性中断,适合实现固定间隔的定时任务(如定时采样、LED 闪烁)。
  • 工作原理
    1. 从系统时钟中选择合适的时钟源(需经过 PLL / 分频器处理);
    2. 设置 “计数初值”:根据目标定时时间和时钟频率计算初值(公式:初值 = 定时时间 × 时钟频率);
    3. 计数器从初值开始递减(部分型号为递增),当计数到 0 时,触发中断,并自动重装初值,进入下一轮计数,实现 “周期中断”。
  • 典型实验:1s 中断反转 LED 灯假设时钟频率为 1MHz(1000000Hz),1s 定时需计数 1000000 次,因此设置计数初值为 1000000。计数器每减至 0 时触发中断,在中断服务函数中切换 LED 的电平状态(亮→灭 / 灭→亮),即可实现 LED1 秒闪烁。
(2)GPT(General Purpose Timer,通用目的定时器)
  • 核心定位:功能更灵活,除定时外,还支持输入捕获比较输出,适用于复杂时序控制场景。
  • 核心功能
    • 输入捕获:检测外部引脚的电平变化(如上升沿、下降沿),并记录当前计数器值,可用于测量脉冲宽度、频率(如测量电机转速、红外信号解码);
    • 比较输出:预先设置 “比较值”,当计数器值与比较值相等时,触发指定动作(如输出高低电平、产生脉冲),可用于生成 PWM 波(如电机调速、LED 呼吸灯);
    • 自由运行模式:计数器从 0 开始持续递增,溢出后重新从 0 开始,可用于实现精准延时。
  • 典型实验:自由运行模式编写精准延时函数
    1. 配置 GPT 时钟源(如 1MHz),开启自由运行模式;
    2. 延时函数中,记录延时开始时的计数器值(记为start_val);
    3. 循环读取当前计数器值(curr_val),计算差值curr_val - start_val
    4. 当差值达到 “延时时间 × 时钟频率” 时,退出循环,完成精准延时(如 1ms 延时需差值达到 1000)。

四、关键计算说明(避免混淆)

  1. 频率计算:1M = 1000×1000频率单位中,1MHz(兆赫兹)= 1000kHz(千赫兹)= 1000×1000Hz(赫兹),即 1 秒内振荡 1000000 次,常用于定时器初值计算(如 1MHz 时钟下,1ms 需计数 1000 次)。

  2. 存储容量计算:1MB = 1024×1024存储单位中,1MByte(兆字节)= 1024KByte(千字节)= 1024×1024Byte(字节),与频率计算的 “1000 进制” 不同,需注意区分,避免计算错误。


1. 什么是 PLL、Prescaler、PFD,它们各自有什么作用?

  • PLL(Phase - Locked Loop,锁相环):是一种反馈控制系统,能使输出信号的相位与输入参考信号的相位保持同步(锁定)。作用是将输入的参考时钟信号倍频,产生更高频率且稳定的时钟信号,为系统各模块提供时钟。
  • Prescaler(预分频器):是一种分频电路。作用是对输入的时钟信号进行分频,降低时钟频率,以满足不同模块对时钟频率的需求,比如一些低速外设不需要高频时钟,就可以通过预分频器降低时钟频率。
  • PFD(Phase - Frequency Detector,鉴频鉴相器):是 PLL 中的关键部件。作用是检测输入参考时钟和 PLL 反馈时钟之间的相位差和频率差,输出相应的误差信号,该误差信号用于后续调整 PLL 输出时钟的相位和频率,使 PLL 实现锁定。

2. IMX6ULL 中有几个 PLL?几个 PFD?

        IMX6ULL 中有多个 PLL,常见的有 PLL1(系统 PLL)、PLL2(音频 PLL)、PLL3(USB PLL)、PLL4(视频 PLL)、PLL5(HDMI PLL)等;每个 PLL 通常有多个 PFD(比如 PLL1 有 4 个 PFD),不同的 PLL 所包含的 PFD 数量可能不同

3. 简述 ARM PLL 的配置流程

  1. 使能 PLL 相关时钟:确保 PLL 模块的电源和时钟使能,使其可以工作。
  2. 配置参考时钟源:选择 PLL 的输入参考时钟,比如选择外部晶振或者内部时钟源作为输入。
  3. 配置 PLL 控制寄存器:设置 PLL 的倍频系数、分频系数等参数,通过这些参数来确定 PLL 输出时钟的频率。
  4. 使能 PLL 并等待锁定:启动 PLL,然后等待 PLL 锁定指示信号,表明 PLL 已经稳定输出所需频率的时钟。
  5. 配置时钟分发:将 PLL 输出的时钟通过分频、选通等方式分发给系统各个需要时钟的模块,比如 CPU、外设等。

4. IMX6ULL 中的 EPIT 和 GPT 的工作原理是什么?

  • EPIT(Enhanced Periodic Interrupt Timer,增强型周期性中断定时器)
    • 是一个 32 位的定时器,可工作在自由运行模式或周期性中断模式。
    • 工作时,它从设定的初始值开始递减计数(也可递增,取决于配置),当计数到 0 时,产生中断信号,并且可以自动重新加载初始值,从而实现周期性的定时中断功能,常用于需要周期性触发的任务,如定时采样、周期性控制等。
  • GPT(General Purpose Timer,通用定时器)
    • 是一个 32 位的定时器,功能更灵活。
    • 它可以工作在多种模式下,如自由运行模式、周期性模式、输入捕获模式、输出比较模式等。//在自由运行模式下,定时器从 0 开始不断递增计数;在周期性模式下,计数到设定值后产生中断并重新加载初始值;输入捕获可用于测量外部事件的时间间隔;输出比较可用于产生特定的时序信号,广泛应用于各种定时、计数和时序控制场景。
http://www.dtcms.com/a/406124.html

相关文章:

  • 《代码的“言外之意”:从词源学透彻理解编程》字符的“双重生活”:从Escape到Raw
  • 【Spark+Hive+hadoop】人类健康生活方式数据分析
  • K8S部署的rook-ceph下线osd流程
  • 建站历史查询如何做网站推广页面
  • maven使用非明文密码配置
  • 做网站后期维护工资贴吧wordpress ad widget
  • Reactor 模式:高并发网络编程的事件驱动利器
  • 无人机数传模块技术要点概述
  • Telegram机器人Token和ChatID获取教程
  • Deepoc具身智能模型:为传统电厂巡检机器人注入“灵魂”与“智慧”
  • 中医智慧+AI科技,七彩喜机器人让健康养护“智”在必得
  • Ubuntu 中 Bash / Zsh / Ash / Dash 的使用与区别(含对比图)
  • leetcode 814 二叉树剪枝
  • 【Redis】热Key/大Key问题、缓存击穿、缓存穿透、缓存雪崩、缓存与数据库一致性问题
  • 大模型剪枝系列——基于权重大小剪枝
  • 制作网站的模板深圳网站改版公司
  • 【Linux基础知识系列:第一百四十篇】理解SELinux与系统安全
  • dbswitch:一款免费开源、功能强大的异构数据库迁移同步工具
  • python+uniapp基于微信小程序美食点餐系统
  • Go语言100个实战案例-进阶与部署篇:使用Go打包生成可执行文件
  • 【Golang】--- 函数深度解析
  • 后端进阶-性能优化
  • 吉林做网站wordpress创建登录页
  • 【C++篇】C++11:从列表初始化到移动语义
  • WPS清除图片段落布局脚本
  • Excel学生成绩表,如何生成成绩分析报告?
  • 面试_场景方案设计
  • 【AI - nlp】Tokenizer简介及常见编码方式
  • JavaScript--基础ES(二)
  • 案例分享:增材制造的点阵材料压缩测试-VIC-3D高空间分辨率DIC系统在增材制造复杂结构中的应用