Skip to content

Latest commit

 

History

History
74 lines (42 loc) · 4.3 KB

STM32F4深入学习_ARM内核中断.md

File metadata and controls

74 lines (42 loc) · 4.3 KB

ARM内核中断机制

中断机制简介

中断:由硬件引起的事件,会引起程序流偏离正常的流程

所有Cortex-M处理器的都会提供一个用于处理中断的嵌套向量中断控制器NVIC

除了中断请求外,还有其他需要服务的事件,在这里称他们为异常

在ARM的术语里,==中断也是一种异常==

ARM中的异常包括三类

  • 中断:由处理器核外硬件引起的异常
  • 错误异常:由处理器核内部执行程序代码或硬件执行引起的异常
  • 系统异常:由于支持了操作系统,操作系统软件在执行中需要强制跳转到某个函数处而引起的异常

注意:这里的异常并不是通常意义上的“错误”,它是中性的词,用于形容程序转向异常处理程序的情况

异常处理程序即适用于处理异常的程序代码,它们应当被写在已编译的程序映像中

ARM内核与SoC片上的所有异常都会交由NVIC进行处理。Cortex-M3和M4的NVIC支持最多240个中断请求IRQ、1个不可屏蔽中断NMI、1个SysTick定时器中断和多个系统异常。

  • 中断请求IRQ由片上一般外设产生
  • 不可屏蔽中断NMI由看门狗定时器或掉电检测器等外设产生
  • SysTick定时器中断由SysTick开启中断信号后产生
  • 其他系统异常由处理器内核或软件产生

对于ARM Cortex内核,当异常被接受后,寄存器组会被自动保存到栈中,并在返回流程中自动恢复,这和一般的C语言函数分支跳转行为一致,因此可以将异常处理程序写为普通的C函数,这种操作不会带来额外的软件开销

异常与异常管理

下面介绍ARM Cortex-M4内核的异常管理

异常类型

NVIC中划分出了255个异常,所有这些异常都会被输入NVIC,经过处理后统一传输给处理器内核

异常1-15为系统异常,16及以上则为外部输入的异常信号

异常编号 异常类型 优先级 描述
1 全局复位 -3(最高) 复位信号,拥有最高优先级(不最高也不行,毕竟复位信号是纯硬件的)
2 NMI -2 由外部NMI输入的不可屏蔽中断
3 硬件错误 -1 当错误处理未使能时发生了硬件问题(比如RCC炸了),就会强制触发该错误
4 MemManage错误 可编程 存储器管理错误,当存储器管理单元MPU冲突或访问非法地址时会发生
5 总线错误 可编程 当AHB接口收到从总线的错误响应时会产生该错误(如果在取址时发生则称呼为预取中止,数据访问时发生则称为数据中止)
6 使用错误 可编程 程序错误或试图访问协处理器导致的错误(M3、M4均不支持协处理器,所以引入了这个)
7-10 保留位 NA
11 SVC 可编程 请求管理调用。一般用于OS环境且允许应用任务访问系统服务
12 调试监控 可编程 调试监控。使用基于软件的调试方案时可以使用该异常进行断点和监视点控制
13 保留位 NA
14 PenSV 可编程 可挂起的服务调用。一般OS使用该异常进行上下文切换
15 SYSTICK 可编程 SysTick定时器的终端一次。可用于操作系统的系统时钟或作为普通的定时器中断使用
16 外部中断0 可编程 由片上外设产生的异常
17 外部中断1 可编程 .......
...... ....... 可编程 .......
255 外部中断239 可编程 .......

ARM内核中断管理与NVIC