i.MX6ULL GIC 中断整体知识点总结和ARM时钟重点总结

一、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 类中断源

  1. SPI 共享中断:片内外设产生,可分配给任意 CPU 核处理,按键、串口、定时器都属于 SPI。
  2. PPI 私有中断:CPU 内核私有,用于多核核间通信,和外设无关。
  3. SGI 软件中断:由软件指令生成,多用于多核通信。

硬件归属区分:Cortex‑A7 内核是 ARM 设计;GIC 控制器是 ARM;i.MX6ULL 片上 GPIO、UART、TIMER 外设由 NXP 设计。

二、按键(GPIO)中断相关寄存器

1)GPIO 外设寄存器

  1. GPIOx_ICR:配置引脚中断触发方式(上升沿 / 下降沿)
  2. GPIOx_IMR:引脚中断使能寄存器,开启该引脚中断
  3. GPIOx_ISR:中断状态标志寄存器,写 1 清零标志位,用来判断引脚是否产生中断

2)GIC 核心寄存器

  1. C_IAR:只读。CPU 读取该寄存器,获取发生中断的中断号,识别是哪个外设产生中断。
  2. 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 内核启动代码主要做了哪些工作?

  1. 设置异常向量表
  2. 完成异常向量表地址重映射(地址:0x87800000
  3. 为各个处理器工作模式开辟栈空间(IRQ 模式、system 模式)
  4. 使能 IRQ 中断
  5. 清零 BSS 段
  6. 打开 I‑Cache
  7. 跳转到 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 时钟主要做了哪些配置?

  1. 配置 ARM 内核时钟(CPU 时钟)
  2. 配置 PLL2 下面的 4 路 PFD、PLL3 下面的 4 路 PFD
  3. 配置 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)
相关推荐
G.E.M.小白3 小时前
【IMX6ULL ARM内核启动与时钟系统超详解】PLL/PFD/分频/根时钟配置
嵌入式·arm·时钟·imx6ull
koi77u17 小时前
嵌入式学习——ARM(1)
arm
myy-learn1 天前
ARM-点亮第一颗LED
arm
zbyyd1 天前
i.MX6ULL 裸机开发进阶|C 驱动、SDK、BSP 工程、链接脚本
arm
一直C1 天前
ARM裸机开发|IMX6ULL GIC中断详解,中断流程、GIC版本分类、CP15协处理器
arm·imx6ull·寄存器
myy-learn1 天前
ARM-复用寄存器以及电气寄存器深化-蜂鸣器
arm
sunoo-2291 天前
【ARM嵌入式学习笔记Day5】一文打通GPIO中断全链路:从硬件引脚→GIC→汇编入口→C语言处理
arm开发·笔记·学习·中断·gic·裸机开发
祖力551 天前
ARM中断(IMX6ULL中断、GIC通用中断控制器)
嵌入式硬件·arm·imx6ull·中断·gic·通用中断控制器
susplus2 天前
【ARM 裸机开发 (IMX6ULL-mini)】GNU工具、Makefile 工程构建、链接脚本详解|C 语言点灯 + 蜂鸣器驱动
linux·arm·makefile·imx6ull