ARM 裸机学习:IMX6ULL 时钟系统

ThreadX 6.4在正点原子imx6ull上的移植与调试实战 本文详细介绍了ThreadX 6.4实时操作系统在正点原子imx6ull开发板上的移植与调试实战。从环境准备、源码获取、编译脚本调整,到关键的启动流程、底层初始化及中断系统配置,提供了完整的移植步骤和解决方案,帮助开发者成功在ARM Cortex-A7架构上部署ThreadX。 阅读详情

一、补充:CPS指令、内核启动流程、GIC中断优先级

1. CPS指令

CPS是ARMv6及之后指令集新增的专用指令,无需操作CPSR寄存器,即可快速实现处理器工作模式切换、IRQ/FIQ中断使能与失能,简化了底层汇编操作。

(1)工作模式切换语法:CPS #<mode>

CPS #0x12   ; 切换为IRQ工作模式(二进制10010)
CPS #0x1F   ; 切换为System工作模式(二进制11111)

CPS #0x12 ; 切换为IRQ工作模式(二进制10010) CPS #0x1F ; 切换为System工作模式(二进制11111)

(2)中断开关控制语法:CPS <effect> <iflags>

cpsie i     ; 使能IRQ中断
cpsid i     ; 关闭IRQ中断

cpsie i ; 使能IRQ中断 cpsid i ; 关闭IRQ中断

2. ARM内核裸机启动代码核心工作

ARM裸机汇编启动阶段是系统上电的核心初始化环节,需完成7项基础配置,为后续C语言程序运行、中断、缓存功能奠定基础。

启动流程核心步骤:

  1. 设置异常向量表,定义各类异常、中断的入口地址;

  2. 完成异常向量表地址重映射,IMX6ULL重映射地址为 0x87800000;

  3. 为IRQ模式、System模式等不同处理器工作模式单独开辟栈空间,保证不同模式程序独立运行;

  4. 通过汇编指令使能IRQ中断,开启内核中断响应能力;

  5. 清零BSS段,初始化全局未初始化变量,避免程序运行异常;

  6. 打开I-Cache(指令缓存),提升CPU指令读取与执行效率;

  7. 跳转至C语言main函数,完成汇编到C语言的程序切换,正式运行业务代码。

3. GIC V2 中断优先级规则

中断优先级通用规则:编号越小,中断优先级越高,优先级分为抢占优先级(组优先级)和子优先级,多层级保障中断响应顺序。

  • 标准GIC V2:支持1020个中断源、256级优先级(0~255);

  • IMX6ULL实际硬件:仅支持160个中断、32级优先级(0~31)。

4. 编程开闭原则(OCP)

嵌入式开发核心编码规范:对代码修改关闭,对代码扩展开放。尽量不改动原有成熟代码,通过新增函数、新增配置的方式实现功能迭代,提升代码稳定性与可维护性。

二、时钟系统基础核心概念

时钟是SOC芯片的运行脉搏,IMX6ULL所有内核、外设的工作时钟,均由外部基准晶振经过芯片内部倍频、分频电路处理后得到。

1. 晶振分类

晶振为芯片提供原始基准频率,常见两类:

  • 无源晶振:常见12MHZ、11.0592MHZ,需依赖芯片内部电路起振,成本低;

  • 有源晶振:自带振荡电路,输出时钟信号更稳定,抗干扰能力强。

IMX6ULL官方基准输入晶振为 24MHz,是所有内部时钟的源头。

2. PLL、Prescaler、PFD核心作用

三者是IMX6ULL时钟系统的核心运算单元,分工明确,配合完成时钟频率的升降配置:

  • PLL(锁相环):仅实现倍频功能,对24MHz基准时钟进行N倍放大,提升时钟频率,公式:输出频率 = 24MHZ × N;

  • Prescaler(预分频器):仅实现分频功能,对高频时钟进行M倍分频,降低时钟频率。2位预分频支持1分频,3位预分频支持1~8分频;

  • PFD(相位分数分频器):支持倍频+降频双功能,通过N/M分数运算调节频率。N/M>1时倍频,N/M<1时降频,适配更多精细化时钟需求。

