一、补充: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语言程序运行、中断、缓存功能奠定基础。
启动流程核心步骤:
-
设置异常向量表,定义各类异常、中断的入口地址;
-
完成异常向量表地址重映射,IMX6ULL重映射地址为
0x87800000; -
为IRQ模式、System模式等不同处理器工作模式单独开辟栈空间,保证不同模式程序独立运行;
-
通过汇编指令使能IRQ中断,开启内核中断响应能力;
-
清零BSS段,初始化全局未初始化变量,避免程序运行异常;
-
打开I-Cache(指令缓存),提升CPU指令读取与执行效率;
-
跳转至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. 整体配置工作
-
配置ARM内核工作时钟,设定核心主频;
-
初始化PLL2、PLL3下的全部8路PFD时钟,为外设提供基础时钟源;
-
配置系统三大根时钟,支撑总线、外设、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,分工明确,为不同硬件模块提供稳定时钟支撑。
574



被折叠的 条评论
为什么被折叠?



