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

《嵌入式硬件(十二):基于IMX6ULL的时钟操作》

一、时钟基本概念

        PLL:phase locked loop  倍频

        Prescaler:预分频器

        PFD:相位分数分频器(可升可降)

        7个pll,pll2、pll3一共有8个pfd

二、时钟原理

1.核心版原理图

2.时钟树

        2,3,4,为分频因子展开所占二进制位数,值要加一,因为要作为分母使用

参数配置如下

3.ARM PLL配置方法

        1)CCSR寄存器

                第一二四步

        2)ARM_PLL寄存器  

              第三步

        配置pll

       

3)CCM_CACRR寄存器

第三步

设置分频因子

4.PLL2 配置(528)

5.AHB_CLK_ROOT(绿色的线)

        1)CBCMR

2)CBCDR

6.PERCLK_CLK_ROOT

       1) CSCMR1(修改一分频)    

7.IPG_CLK_ROOT

        AHB_CLK_ROOT(绿色的线)设置好后,通过CBCDR进行二分频

三、代码

        结构不变

        1.bsp

                1)clock.c
#include "clock.h"
#include "led.h"
#include "MCIMX6Y2.h" 
#include "core_ca7.h"void init_clock(void)
{unsigned int t;CCM->CCSR &= ~(1 << 8);CCM->CCSR |= (1 << 2);t = CCM_ANALOG->PLL_ARM;t &= (~(3 << 14));t |= ((1 << 13));t &= (~(0x7f << 0));t |= (88 <<0);CCM_ANALOG->PLL_ARM = t;CCM->CACRR |= (1 << 0);CCM->CCSR &= (~(1 << 2));t = CCM_ANALOG->PFD_528;t &= (~(0x3f << 0) | (0x3f << 8) | (0x3f << 16) | (0x3f << 24));t &= (~((1 << 7) | (1 << 15) | (1 << 23) | (1 <<31)));t |= ((27 < 0) | (16 << 8) | (24 << 16) | (32 << 24));CCM_ANALOG->PFD_528 = t;t = CCM_ANALOG->PFD_480;t &= (~(0x3f << 0) | (0x3f << 8) | (0x3f << 16) | (0x3f << 24));t &= (~((1 << 7) | (1 << 15) | (1 << 23) | (1 <<31)));t |= ((12 < 0) | (16 << 8) | (17 << 16) | (19 << 24));CCM_ANALOG->PFD_480 = t;t = CCM->CBCMR;t &= ~(3 << 18);t |= (1 << 18);CCM->CBCMR = t;CCM->CBCDR &= ~(1 << 25);t = CCM->CBCDR;t &= ~((7 << 10) | 3 << 8);t |= ((2 << 10) | (1 << 8)); CCM->CBCDR = t;CCM->CSCMR1 &= ~(1 << 6);CCM->CSCMR1 &= ~(0x3f << 0);enable_clocks();
}
                2)clock.h
#ifndef _CLOCK_H_
#define _CLOCK_H_extern void init_clock(void);#endif

        2.project

                1)main.c
#include "beep.h"
#include "led.h"
#include "key.h"
#include "MCIMX6Y2.h" 
#include "core_ca7.h"
#include "gpio.h"
#include "interrupt.h"
#include "clock.h"int main(void)
{init_clock();system_interrupt_init();init_led();init_beep();//init_key();   while(1){led_nor();delay(0x0FFFFF);}return 0;
}
                2)start.S
.global _start_start:ldr pc, =_reset_handlerldr pc, =_undefine_handlerldr pc, =_svc_handlerldr pc, =_prefetch_abort_handlerldr pc, =_data_abort_handlerldr pc, =_reserved_handlerldr pc, =_irq_handlerldr pc, =_fiq_handler_undefine_handler:ldr pc, =_undefine_handler_svc_handler:ldr pc, =_svc_handler_prefetch_abort_handler:ldr pc, =_prefetch_abort_handler_data_abort_handler:ldr pc, =_data_abort_handler_reserved_handler:ldr pc, =_reserved_handler_irq_handler:subs lr, lr, #4mrc p15, 4, r1, c15, c0, 0add r1, r1, #0x2000ldr r0, [r1, #0x0C]stmfd sp!, {r0-r12, lr}stmfd sp!, {r0, r1}cps #0x1fstmfd sp!, {lr}bl system_interrupt_handlerldmfd sp!, {lr}ldmfd sp!, {r0, r1}str r0, [r1, #0x10]ldmfd sp!, {r0-r12, pc}^_fiq_handler:ldr pc, =_fiq_handler_reset_handler://mrs r0, cpsr//bic r0, r0, #0x1F//orr r0, r0, #0x12   //irq//bic r0, r0, #(1 << 7)//msr cpsr, r0cps #0x12ldr sp, =0x86000000	//起始地址80000000,ram大小为512mb(20000000)	80000000~A0000000-1//mrs r0, cpsr//bic r0, r0, #0x1F//orr r0, r0, #0x1F   //system//msr cpsr, r0   cps #0x1fcpsie ildr sp, =0x84000000	//给irq分配的栈指针空间bl _enable_icahcebl _set_vbarbl _bss_clearb main_enable_icahce:mrc p15, 0, r0, c1, c0, 0bic r0, r0, #(1 << 13)orr r0, r0, #(1 << 12)mcr p15, 0, r0, c1, c0, 0bx lr_set_vbar:ldr r0, =0x87800000mcr p15, 0, r0, c12, c0, 0bx lr_bss_clear:ldr r0, =__bss_startldr r2, =__bss_end
loop:	mov r1, #0str r1, [r0]add r0, r0, #4cmp r0, r2blt loopbx lrfinished:b finished