3. IMX6ULL PLL与PFD硬件数量

IMX6ULL时钟系统搭载多路PLL与PFD,为不同外设、内核提供独立时钟:

  • 核心配置 PLL2、PLL3 两组核心锁相环;

  • PLL2、PLL3各自挂载4路PFD,总计 8个PFD,分别为不同外设提供专属时钟源。

三、IMX6ULL时钟系统核心配置

裸机开发中,时钟初始化是硬件初始化的第一步,需完成内核时钟、PFD时钟、根时钟三层核心配置,保障芯片内核与所有外设正常工作。

1. 整体配置工作

  1. 配置ARM内核工作时钟,设定核心主频;

  2. 初始化PLL2、PLL3下的全部8路PFD时钟,为外设提供基础时钟源;

  3. 配置系统三大根时钟,支撑总线、外设、IP模块运行。

2. 核心时钟配置参数

  • ARM内核时钟:标准配置为528MHz,保障内核高速运行;

  • 三大根时钟频率:

    • AHB总线时钟:132MHz

    • PERCLK外设时钟:66MHz

    • IPG模块时钟:66MHz

四、核心思考题

1. ARM内核启动代码主要做了哪些工作?

1.设置异常向量表
2.异常向量表地址重映射(0x87800000)
3.为不同工作模式开辟栈(IRQ模式和system模式)
4.使能irq中断
5.清零bss段
6.打开icache
7.引导内核跳转到C语言main函数执行

2. PLL、Prescaler、PFD各自的作用是什么?三者有何区别?

3. IMX6ULL时钟初始化主要做了哪些核心配置?

4. 裸机开发中配置的ARM内核时钟频率是多少?

5. 配置的AHB、PERCLK、IPG三个根时钟的频率分别是多少?

6. IMX6ULL中有几个PLL、几个PFD?分别作用是什么?

五、总结

1. ARM上电启动依赖固定的汇编初始化流程,完成向量表、栈、中断、缓存初始化后,才能跳转执行C语言程序,是裸机开发的基础;

2. IMX6ULL时钟系统以24MHz晶振为基准,通过PLL倍频、预分频分频、PFD精细化调频,实现各类时钟频率的精准配置;

3. 核心固定时钟参数:内核528MHz,AHB 132MHz、PERCLK 66MHz、IPG 66MHz,是后续GPIO、串口、定时器等所有外设工作的时钟基础;

4. 芯片搭载PLL2、PLL3两组锁相环、8路PFD,分工明确,为不同硬件模块提供稳定时钟支撑。

Ren’py教程《从入门到精通》 Ren’py是什么?Ren'py是一款用于制作视觉小说、冒险游戏、galgame的游戏制作工具,被来自世界各地的数千名创作者使用。Ren'py的名字由Ren’ai和Python混合而成,而Python也是Ren'py所使用的环境语言。Ren'py可以帮助你使用文字、图像和声音来讲述在计算机和移动设备上运行的交互式故事。这些既可以是视觉小说,也可以是生活模拟游戏。易于学习的脚本语言允许 任何人都可以有效地编写大型视觉小说,而它的Python 脚本足以应对复杂的 模拟游戏。 阅读详情

相关推荐

实战经验:Sensor Bringup中那些坑我都帮你踩过了(避坑指南)

本文是一份详尽的Sensor Bringup实战避坑指南,总结了从I2C通信、MCLK时钟、电源管理到图像异常等关键环节的常见问题与排查方法。文章提供了系统化的调试工作流,强调先硬件后软件的排查原则,旨在帮助硬件工程师快速定位并解决Sensor启动过程中的难题,提升开发效率。

weixin_29212429的博客 574

IMX6ULL裸机开发|ARM启动、中断与时钟系统学习笔记

