ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

ARM 裸机学习:IMX6ULL 时钟系统

2026/9/24 17:58:29 拓冰建站 浏览量
ARM 裸机学习:IMX6ULL 时钟系统 一、补充CPS指令、内核启动流程、GIC中断优先级1. CPS指令CPS是ARMv6及之后指令集新增的专用指令无需操作CPSR寄存器即可快速实现处理器工作模式切换、IRQ/FIQ中断使能与失能简化了底层汇编操作。1工作模式切换语法CPS #modeCPS #0x12 ; 切换为IRQ工作模式二进制10010 CPS #0x1F ; 切换为System工作模式二进制11111CPS #0x12 ; 切换为IRQ工作模式二进制10010 CPS #0x1F ; 切换为System工作模式二进制111112中断开关控制语法CPS effect iflagscpsie 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~255IMX6ULL实际硬件仅支持160个中断、32级优先级0~31。4. 编程开闭原则OCP嵌入式开发核心编码规范对代码修改关闭对代码扩展开放。尽量不改动原有成熟代码通过新增函数、新增配置的方式实现功能迭代提升代码稳定性与可维护性。二、时钟系统基础核心概念时钟是SOC芯片的运行脉搏IMX6ULL所有内核、外设的工作时钟均由外部基准晶振经过芯片内部倍频、分频电路处理后得到。1. 晶振分类晶振为芯片提供原始基准频率常见两类无源晶振常见12MHZ、11.0592MHZ需依赖芯片内部电路起振成本低有源晶振自带振荡电路输出时钟信号更稳定抗干扰能力强。IMX6ULL官方基准输入晶振为24MHz是所有内部时钟的源头。2. PLL、Prescaler、PFD核心作用三者是IMX6ULL时钟系统的核心运算单元分工明确配合完成时钟频率的升降配置PLL锁相环仅实现倍频功能对24MHz基准时钟进行N倍放大提升时钟频率公式输出频率 24MHZ × NPrescaler预分频器仅实现分频功能对高频时钟进行M倍分频降低时钟频率。2位预分频支持1分频3位预分频支持1~8分频PFD相位分数分频器支持倍频降频双功能通过N/M分数运算调节频率。N/M1时倍频N/M1时降频适配更多精细化时钟需求。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总线时钟132MHzPERCLK外设时钟66MHzIPG模块时钟66MHz四、核心思考题1. ARM内核启动代码主要做了哪些工作1.设置异常向量表2.异常向量表地址重映射(0x87800000)3.为不同工作模式开辟栈(IRQ模式和system模式)4.使能irq中断5.清零bss段6.打开icache7.引导内核跳转到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. 核心固定时钟参数内核528MHzAHB 132MHz、PERCLK 66MHz、IPG 66MHz是后续GPIO、串口、定时器等所有外设工作的时钟基础4. 芯片搭载PLL2、PLL3两组锁相环、8路PFD分工明确为不同硬件模块提供稳定时钟支撑。