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

ARM架构——学习时钟7.2

补充:消抖:

  • 针对按键操作中的信号抖动问题,有硬件与软件两种消抖方法。
  • 硬件消抖可通过添加电容或使用施密特触发器实现,后者利用正反馈形成迟滞比较器,设定上下门限电压以过滤毛刺。
  • 施密特触发器通过电阻网络构建双阈值电压(如3.3V与1.6V),确保输入信号在跨越门限时产生稳定跳变,有效抑制高频噪声干扰。
  • 软件消抖通常结合定时器,在检测到中断后延迟一段时间再读取状态,避开机械抖动期,常用延时时间为20ms左右。

一、12M晶振

  执行一条指令所花费时间:t = 1 /f (时间周期)

iMXULL 一上电,外部一个24M的晶振(石英差 稳定的时钟源), 产生396MHZ的时钟,通过时钟树的操作,产生不同频率的时钟供给不同的外设使用。

二、时钟树里的组成:

三、时钟树

  • 时钟配置需遵循安全流程:先降低目标路径时钟频率,再修改PLL参数,最后切回主路径,避免因频率突变导致CPU死机。
  • 具体操作包括将ARM主频从默认396MHz提升至528MHz,通过设置PLL1倍频系数为88,并正确配置CCM相关寄存器完成。
  • 同步配置PLL2下的四个PFD分频器,分别输出352MHz、594MHz、396MHz和297MHz,以满足不同外设的时钟需求。
  • 对PLL3下的PFD也进行相应设置,支持USB高速通信所需的720MHz等频率。

左下角四种分频器:

  • 灰色的:静态分频器(锁频的无法改)
  • 预分频器:2bit(00)3分频(000)6分频(000000)
  • 梯形:多路选择器
  • cg:时钟门

外部时钟24M接入,7个PLL:

  • 系统时钟源自外部24MHz晶振,经内部锁相环(PLL)倍频后生成高频时钟供给CPU及外设使用。
  • 核心时钟部件包括锁相环(PLL)用于升频、预分频器(Prescaler)用于降频,以及相位分数分频器(PFD)支持灵活的频率变换。

1.第一个PLL1(ARM PLL):可配置,用于生成CPU主频