ARM Cortex-A7裸机启动代码完成七项核心任务:设置异常向量表并重映射至0x87800000,为各工作模式配置栈,使能IRQ中断,清零BSS段,开启I-Cache,最终跳转至C语言main函数。IMX6ULL时钟系统基于24MHz晶振,通过PLL倍频、Prescaler分频、PFD灵活调频,实现内核528MHz主频,并配置AHB(132MHz)、PERCLK(66MHz)、IPG(66MHz)三路根时钟。采用GICV2中断控制器管理160个中断源,实现高效中断处理。

2502_90211789的博客 320

FPGA实战:MIG IP核AXI接口DDR3读写优化指南

本文详细解析了FPGA中MIG IP核AXI接口的DDR3读写优化策略,涵盖关键参数配置、突发传输技巧及时序收敛方案。通过AXI接口优化和突发长度选择,可实现高达12.8GB/s的理论带宽,提升DDR3访问效率。文章还提供了Vivado配置实例和调试技巧,助力开发者解决FPGA内存控制中的实际问题。

weixin_29168393的博客 546

imx6ull-裸机学习实验7——主频和时钟配置实验

本文使用正点原子的开发板I.MX6U,学习时钟系统配置方法。系统默认主频为396MHz,通过配置时钟树可将主频提升至528MHz。重点讲解了时钟树的理解,主频设置步骤,详细说明了PLL2/PLL3的PFD配置、AHB/IPG/PERCLK根时钟设置方法及注意事项。

m0_62228566的博客 1121

CATIA V5新手必看:从零开始的界面导航与基础操作指南(附常见问题解决)

本文为CATIA V5新手提供全面的界面导航与基础操作指南,涵盖核心工作区解析、文件管理规范、视图操作秘籍及常见问题解决方案。通过详细的步骤说明和实用技巧,帮助用户快速掌握这一工业设计标杆软件,特别适合从SolidWorks、AutoCAD等软件过渡的用户。

b9c0d的博客 531

在Wincc8.0的Wincc 3D Control控件中使用3D模型

如果之前没有在Blender中自定义光照,EnableBackground属性选择“是”,Wincc 3D Control会按一个均匀的光照强度渲染。Wincc8.0更新后提供了一个Wincc 3D Control控件来显示3D图像,但是该控件实际体验下来现阶段还存在功能不足、运行不稳定的问题。再把导出的dae文件复制进Wincc项目的GraCS文件夹中,文件名称复制进控件的SceneFile属性里。选择编辑模式,全选模型,点击网格→分离→按材质,分离出不同的部件(不同的部件最好使用不同的材质)。

ghoring的博客 7135

ARM裸机开发Day06|IMX6ULL汇编CPS指令、启动流程、GIC中断优先级、时钟系统PLL/PFD详解

CPS指令(ARMv6+)可高效切换模式与开关中断,简化汇编代码。裸机启动需完成7步:向量表设置、重映射、栈分配、开中断、清BSS、开启I-Cache、跳转main。GICV2优先级越小越高,IMX6ULL支持32级,分抢占与子优先级。遵循OCP原则,扩展功能不修改原有代码。时钟系统以24MHz晶振为基础,通过PLL倍频、Prescale整数分频、PFD分数分频生成多路时钟,配置顺序为:主频→PFD→根时钟。

2201_75490992的博客 757

LightTools宏 vs Python API:光学仿真自动化方案选型指南

本文深入对比了LightTools光学仿真自动化中VBA宏与Python API两种方案。VBA宏内嵌易用,适合固定流程批处理;Python API生态强大,尤其在参数优化算法集成方面优势显著,便于构建复杂工作流。文章结合案例,为不同场景下的技术选型提供清晰指南。

garlic的博客 940

【ARM 裸机开发 (IMX6ULL-mini)】中断嵌套实现、代码 OCP 改造与时钟配置

