之前的LED驱动不存在中断,也就不包含中断的初始化。如果程序包含了中断,我们应还需要初始化哪些内容?要解决这个问题,我们需要先了解一个中断系统包含了哪些内容。
① 中断向量表:描述中断对应的中断服务函数,保存在程序开始运行的地方,默认是0x00000000
② 中断控制器(NVIC、GIC):中断系统的管理机构
③ 中断使能:某个外设的中断使能(要使用某个外设的中断,要先使能这个外设的中断)
④ 中断服务函数:当中断产生时,中断服务函数就会被调用(中断处理逻辑都在中断服务函数中)
目录
一、中断向量表
1、什么是中断向量表?
中断向量表的作用是描述中断对应的中断服务函数。保存在程序开始运行的地方,默认是0x00000000,可以通过设置中断向量偏移,来改变中断向量表的位置。
Cortex-M 的中断向量表中列举出了所有的中断,每一个中断对应一个中断服务函数;而 Cortex-A 的中断向量表则是将中断分为了 7 类
- 某个中断发生时,先判断属于哪一类
- 然后,去中断向量表找对应类的中断服务函数
- 随后,执行对应的中断服务函数
- 最后,回到程序暂停的下一个位置

中断向量表所写的就是不同中断类型所对应的中断服务函数地址
2、中断类型
中断大致可以分为七种类型,不同的中断类型对应着一种 CPU 工作模式,当中断产生时,CPU 会先切换到对应的模式,然后再处理中断。其中我们最常用的是 Reset 和 IRQ 中断。
- Reset:CPU 复位以后就会进入复位中断,我们可以在复位中断服务函数里面做一些初始化工作,比如初始化 SP 指针、DDR 等
- Undefined Instruction:如果指令不能识别的话就会产生此中断
- SWI:Linux 的系统调用会用 SWI 指令来引起软中断,通过软中断来陷入到内核空间
- Prefetch Abort:预取指令的出错的时候会产生此中断
- Data Abort:访问数据出错的时候会产生此中断
- IRQ:外设中断都会引起此中断的发生
- FIQ:快速中断,如果需要快速处理中断的话就可以使用此中断

文章详细介绍了中断向量表在嵌入式系统中的作用,包括中断向量表的组成、中断类型以及设置中断向量表偏移的原因和方法。中断向量表用于保存中断服务函数地址,中断初始化涉及中断控制器、中断使能和中断服务函数的设定。文章还讨论了如何通过汇编或C语言设置中断向量表偏移。
最低0.47元/天 解锁文章
3万+





