当前位置: 首页 > article >正文

STM32F407 NVIC和外部中断

1、NVIC (嵌套向量中断控制器)

1.1、简介        

        NVIC (Nested vectored interrupt controller) 即嵌套向量中断控制器。所有的 Cortex-M 处理器都会提供 NVIC 用于中断处理,NVIC 是内核的中断管理核心,负责处理中断优先级、嵌套和调度。而在 Cortex-M4 微控制器中,NVIC 接收多个中断源产生的中断请求,如下图所示:

        Cortex-M4 的 NVIC 支持最多 240 个 IRQ(中断请求)、1 个不可屏蔽中断(NMI)、1 个 SysTick(系统节拍)定时中断及多个系统异常。多数 IRQ 由定时器、 I/O 端口和通信接口 (如 UART和 IIC) 等外设产生。 NMI 通常由看门狗定时器或掉电检测器等外设产生,其余的异常则是来自处理器内核,中断还可以由软件产生。
       

1.2、 中断介绍

        中断是异常的一种。异常是会改变程序流的事件,当其产生时处理器会暂停当前正在执行的任务,转而执行一段被称作异常处理的程序。在异常处理完毕后,处理器会继续正常执行程序指令。中断一般由外设或外部输入产生,又是也可以由软件触发。中断的异常处理也被称作中断服务程序 (ISR)。

          如下表中的 Cortex-M4 微控制器的中断源为系统异常。

         如下表以及表以后的类型的中断源均为外部中断输入。全表请去参照“STM32F4xx参考手册”。

         STM32F407 的中断向量表在 stm32f4xx.h文件中被定义。

         NVIC 相关寄存器的定义在 core_cm4.h文件中:

1.3、中断优先级

         对于 Cortex-M 处理器中断是否能被处理器接受以及何时被处理器接受并执行中断处理是由中断的优先级和处理器当前的优先级决定的。更高优先级的中断 (优先级编号更小) 可以抢占低优先级的异常 (优先级编号更大),这就是中断嵌套的情形。有些中断(复位、NMI 和 HardFault) 具有固定的优先级,其优先级由读书表示,这样它们的优先级就会比其他的中断高。其他中断则具有可编程的优先级,范围为 0 ~ 255。

        中断优先级由优先级寄存器控制,宽度为 3 ~ 8 位。假如设计中只实现了 3 位优先级,优先级配置寄存器如下图所示:

        由于 0~4 位未实现,它们读出总是为 0,对这些 bit 的写操作会被忽略。 这时只有 8 个可编程优先级0x00(高优先级)、0x20、0x40、0x60、0x80、0xA0、0xC0、0xE0(最低优先级)。

        如果设计中实现了 4 位优先级,优先级配置寄存器就如下图所示:

        这时会有 16 个可编程优先级。 实际可使用的位数越多,可用的优先级就越多。不过优先级位数多了以后门数也会增加,因此会加大芯片的功耗。

        优先级配置寄存器有 8 位宽度,本该有 256 个抢占优先级,但实际上只有 128 个抢占优先级。这是因为 8 位寄存器会被进一步分为两个部分:分组优先级和子优先级。上半部分(左边的位)为抢占(分组)优先级,而下半部分(右边的位)则为子优先级,如下图所示:


http://www.kler.cn/a/578457.html

相关文章:

  • 深度学习分类回归(衣帽数据集)
  • JSAR 基础 1.2.1 基础概念_空间小程序
  • 【Kotlin】Kotlin基础笔记
  • C/C++中使用CopyFile、CopyFileEx原理、用法、区别及分别在哪些场景使用
  • Linux 命令 for循环
  • 【MATLAB例程】二维环境定位,GDOP和CRLB的计算
  • 机器学习12-视觉识别任务
  • linux | Vim 命令快捷操作
  • Mac 配置 Maven JDK
  • PH热榜 | 2025-03-09
  • centos7 yum安装jdk1.8(deepseek)
  • 1.4 单元测试与热部署
  • 大话机器学习三大门派:监督、无监督与强化学习
  • 数据类设计_图片类设计之2_无规则图类设计(前端架构基础)
  • 【Andrej Karpathy 神经网络从Zero到Hero】--2.语言模型的两种实现方式 (Bigram 和 神经网络)
  • MATLAB控制函数测试要点剖析
  • P8924 「GMOI R1-T1」Perfect Math Class 题解
  • STM32 内置的通讯协议
  • 在ubuntu20.4中如何创建一个虚拟环境(亲测有效)
  • 代码随想录-基础篇