文章转载自:

http://FkNRNNK5.xbhpm.cn
http://bzYhecrk.xbhpm.cn
http://pOvCWCoG.xbhpm.cn
http://seMNiN3m.xbhpm.cn
http://jprpSfKY.xbhpm.cn
http://FKiCt0Ac.xbhpm.cn
http://def1bkKM.xbhpm.cn
http://jLwaVWIt.xbhpm.cn
http://wMIlGLhf.xbhpm.cn
http://m3JqAEXH.xbhpm.cn
http://SndGI4JX.xbhpm.cn
http://GRgbRzYs.xbhpm.cn
http://eznLRC4r.xbhpm.cn
http://2RF7eZlc.xbhpm.cn
http://AbgyjsnD.xbhpm.cn
http://hGbsQTeE.xbhpm.cn
http://XutM1ojJ.xbhpm.cn
http://qzjiYpBr.xbhpm.cn
http://wxHB41l3.xbhpm.cn
http://eW05Negr.xbhpm.cn
http://t8238oqy.xbhpm.cn
http://Ed3aQWXS.xbhpm.cn
http://5jfu6dI0.xbhpm.cn
http://FIVkR7PX.xbhpm.cn
http://1pKBRNKk.xbhpm.cn
http://SVwdzND8.xbhpm.cn
http://zopxQFp2.xbhpm.cn
http://uvQABsNn.xbhpm.cn
http://j2Y9KBlM.xbhpm.cn
http://YXlFSezG.xbhpm.cn
http://www.dtcms.com/a/383190.html

相关文章:

  • Redis最佳实践——性能优化技巧之监控与告警详解
  • PySpark基础例题(包含map、reduceByKey、filter、sortBy等算子)
  • 导购APP佣金模式的分布式锁实现:基于Redis的并发控制策略
  • 运维自动化工具Ansible大总结20250914
  • Linux 库开发入门:静态库与动态库的 2 种构建方式 + 5 个编译差异 + 3 个加载技巧,新手速看
  • Effective Python 第28条:Python列表推导式的简洁与复杂性管理
  • 【MySQL】从零开始学习MySQL:基础与安装指南
  • 基于STM32的病人监护系统
  • Python与Go结合
  • AI大师系列——杰夫·辛顿(深度学习)
  • Unity核心概念⑨:Screen
  • 《MLB美职棒大联盟》专业运动员标准·棒球1号位
  • reversed()方法
  • Altium Designer(AD24)另存为功能介绍
  • OD C卷 - 计算三叉搜索树的高度
  • 导购返利APP的数据库性能优化:索引设计与查询调优实践
  • pretrain-Alignment范式的强大与极限——李宏毅大模型2025第五讲笔记
  • CSP集训错题集 第一周
  • MCU软件驱动分离
  • 浏览器中javascript时间线,从加载到执行
  • SP‘24 SSRFuzz论文学习
  • 【算法】day2 双指针+滑动窗口
  • 拆解 AI 大模型 “思考” 逻辑:从数据训练到推理输出的完整链路
  • Axios在鸿蒙应用开发中的使用
  • Go高性能双端队列Deque实战指南
  • StringBuilder 深度解析:数据结构与扩容机制的底层细节
  • Altium Designer(AD24)自学资源介绍
  • cs144 lab0学习总结
  • Playwright MCP浏览器自动化指南
  • 经典俄罗斯方块游戏 | 安卓三模式畅玩,暂时无广告!