一、GIC 基础概念
GIC(通用中断控制器),由 ARM 设计,专门用来管理 Cortex‑A 系列处理器中断的片上外设。
- i.MX6ULL 使用:GIC V2 版本,GIC‑400 型号 ;支持虚拟化,最多 8 核,最大支持1020 路中断 ;i.MX6ULL 芯片实际只用160 个中断源。
- 版本演进:
- GIC V1:Cortex‑5 老芯片;
- GIC V2:32 位(i.MX6ULL、树莓派);
- GIC V3/V4:64 位手机芯片;
- GIC V5:服务器、车载大算力芯片。
GIC 的 3 类中断源
- SPI 共享中断:片内外设产生,可分配给任意 CPU 核处理,按键、串口、定时器都属于 SPI。
- PPI 私有中断:CPU 内核私有,用于多核核间通信,和外设无关。
- SGI 软件中断:由软件指令生成,多用于多核通信。
硬件归属区分:Cortex‑A7 内核是 ARM 设计;GIC 控制器是 ARM;i.MX6ULL 片上 GPIO、UART、TIMER 外设由 NXP 设计。
二、按键(GPIO)中断相关寄存器
1)GPIO 外设寄存器
GPIOx_ICR:配置引脚中断触发方式(上升沿 / 下降沿)GPIOx_IMR:引脚中断使能寄存器,开启该引脚中断GPIOx_ISR:中断状态标志寄存器,写 1 清零标志位,用来判断引脚是否产生中断
2)GIC 核心寄存器
C_IAR:只读。CPU 读取该寄存器,获取发生中断的中断号,识别是哪个外设产生中断。C_EOIR:只写。中断服务程序处理完成后,把中断号写入此寄存器,通知 GIC 本次中断处理结束。
三、协处理器 CP15 与汇编指令
协处理器是辅助 CPU 完成特殊功能的单元,cp15 是最重要一组系统寄存器。
-
mrc:读协处理器,把 cp15 寄存器读到 ARM 通用寄存器。 -
mcr:写协处理器,把通用寄存器数据写入 cp15 寄存器。mrc p15, 0, r0, c1, c0, 0 ;读取SCTLR寄存器到r0
bic r0, r0, #(1 <<13) ;异常向量表重映射
orr r0, r0, #(1 <<12) ;打开I‑Cache
mcr p15, 0, r0, c1, c0, 0 ;写回SCTLR
mcr p15, 0, r0, c12, c0, 0 ;设置向量表基地址
mrc p15,4,r0,c15,c0,0 ;读取GIC基地址到r0
ARM 时钟
1. ARM 内核启动代码主要做了哪些工作?
- 设置异常向量表
- 完成异常向量表地址重映射(地址:
0x87800000) - 为各个处理器工作模式开辟栈空间(IRQ 模式、system 模式)
- 使能 IRQ 中断
- 清零 BSS 段
- 打开 I‑Cache
- 跳转到 C 语言的
main函数,进入 C 程序执行
2. PLL、Prescaler、PFD 的作用

- PLL(锁相环) :倍频 。输入低频晶振时钟,乘以 N 倍,输出高频时钟。
公式:输出 = 输入时钟 × N - Prescaler(预分频器) :分频 ,把输入时钟除以 M,降低时钟频率。
公式:输出 = 输入时钟 ÷ M - PFD(相位分数分频器) :既可以倍频,也可以降频。
公式:输出 = 输入时钟 × (N/M)- N/M>1:做倍频;
- N/M<1:做降频。
晶振:i.MX6ULL 使用24MHz 外部晶振,分为有源晶振、无源晶振。
3. IMX6ULL 时钟主要做了哪些配置?
- 配置 ARM 内核时钟(CPU 时钟)
- 配置 PLL2 下面的 4 路 PFD、PLL3 下面的 4 路 PFD
- 配置 AHB、PERCLK、IPG 三个根总线时钟(设置时钟源、分频系数)
4. 配置的 ARM 内核时钟频率是多少?
配置 ARM 内核时钟为 528MHz。
5. AHB、PERCLK、IPG 三个根时钟频率
- AHB:132MHz
- PERCLK:66MHz
- IPG:66MHz
6. IMX6ULL 中有几个 PLL、几个 PFD
- PLL:2 个,PLL2(528M PLL)、PLL3(480M PLL)
- PFD:共 8 个
- PLL2 (528M):4 路 PFD(PFD0~PFD3)
- PLL3 (480M):4 路 PFD(PFD0~PFD3)