公司动态

ARM 05

📅 2026/7/22 4:03:02
ARM 05
1、什么是GICGIC是ARM系统中负责管理所有中断的核心硬件模块是一个独立的硬件单元负责接收来自所有外设、软件甚至其他CPU核的中断请求并对它们进行统一管理、优先级排序最后给指定的CPU核心去处理。随着 SoC片上系统复杂度提升芯片中集成了大量外设UART、I2C、SPI 、GPIO、USB、Ethernet 等每个外设都可能产生中断。如果让 CPU 直接处理每个外设的中断硬件连线复杂每个外设都需要一根独立的中断线接到 CPU软件处理困难中断优先级、屏蔽、使能等操作难以统一管理多核支持差在多核 CPU 上难以实现中断路由GIC 解决了上述问题它将所有外设的中断集中管理统一向 CPU 提交中断请求。2、什么是协处理器ARM Cortex A7内核配备了几个协处理器协处理器协处理器是一种协助主处理器完成特定功能的专用处理单元。在 ARM 架构中协处理器通过一组专用的指令MCR/MRC和寄存器与主 CPU 交互用于完成主 CPU 不擅长或效率不高的任务。ARM Cortex A7内核配备了16个协处理器编号为cp0~cp15。3、为什么要将异常向量表重映射如何重映射异常向量表在汇编文件中将.text段链接到了0x87800000链接器ld会将_start 标签放在输出文件的最开头。第一条指令ldr pc, _reset_handler的地址就是0x87800000。但是每次cpu复位是都是从0x00000000地址开始读指令所以要将异常向量表重映射到0x87800000每次上电都从重映射的地方开始就能顺利的读到指令。SECTIONS { . 0x87800000; .text : { obj/start.o obj/main.o obj/led.o *(.text) }.global _start _start: ldr pc, _reset_handler ldr pc, _undefine_handler ldr pc, _svc_handler ldr pc, _prefetch_aboart_handler ldr pc, _data_abort_handler ldr pc, _reserved_handler ldr pc, _irq_handler ldr pc, _fiq_handler使用协处理器cp15的c1寄存器组中的SCTLR寄存器。SCTLR寄存器的第12位I位置为1。就可以使能Icache同时第13位V位置为0表示允许异常向量表的基地址位0x00000000并且允许软件通过VBAR寄存器向量基址寄存器将这个基址重新映射到任意地址设置异常向量表重映射的核心是向量基地址寄存器VBAR1.这个寄存器保存了异常向量表的基地址。发生异常时CPU会跳转到VBAR固定偏移的地址去执行处理程序。2.将SCTLR.V 位置为0允许向量表重映射示例代码_set_vbar: ldr r0, 0x87800000 mcr p15, 0, r0, c12, c0, 0 bx lr4. GIC支持多少个中断分为哪几类GIC支持1020个中断 imx6ull 0 - 159 支持160个中断SPI 共享外设中断 外设所产生的中断 32 - 1019PPI 私有外设中断 核间通信 内核与内核之间中断 16 - 31SGI 软中断 软件产生的中断 0 - 155. IMX6ULL中支持多少个中断i.MX6ULL 共支持 160 个中断源编号 ID0 ~ ID159其中中断类型ID范围数量说明SGI0 ~ 1516软中断 软件产生的中断PPI16 ~ 3116私有外设中断 核间通信 内核与内核之间中断SPI32 ~ 159128共享外设中断 外设所产生的中断