本文基于 IMX6ULL-mini 平台开展 ARM 裸机开发,针对 IRQ 模式无法中断嵌套的问题,借助 ARMv6 的 CPS 汇编指令切换处理器工作模式,实现高优先级中断抢占;结合 GIC V2 中断控制器,讲解中断抢占与子优先级配置方法。引入 OCP 开闭原则,利用函数指针数组重构中断管理代码,新增外设中断无需修改核心处理逻辑,完成代码解耦。最后介绍 IMX6ULL 时钟系统,讲解晶振、PLL、PFD 原理,分步完成 ARM 内核及总线根时钟的寄存器配置,为后续外设驱动开发打下基础。

2403_89702754的博客 432

cuda安装时出现错误 Unable to locate package cuda-toolkit-12-4

cuda安装时出现错误 Unable to locate package cuda-toolkit-12-4

4867

ROS与UR10e机械臂实战:从零搭建到精准控制

本文详细介绍了如何从零开始搭建ROS与UR10e机械臂的开发环境,包括硬件准备、软件配置、网络设置以及MoveIt!运动控制实战。通过具体的代码示例和常见问题排查,帮助开发者快速掌握UR10e机械臂的精准控制技术,适用于工业自动化和实验室研究场景。

m3n5b7v8c9x的博客 772

IMX6ULL裸机开发之时钟树分析及配置过程

时钟 时钟树 时钟树由三部分组成:时钟切换控制器,根时钟产生器,系统时钟 一个外设的时钟信号的产生途径:晶振向芯片输入时钟信号,信号进入时钟切换控制器,经过用户配置,产生PLL时钟信号,该信号进入根时钟产生步骤,经过分频或倍频,最终成为系统某个外设的时钟信号。 (这个时钟树难度不大,但是分支太多,需要配置的寄存器也多,所以看起来会比较费劲,但是其原理都是大体一致的) 橙色梯形的是选择器,可以选择不同的PLL时钟作为时钟源;矩形就是分频器(2位,3位,6位)。黄色高亮的就是用来配置选择器的各种寄存器 时钟切

qq_43940175的博客 2993

QT实现Word读写

在windows环境下,我们可以通过ActiveQt实现Office自动化,相当于VB的VBA功能。 以下是一个实例: #include #include #include int main(int argc, char *argv[]) {     QApplication a(argc, argv);     //显示的打开一个word应用程序     QAxW

nameofhsw的专栏 1万+

iMX6ULL ARM裸机 时钟与启动汇编学习

上电复位 → 汇编 _reset_handler → 设置 IRQ 栈 → 设置 System 栈 → 打开内核 IRQ 总开关 → BSS 清零 → 开启 I-Cache → 设置 VBAR 向量基地址 → 跳转 C 语言 main() → clock_init() 配置 PLL/PFD/根时钟、开启外设时钟 → 初始化外设、配置 GIC 中断 → 运行业务代码;PFD 计算公式:PLL2 (528M) 各路 PFD 输出:PFD = 528 × 18 / PFD_FRAC,FRAC 取值 12~35;

2602_96623536的博客 168

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

韦东山IMX6ULL快速入门路线

本文针对已具备 51 单片机与 STM32 基础的学习者,提出韦东山《ARM 架构与编程——基于 IMX6ULL》的速成学习路径。通过对比 Cortex-M3 与 ARMv7-A 的寄存器模型与中断机制差异,构建知识迁移与缺口补齐的双轨框架,将课程十章重组为三阶段:由寄存器点灯认知地址空间,由汇编与反汇编揭示执行本质,由重定位、链接脚本与 GIC 中断完成系统级训练,以旧带新,于四至六周内完成裸机开发能力向 Linux 底层的迁移。

weixin_43963563的博客 278

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【IMX6ULL ARM内核启动与时钟系统超详解】PLL/PFD/分频/根时钟配置

