目录
前言
中断通常被定义为一个事件,该事件能够改变处理器执行指令的顺序。这样的事件与 CPU 芯片内外部硬件电路产生的电信号相对应。
一、中断简介
1.1中断全过程
中断是指计算机在执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序,待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。
1.2中断的作用
速度匹配:可以解决快速的cpu与慢速的外部设备之间的传送数据的矛盾
分时操作:cpu可以分时位多个外部设备服务,提高计算机的利用率
实时响应:cpu能够即使应用处理系统的随机事件,增强系统的实时性
可靠性高:cpu可以处理设备故障及掉电等突发事件,提高系统可靠性
1.3中断优先级
处理器根据不同中断的重要程序设置不同的中断优先级,不同优先级中断的处理原则:
(1)多个中断同时出现时,处理器先响应高优先级的中断
(2)低优先级中断的ISR执行时,可以被高优先级中断再次打断
(3)ISR比App Code拥有更高的执行优先级
1.4中断响应过程
步骤一:中断源发出请求
步骤二:判断处理器是否允许中断,以及该中断源是否被屏蔽
步骤三:中断优先级排队
步骤四:处理器暂停当前程序,保护断点地址和当前的处理器状态,根据中断类型号查找中断向量表,转到对应的中断服务程序
步骤五:执行中断服务程序
步骤六:恢复被保护的状态,执行中断返回指令,回到被中断的程序
1.5外部中断控制器(EXTI)
EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的 20 个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿 检测和下降沿的检测。EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为 中断或者事件,以及触发事件的属性
编号 1 是输入线, EXTI 控制器有 19 个中断/事件输入线,这些输入线可以通过寄存器设置为任意一个 GPIO,也可以是一些外设的事件,这部分内容我们将在后面专门讲解。输入线一般是存在电平变化的信号。
编号 2 是一个边沿检测电路,它会根据上升沿触发选择寄存器 (EXTI_RTSR) 和下降沿触发选择寄存器 (EXTI_FTSR)对应位的设置来控制信号触发。边沿检测电路以输入线作为信号输入端,如果检测到有边沿跳变就输出有效信号 1 给编号 3 电路,否则输出无效信号0。而 EXTI_RTSR 和EXTI_FTSR 两个寄存器可以控制器需要检测哪些类型的电平跳变过程,可以是只有上升沿触发、只有下降沿触发或者上升沿和下降沿都触发。
编号 3 电路实际就是一个或门电路,它一个输入来自编号 2 电路,另外一个输入来自软件中断事件寄存器 (EXTI_SWIER)。
EXTI_SWIER 允许我们通过程序控制就可以启动中断/事件线,这在某些地方非常有用。我们知道或门的作用就是有 1 就为 1,所以这两个输入随便一个有有效信号 1就可以输出 1 给编号 4 电路。
编号 4 电是一个与门电路,它一个输入是编号 3 电路,另外一个输入来自中断屏蔽寄存器(EXTI_IMR)。与门电路要求输入都为 1 才输出1,导致的结果是如果 EXTI_IMR 设置为 0 时,那不管编号 3 电路的输出信号是 1 还是 0,最终编号 4 电路输出的信号都为
0;如果 EXTI_IMR设置为 1 时,最终编号 4 电路输出的信号才由编号 3 电路的输出信号决定,这样我们可以简单的控制 EXTI_IMR 来实现是否产生中断的目的。编号 4 电路输出的信号会被保存到挂起寄存器(EXTI_PR) 内,如果确定编号 4 电路输出为 1 就会把