ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ARM Cortex‑A 中断(IMX6ULL GIC)

ARM Cortex‑A 中断(IMX6ULL GIC) 一、51 单片机中断简单回顾51 中断处理流程外设产生中断信号内核层面开启 CPU 总中断、开启对应中断源中断、配置中断优先级CPU 跳转执行中断服务函数ARM Cortex‑AIMX6ULL中断逻辑比 51 复杂很多引入了专门的GIC 通用中断控制器来管理全部硬件中断。二、什么是 GIC【思考题 1什么是 GIC你所使用的 GIC 版本、GIC 型号】GICGeneric Interrupt Controller通用中断控制器是 ARM 官方设计、专门用于管理 Cortex‑A 系列处理器中断的片上外设属于 ARM 知识产权芯片厂商需要付费授权使用。我使用的芯片IMX6ULLNXP 设计 SOC内核为 Cortex‑A7GIC 版本GIC V2GIC 型号GIC‑400GIC 各版本简介版本特点适用芯片GIC V1老旧版本Cortex‑A5GIC V2支持虚拟化、最多 8 核最大支持 1020 个中断32 位 Cortex‑A7IMX6ULL、树莓派GIC V3‑V4支持 8 核以上性能提升64 位手机处理器GIC V5全新架构支持数百核服务器、车载算力芯片三、GIC 中断分类【思考题 2GIC 将中断分为哪三类】GIC 把中断源分为 SPI、PPI、SGI 三类SPI 共享中断来自片内外设产生的硬件中断多核下任意 CPU 核都可以处理该中断。PPI 私有中断CPU 核私有中断用于多核之间核间通信和片上外设无关。SGI 软件中断由软件代码主动触发产生的中断多用于多核通信。四、中断数量【思考题 3GIC 控制器支持多少个中断IMX6ULL 芯片支持多少个中断】GIC 控制器理论最大支持1020 个中断源IMX6ULL 芯片实际只使用其中一部分支持160 个中断中断号 0~159。五、外设发起中断到内核处理完成完整流程【思考题 4简述从外设发起中断到内核处理完中断的过程】以 IMX6ULL 按键 EINT 外部按键中断为例① 外设端配置与产生中断配置外设寄存器设置引脚中断触发方式上升沿 / 下降沿使能该引脚的中断输出外设产生中断信号发送中断请求给到 GIC 控制器。示例寄存器GPIO 中断GPIO1_ICR2配置引脚中断触发方式GPIO1_IMR使能引脚中断GPIO1_ISR中断状态寄存器写 1 清除中断标志② GIC 控制器处理中断GIC 配置开启对应中断源允许 / 屏蔽位设置中断优先级GIC 做优先级比较选出优先级最高的中断向 CPU 内核发出 IRQ/FIQ 中断信号。③ CPU 内核处理中断kernel 侧CPU 打开 CPU 级中断允许 / 屏蔽CPSR 寄存器CPU 硬件自动切换处理器工作模式进入 IRQ 异常模式跳转到异常向量表内核读取 GIC 的C_IAR中断通知寄存器只读拿到发生中断的中断号判断是哪个外设产生中断根据中断号执行对应 IRQ 中断服务函数中断服务处理完成将中断号写入C_EOIR中断结束寄存器只写通知 GIC 本次中断处理结束CPU 恢复原来的处理器工作模式回到被打断的程序继续运行。关键 GIC 寄存器C_IAR只读获取中断号C_EOIR只写写中断号标记中断处理完毕六、协处理器 cp15 与相关汇编、内联函数协处理器协处理器是协助 CPU 完成特定功能的专用单元ARM 有 cp0~cp15cp15 最重要用来配置 MMU、Cache、异常向量表重映射等系统功能。两条核心汇编指令mrc把协处理器寄存器读取到 CPU 通用寄存器mcr把 CPU 通用寄存器数据写入协处理器寄存器示例代码片段; 将cp15的SCTLR寄存器读到r0 mrc p15, 0, r0, c1, c0, 0 bic r0, r0, #(1 13) orr r0, r0, #(1 12) ; 打开icache mcr p15, 0, r0, c1, c0, 0 ; 将r0写回SCTLR ; 设置异常向量表基地址 mcr p15, 0, r0, c12, c0, 0 ; 获取GIC基地址到r0 mrc p15, 4, r0, c15, c0, 0inline 内联函数本质是函数调用前必须有函数定义编译阶段在调用点直接把函数代码展开省去函数调用跳转开销提升运行效率。
返回列表