本文完整解答IMX6ULL时钟系统5大面试/开发核心问题:ARM启动代码完成模式配置、栈初始化、DDR初始化、时钟初始化、BSS清零、跳转C函数;PFD前置校准、PLL倍频升压、Prescaler分频适配,三级架构生成系统时钟;IMX6ULL时钟核心配置:晶振、PFD、PLL、分频、时钟源选择、外设门控开启;528MHz;三大根时钟:AHB=132MHz、IPG=66MHz、PERCLK=66MHz。吃透本文,彻底搞懂IMX6ULL时钟底层架构,搞定所有时钟相关面试题与裸机开发配置!

2301_79651221的博客 217

《ARM裸机》7--时钟系统(基于i.MX6ULL)

查看100ask_imx6ull_pro_2022.08\04_开发板原理图,可以找到两个时钟源:(1)24Mhz CPU 主时钟(Y1)(2)32.768Khz CPU RTC 时钟(Y2)i.MX6ULL的始终系统,通过24Mhz的CPU的主始终,然后用PLL倍频,让后用分频器分频,这样就获得了外设所需要的时钟频率。

m0_73853811的博客 597

IMX6ULL 时钟系统与 EPIT/GPT 定时器原理与配置

本文介绍 IMX6ULL 时钟系统基础组件晶振、PLL、PFD、预分频器,梳理 ARM‑PLL 安全配置流程,介绍 AHB、IPG、PERCLK 等根时钟。对比 EPIT 与 GPT 定时器,EPIT 为向下计数,用于简单周期性定时中断;GPT 向上计数,具备输入捕获、输出比较能力,可实现精准延时。同时列出课程重点作业考点,掌握时钟树和定时器是裸机定时、中断开发的基础。

2601_96618230的博客 404

IMX6ULL 时钟系统配置与定时器 (EPIT/GPT)

时钟是嵌入式系统的心脏,所有外设的运行都离不开时钟信号。做 IMX6ULL 裸机开发,第一步就是把时钟树搞明白,把系统时钟配置好,后面的 GPIO、串口、定时器、SPI 这些外设,才能正常工作。EPIT 和 GPT 是最基础的两个定时器,EPIT 适合做固定周期的中断任务,GPT 适合做精准的硬件延时,这两个工具掌握了,后面做按键消抖、传感器数据采集、PWM 输出、串口超时判断这些功能,都能得心应手。

senijusene的博客 896

新手自学嵌入式 | 学习日记:ARM内核启动代码、时钟系统(PLL/Prescaler/PFD)与IMX6ULL时钟配置

今天的内容跨度很大,既有底层的汇编启动代码,又有宏观的时钟树架构。启动代码是裸机开发的“地基”,理清那7个步骤后,再看start.S就不再觉得像天书了。时钟配置是后续所有外设(UART、GPIO、定时器)能正常工作的前提。IMX6ULL的时钟树非常复杂,借助PLL、PFD、Prescaler的公式,能更清晰地计算出每个外设最终的时钟频率。OCP原则提醒我们,在写驱动代码时要考虑可扩展性,不要轻易破坏已有的稳定代码。

kkkkkkkkkk_Z的博客 217

从SD卡启动到LED闪烁:IMX6ULL裸机开发全流程避坑指南

本文详细解析了IMX6ULL裸机开发的全流程,从SD卡启动到LED控制,涵盖了ARM Cortex-A7开发环境构建、启动机制剖析、裸机程序开发及调试技巧。特别针对IMX6ULL的SD卡启动和GPIO控制LED提供了实战代码和避坑指南,适合嵌入式开发者快速上手。

v4w5x6的博客 145

IM6ULL裸机

这个芯片很火,被广泛应用于工业领域PLC,工业网关,HMI。其次在消费电子和医疗等其他领域特=也占有一席之地。表格通信接口:双千兆以太网、CAN 总线、多路 UART/USB/I2C/SPI显示与图像:并行 LCD(支持 1366×768)、摄像头接口(CSI)工业总线:RS485、Modbus 协议支持安全特性:硬件加密引擎、安全启动。

