
一、51单片机中断 对比 ARM(IMX6ULL)中断1.51单片机中断流程外设产生中断信号 → 进入内核kernel内核操作1设置CPU中断允许/屏蔽2设置中断源允许/屏蔽3设置中断优先级4执行中断服务函数2.IMX6ULL中断GIC通用中断控制器1外设外设产生多路中断信号送入GICGeneric Interrupt Controller通用中断控制器GIC处理后通过IRQ、FIQ、VIRQ、VFIQ信号给到内核kernel。2GIC协处理器① 设置中断源允许/屏蔽②设置中断优先级③加载中断优先级④ 中断分发多核3内核kernel① 设置CPU中断允许/屏蔽CPSR②切换处理器工作模式IRQ模式③跳转到异常向量表④ 执行IRQ中断服务函数⑤恢复工作模式二、GIC版本1. GIC V1旧款嵌入式芯片Cortex-A92. GIC V2支持虚拟化、最多8核处理器最多支持1020个中断IMX6ULL使用此版本。3. GIC V3~V4支持超8核处理器性能提升多用于手机芯片4. GIC V5全新架构支持数百核用于服务器、车载算力芯片三、GIC中断分类总共最多1020个中断IMX6ULL支持160个1. SPI 共享中断外设产生的中断所有CPU都可以处理外设中断中断源来自外设。2. PPI 私有中断核与核之间通信多核处理器和外设无关是CPU核内部之间的中断。3. SGI 软件中断软件代码程序产生的中断。四、关键寄存器1. 外设寄存器• GPIOx_ICR2配置引脚中断触发方式下降沿/上升沿触发中断• GPIOx_IMR使能对应引脚中断• GPIOx_ISR中断状态寄存器。查询该寄存器对应引脚位为1代表产生中断处理完后清0。2. GIC寄存器• C_IAR中断通知寄存器只读。内核读取该寄存器获取中断号确认是哪个外设触发中断。• C_EOIR中断结束寄存器只写。内核处理完中断后把中断号写入此寄存器通知GIC本次中断处理完毕。五、其他1.协处理器协助CPU执行特定任务的专用处理单元内核编号CP0 ~ CP15。CP15一组系统控制寄存器组。2.汇编指令① mrc读指令读取CP15中寄存器的数据到通用寄存器②mcr写指令将通用寄存器的数据写入到CP15中的寄存器指令格式mrc coproc, opc1, Rt, CRn, CRm, {opc2}代码mrc p15,0,r0,c1,c0,0 //将CP15中SCTLR寄存器读到R0寄存器bic r0, r0, #(113) //异常向量表重映射orr r0, r0, #(112) //打开icachemcr p15,0,r0,c1,c0,0 //将R0的值写回CP15的SCTLR寄存器GIC基地址读取mrc p15,4,r0,c15,c0,0 ;GIC_BASE → R0六、inline 内联函数inline内联函数本质依旧是函数。调用内联函数前必须存在该函数的定义。编译阶段编译器会把内联函数在函数调用位置直接展开省去函数调用压栈、跳转开销提高执行效率。