下面我们先来了解一些基本概念: 中断:中断是什么?举个例子来说,当我们正在工作时,突然电话响了,这时你会把手里的 工作先停下来,然后去接电话,当接完电话后,电话里的人安排你马上做一件事,这时你需 要立刻去做这件事,当把这件事做完后你会继续之前被打断的工作,这个过程为一次中断 异常:一个系统本应该正常的运行,但由于某些条件使系统产生了错误,就会使系统运行 不 正常,我们称之为异常。就好比一个健康的人,如果身体某个器官出现了问题 那他将会生 病,不能像以前那样健康生活,称他的身体出现了异常 系统出现异常,我们必须对异常做 出处理,才能让系统正常运行 事件:比如一个老师在教室里给学生上课,下面的学生会做出各种不同的动作 如有认真记 笔记的,有讲小话的,有翻自己书包的等等,我们把学生的这些行为称为事件 但老师对这 些事件有些是不会有动作的,有些事件是需要老师干预的,比如两个学生讲话 影响了老师 上课,老师需要警告讲话的学生,然后再继续上课 优先级:当我们接到了两个电话,两个电话都安排你去做别的事 这时你需要先完成比较急 的事,然后再完成不是太急的事,这就是优先级的问题 当有多个中断时,我们需要根据中 断优先级判断先响应优先级高的中断,然后再响应优先级低的中断 中断与事件的联系与区别:有些事件需要响应,称这个事件为可中断事件 但有些事件不需 要做出响应称这些事件为不可中断事件。当硬件正常连接时 对应事件会自动产生,但中断 则需软件配置相应的中断使能位 抢占式优先级和响应优先级:所谓抢占式优先级和响应优先级,具有高抢占式优先级的中断 可以在低抢占式优先级中断处理过程中被响应,即中断嵌套。当两个中断源的抢占式优先级 相同时 这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断 这个 后到来的中断就要等到前一个中断处理完之后 才能被处理。如果这两个中断同时到达 则 中断控制器根据他们的响应优先级高低来决定先处理哪一个; 如果他们的抢占式优先级和响 应优先级都相等,则根据他们在中断表中的排位 顺序决定先处理哪一个。每一个中断源都必 须定义 2 个优先级 STM32 的中断管理利用了 NVIC(Nested Vectored Interrupt Controller)嵌套向量中断控制 器 它把所有的外设中断和系统异常用一张向量表来管理,每个系统异常和外设中断都被分 配相应的地址 除了一些系统异常的优先级不能改变外,其余的系统异常和中断的优先级都 可变化。具体向量表部分截图如下图所示: ![]() ![]() 其中包含 10 个系统异常,有 82 个外部中断地址,其中有 11 个被保留,没有使用 从上表 可查出对应的默认优先级和地址分配情况 NVIC 是嵌套向量中断控制器,它控制芯片所有中断功能 是 Cortex-Mx 内核里的一个外设下 图为 Cortex-M4 内核 NVIC 寄存器的分布图: ![]() 从上图可以看出,Cortex-M4 内核 NVIC 嵌套向量中断控制器总的有 7 个类型的寄存器 其 中有 1 个控制器类型的寄存器,8 个中断使能寄存器,8 个中断失能寄存器 8 个中断挂起 设定/清除寄存器,8 个中断有效位寄存器,60 个中断优先级寄存器 而 ST 对 CM4 内核 NVIC 控制器寄存器做了一定缩减,其寄存器分布图如下: |