weixin_39912966的博客 187

Days 49 IMX6ULL 裸机开发:时钟树原理与 CCM 时钟配置详解

i.MX6ULL 的时钟系统是裸机开发的基础,GPIO、UART、EPIT、GPT、内核都依赖 CCM 时钟树。本篇结合时钟树框图,讲解晶振、PLL、PFD、分频器、时钟门等核心硬件概念,同时梳理 CCM 寄存器配置流程,完成 ARM 内核、528PLL、480PLL 以及 AHB/IPG/PERCLK 根时钟的配置。开发环境:i.MX6ULL-Mini,裸机 C 语言开发24M 晶振是芯片所有时钟的源头,PLL 负责倍频,PFD 做分数分频,CG 做时钟开关。修改 PLL 高频时钟。

Q3365879的博客 456

裸机开发速记:启动流程|GIC 中断|时钟系统|UART 通信

ARM裸机启动流程包括设置异常向量表、重映射至链接地址、配置各模式栈、使能IRQ中断、清零BSS段、开启I-Cache并关闭D-Cache,最终跳转至C语言main函数。中断系统基于GIC V2,支持SPI、PPI、SGI三类中断,以GPIO按键为例,完成外设与GIC配置后,CPU进入IRQ模式处理中断。时钟系统通过PLL、PFD、Prescale实现528MHz内核时钟及多路总线时钟分频,外设使用前需开启时钟门控。UART采用异步通信,支持轮询与中断两种收发方式,需配置时钟、引脚复用、波特率及帧格式,适用

SXR0115的博客 446

Linux之ARM(IMX6U)裸机主频和时钟配置

Linux之ARM(MX6U)裸机主频和时钟配置1、I.MX6U 时钟系统详解1.1、系统时钟来源 I.MX6U 系列标准的工作频率为 528MHz,有些型号甚至可以工作到 696MHz,但是默认的工作频率为396MHz,这就造成了浪费了,本次我们来配置主频时钟使其工作在528MHz,以及其他的外设时钟源都工作在NXP推荐的工作频率。 1、I.MX6U 时钟系统详解 I.MX6U 的系统主频为 528MHz,有些型号可以跑到 696MHz,但是默认情况下内部 boot rom 会将 I.MX6U 的主频设置

一只青木呀 2521

ARM—点灯(基于正点原子的IMX6U-mini)

本文以IMX6U-mini开发板为例,展示了三种不同层次的LED控制方法:汇编语言点灯、C语言寄存器操作和固件库API调用。从最底层的汇编指令直接操作寄存器,到中间层的C语言位操作,再到高层的固件库封装,完整呈现了嵌入式开发的层次结构。文章详细解析了异常向量表、处理器模式切换、内存映射寄存器等核心概念,并提供了完整的代码实现和Makefile分析。通过三种方式的对比,帮助开发者根据项目需求选择合适的方法,平衡控制力、开发效率和可维护性,为ARM嵌入式开发打下坚实基础。

2302_80623234的博客 665

IMX6ULL裸机|CPS指令、时钟PLL/PFD、定时器EPIT/GPT、UART串口全梳理

📝摘要:本篇承接IMX6ULL裸机开发笔记,讲解CPS模式/中断开关指令、裸机启动完整流程、GIC中断优先级体系;时钟系统晶振、PLL锁相环、PFD相位分数分频、预分频Prescale;EPIT自减定时器、GPT自增定时器功能;UART串口参数、硬件流控RTS/CTS,附带代码片段,适合嵌入式期末复习、裸机实验。#IMX6ULL#CPS指令#PLL时钟#UART串口。

m0_69717451的博客 247
上一篇: ARM Cortex‑A 中断(IMX6ULL GIC)
下一篇: IMX6ULL裸机开发:定时器(GPT/EPIT)与UART串口
晊晌_h
博客等级 码龄6年 6粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值