ARM 裸机开发 DAY5 学习笔记

一、51单片机中断 对比 ARM(IMX6ULL)中断

1.51单片机中断流程

外设产生中断信号 → 进入内核kernel

内核操作:

1)设置CPU中断允许/屏蔽

2)设置中断源允许/屏蔽

3)设置中断优先级

4)执行中断服务函数

2.IMX6ULL中断

GIC通用中断控制器

1)外设

外设产生多路中断信号送入GIC(Generic Interrupt Controller,通用中断控制器),GIC处理后通过IRQ、FIQ、VIRQ、VFIQ信号给到内核kernel。

2)GIC(协处理器)

① 设置中断源允许/屏蔽

②设置中断优先级

③加载中断优先级

④ 中断分发(多核)

3)内核kernel

① 设置CPU中断允许/屏蔽(CPSR)

②切换处理器工作模式(IRQ模式)

③跳转到异常向量表

④ 执行IRQ中断服务函数

⑤恢复工作模式

二、GIC版本

  1. GIC V1:旧款嵌入式芯片,Cortex-A9

  2. 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, #(1<<13) //异常向量表重映射

orr r0, r0, #(1<<12) //打开icache

mcr p15,0,r0,c1,c0,0 //将R0的值写回CP15的SCTLR寄存器

GIC基地址读取:

mrc p15,4,r0,c15,c0,0 ;GIC_BASE → R0

六、inline 内联函数

inline:内联函数,本质依旧是函数。

调用内联函数前,必须存在该函数的定义。编译阶段,编译器会把内联函数在函数调用位置直接展开,省去函数调用压栈、跳转开销,提高执行效率。

相关推荐
cao233335 分钟前
关于 y0 y1 yn 变量名冲突说法的指正
笔记
~patience~9 小时前
WAV 逆向分析工具使用笔记
笔记
滴啦嘟啦哒9 小时前
【具身笔记】【π0.5 微调与仿真】五、在MuJoCo中实现可视化仿真
笔记·python·vla·具身
xier_ran9 小时前
【infra之路】AI 编译器学习笔记(十三):AI 编译器全景——TVM、XLA、IREE 与其他
人工智能·笔记·学习
连山齐名9 小时前
ai应用开发的学习笔记
服务器·笔记·学习
乔旭伟10 小时前
中小厂生产管理系统选型笔记:驱动方式、主线链路与成本结构
笔记·需求分析·规格说明书
xier_ran10 小时前
【infra之路】AI 编译器学习笔记(十四):为什么要 tiling,以及矩阵计算单元的“固定“
人工智能·笔记·学习
燕落南枝10 小时前
HTML 学习:辅助标签 label 与字符实体
前端·学习·html
hackchen10 小时前
LangChain 学习第 3 课 - 输出解析器(Output Parser)
数据库·学习·langchain
如旧呀11 小时前
origin绘制等距的HSD置信区间
笔记·origin