tip:ARM工作时钟配置:先配分频值,再配倍频值(减小波动的影响)

 1.1CACRR[ARM_PODF]    先清零再二分频(001)

    1.2、配置PLL倍频

    防止倍频破坏ARM:引入备用时钟源,经过选通门先短路PLL,设置倍频,再重新链接PLL

    step1:CCMS_TEP_SEL(bit8置0)

    step2:CCMS_PLL1_SW_CLK_ SEL设置为;step_clk(bit2 置1)

      step3:PLL计算倍频系数

      • 设置88倍频系数
      • 使能
      • 24M时钟源 选0x0

      step4:CCMS_PLL1_SW_CLK_ SEL设置为;pll1_main_clk(bit2 置0)

         /* 1. 先让 CPU 二分频,降低频率冲击 */CCM->CACRR &= ~(7 << 0); /* 清 ARM_PODF */CCM->CACRR |= (1 << 0);  /* 写 1 → ÷2 *//* 2. 切到 PLL1 旁路,锁相环可安全改倍频 */CCM->CCSR &= ~(1 << 8); /* BYPASS=0 允许旁路 */CCM->CCSR |= (1 << 2);  /* PLL1_BYPASS=1 正式旁路 *//* 3. 改 PLL1 倍频系数 DIV_SELECT = 88*    fvco = 24 MHz × 88 = 2112 MHz */unsigned int t = CCM_ANALOG->PLL_ARM;t &= ~(0x7F << 0);       /* 清旧倍频 */t |= (88 << 0);          /* 新倍频 */t |= (1 << 13);          /* ENABLE=1 */t &= ~(3 << 14);         /* 保留默认值 */CCM_ANALOG->PLL_ARM = t; /* 写入,PLL 重新锁定 *//* 4. 退出旁路 → 新时钟立刻送到内核 */CCM->CCSR &= ~(1 << 2); /* PLL1_BYPASS=0 */

      2第二个叫PLL2(528PLL)倍频锁频,固定输出528M时钟,不可通过寄存器修改,输出四个PFD

      2.1计算分频系数:

      2.2先清零

      • t = CCM_ANALOG->PFD_528;
      •  t &= ~0x3F3F3F3F; /* 清 4 个 FRAC */

      2.3在对应位置置数

       t |= (27 << 0) | (16 << 8) | (24 << 16) | (32 << 24);

      CCM_ANALOG->PFD_528 = t;

      3第三个是PLL3(480PLL或USB PLL),输出四个PFD相位分数分频器

      (同理):

      •   t = CCM_ANALOG->PFD_480;
      •   t &= ~0x3F3F3F3F;
      •   t |= (12 << 0) | (16 << 8) | (17 << 16) | (19 << 24);
      •   CCM_ANALOG->PFD_480 = t;
         /* 5. 配置 528_PLL 的 4 路 PFD,给 AHB/IPG/USDHC 等用*    PFDx = 528 MHz × 18 / PFDx_FRAC */t = CCM_ANALOG->PFD_528;t &= ~0x3F3F3F3F; /* 清 4 个 FRAC */t |= (27 << 0) | (16 << 8) | (24 << 16) | (32 << 24);CCM_ANALOG->PFD_528 = t;/* 6. 配置 480_PLL 的 4 路 PFD,给 UART/SPDIF 等用 */t = CCM_ANALOG->PFD_480;t &= ~0x3F3F3F3F;t |= (12 << 0) | (16 << 8) | (17 << 16) | (19 << 24);CCM_ANALOG->PFD_480 = t;

      4其他PLL

      第七个PLL7(与USB2 PLL)用以测试USB1的设备,即PLL3

      PLL6(用以以太网设备)

      PLL5(用以视频设备)

      PLL4(用以音频设备)

      有源蜂鸣器(1插电即响)(2插入不同频率的PWM波 输出不同音调)

        四、时钟根配置

        整个时钟树分为三类:

        1时钟选择器(配置在CCM Analog Memory Map/Register Definition)

        2时钟根生成器(配置在CCM Memory Map/Register Definition)

        3系统时钟

        注意:

        • AHB总线时钟、IPG外设时钟等时钟根需基于主PLL输出进行二次分频,确保数据传输与CPU运算协调。

        • 计划将AHB时钟设为132MHz,IPG及外设时钟设为66MHz,以平衡性能与功耗。
        • 时钟门控(Clock Gating)机制可用于关闭闲置模块的时钟供应,降低系统能耗

        1、三种时钟根工作范围:

        AHB_CLK_ROOT 6-132

        PERCLK_CLK_ROOT 3-66

        IPG_CLK_ROOT 3-66

        确定好配置方案:

        1配置AHB_CLK_ROOT的时钟树

        1.1CBCMR的bit18-19:PERIPH_ CLK_SEL  配置为从PFD2(先清零再置01)(396Mhz)

        2 CBCDR要配置两个地方 10-12和 25(3分频为 132HZ )

        2.配置IPG_CLK_ROOT的时钟树

        在前面基础上,增加(2分频)(66Mhz)

        3.配置PERCLK_ROOT的时钟树

        在前面基础上增加(1分频 66MHZ)

        五、增强型周期中断定时器(epit)

        1.32位 减类型时钟

        2两种模式:

        0当计数器达到零时,它会从模数寄存器重新加载(设置并忘记模式)

        1当计数器达到零时,它会滚动到0xFFFFFFFF(自由运行模式)

        3、关于寄存器:

        计数寄存器,然后减减,直到和比较寄存器相等,重复进行

        3.1EPITx_CR:

        3.2EPITx_SR:

        3.3EPITx_LR、3.4EPITx_CMPR、3.5CNR::

        六、通用中断定时器(gpt)

        GPT通用中断计数器的应用:

        输入捕获(连接到一个脉冲产生器 红外对管or其他器件)、输出,计算两个脉冲之间时间对应的计数寄存器的里的指,获得了两个脉冲hi间的时间差,进一步计算到脉冲周期or频率,延伸到测速的场景:

        输出比较器可以设置三个数值,当计数器的值增加到与这些比较器值相等时,会触发中断。这可以用于产生PWM(脉宽调制)信号,通过调节占空比来输出方波。PWM波可以通过外围芯片将数字信号模拟成模拟信号,如正弦波,用于驱动电机。

        PWM波的应用场景之一是电机的闭环控制。通过一边控制转速的增减,另一边测试转速,可以通过闭环控制来调节电机的转动。这种方法允许精确控制电机的速度和方向,实现高效的电机驱动和控制。

        • EPIT(增强型周期中断定时器)支持set-and-forget和free-running两种模式,前者只需初始化一次即可持续运行,CPU干预极少,适合实现周期性中断(如每秒翻转LED)。
        • GPT(通用定时器)具备输入捕获和输出比较两大功能:输入捕获可用于测量脉冲时间差以计算频率或转速;输出比较可设置三路PWM波,通过调节占空比控制电机等设备。
        • GPT在free-running模式下可封装为精准延时函数(毫秒/微秒级),其工作流程包括读取计数器初值、循环等待并累计时间差直至达到目标时长。
        • EPIT常用于操作系统的时间片轮询调度,而GPT则更适用于通用外设的计时任务。
        http://www.dtcms.com/a/389886.html

        相关文章:

      • VS Code 调试配置详解:占位符与语言差异
      • 锁 相关知识总结
      • caffeine 发生缓存内容被修改以及解决方案-深度克隆
      • rust编写web服务06-JWT身份认证
      • 《怪猎:荒野》制作人:PC平台对日本游戏非常重要
      • 大模型训练框架(二)FSDP
      • MySQL——系统数据库、常用工具
      • 蓝桥杯题目讲解_Python(转载)
      • 性能测试监控实践(九):性能测试时,监控docker微服务资源利用率和分析
      • TCP,UDP和ICMP
      • Python语法学习篇(七)【py3】
      • 网页控制鼠标 查看鼠标位置
      • PIT 定时器
      • 【题解】 [蓝桥杯 2019 省 B] 特别数的和
      • 数字隔离器,串口通信的安全之“芯”
      • 山脊图 (Ridgeline Plot):使用 joypy 库,优雅地比较多组数据的分布情况
      • Linux 进程同步以及僵尸进程等知识介绍
      • Python进程和线程
      • 斐波那契数列的递归和迭代实现
      • 时空预测论文分享:规则知识 因果预测框架 面向研究的评估体系 主动适应漂移
      • 《WINDOWS 环境下32位汇编语言程序设计》第18章 ODBC数据库编程
      • linux入门(3)
      • 任意版本GitLens vscode插件破解邪修秘法
      • Redis最佳实践——热点数据缓存详解
      • font简写和CSS的继承性
      • 高性能服务器配置经验指南6——BIT校园网在ubuntu中的自动检查连接状况脚本使用
      • SQL 连接详解:内连接、左连接与右连接
      • C2000基础-TIM介绍及使用
      • Day 06 动作类的初始化类------以B1为例
      • 面试题:对数据库如何进行优化?