NVIC和EXIT寄存器工作

目录

[1. EXTI 控制的寄存器](#1. EXTI 控制的寄存器)

[2. NVIC 控制的寄存器](#2. NVIC 控制的寄存器)

[3. EXTI 和 NVIC 的交互](#3. EXTI 和 NVIC 的交互)


EXTI(外部中断/事件控制器)NVIC(嵌套向量中断控制器) 的控制寄存器是不同的 。这两个控制器分别有自己独立的一套寄存器来完成不同的功能。EXTI 寄存器主要用于外部中断的配置和管理 ,而 NVIC 寄存器则用于整体中断的优先级管理和使能控制

1. EXTI 控制的寄存器

EXTI 控制器用于配置和管理外部中断(如 GPIO 引脚上的中断),它有自己专门的寄存器来设置中断的触发条件、使能、屏蔽等功能。EXTI 控制器的寄存器包括:

1.1 EXTI_IMR(中断屏蔽寄存器,Interrupt Mask Register)

  • 用于使能或屏蔽 特定的外部中断线。对应位置 1 时,中断使能,0 时,中断被屏蔽。
  • 每条 EXTI 线对应一位,位号与中断线号一致。例如,IMR2 对应 EXTI2 线。

1.2 EXTI_EMR(事件屏蔽寄存器,Event Mask Register)

  • 用于使能或屏蔽事件请求。与 IMR 类似,位 1 时,事件使能,位 0 时,事件被屏蔽。
  • 事件不会触发中断,但可能用于触发其他硬件模块。

1.3 EXTI_RTSR(上升沿触发选择寄存器,Rising Trigger Selection Register)

  • 控制 EXTI 线的上升沿触发 。如果某一位设置为 1,则对应的 EXTI 线会在上升沿(信号从低到高变化)时产生中断。

1.4 EXTI_FTSR(下降沿触发选择寄存器,Falling Trigger Selection Register)

  • 控制 EXTI 线的下降沿触发 。如果某一位设置为 1,则对应的 EXTI 线会在下降沿(信号从高到低变化)时产生中断。

1.5 EXTI_SWIER(软件中断事件寄存器,Software Interrupt Event Register)

  • 允许通过软件触发中断 。对应位写 1 后,可以通过软件触发相应的 EXTI 线中断,而不需要等待外部信号变化。

1.6 EXTI_PR(挂起寄存器,Pending Register)

  • 当外部中断线检测到有效的边沿变化时,EXTI_PR 的相应位会被置为 1,表示该中断线有一个中断请求处于挂起状态
  • 在中断服务程序(ISR)中,通过向 PR 对应位写入 1清除挂起位,否则该中断可能无法再次触发。

2. NVIC 控制的寄存器

NVIC 控制器是整个系统的中断管理器,负责处理包括外部中断(EXTI)在内的所有中断源,并根据优先级调度这些中断。NVIC 有自己的一套寄存器,主要用于中断的优先级控制和中断使能/屏蔽。

2.1 NVIC_ISER(中断使能寄存器,Interrupt Set-Enable Register)

  • 用于使能指定的中断 。如果某位被设置为 1,对应的中断将被使能。
  • STM32 中每个中断都有一个 IRQ 号(例如 EXTI2 对应的 IRQ 号为 EXTI2_IRQn)。通过将该中断对应的 IRQ 位写 1,可以使能该中断。

2.2 NVIC_ICER(中断清除使能寄存器,Interrupt Clear-Enable Register)

  • 用于禁用指定的中断 。如果某位被设置为 1,对应的中断将被禁用。

2.3 NVIC_ISPR(中断挂起寄存器,Interrupt Set-Pending Register)

  • 可以通过软件设置中断为挂起状态 。写 1 会将指定的中断置为挂起状态(即将中断请求传递给 NVIC,即使实际中断没有触发)。

2.4 NVIC_ICPR(中断清除挂起寄存器,Interrupt Clear-Pending Register)

  • 用于清除挂起状态 。当某位写入 1 时,表示清除对应中断的挂起状态。

2.5 NVIC_IPR(中断优先级寄存器,Interrupt Priority Register)

  • 用于设置每个中断的优先级。STM32 使用 NVIC_IPR 来设置不同中断源的优先级。每个中断的优先级可以独立配置,优先级越高的中断将优先被 NVIC 处理。

3. EXTI 和 NVIC 的交互

尽管 EXTINVIC 是两个独立的控制器,它们在中断处理中是相互协作的。

  • EXTI 控制器首先检测到外部信号的边沿变化(例如 GPIO 引脚上的变化),并在其 挂起寄存器(PR) 中置位,表示该中断处于挂起状态。这时,EXTI 发送中断请求给 NVIC

  • NVIC 收到 EXTI 控制器的中断请求后,会根据当前中断的优先级决定是否处理这个中断。如果决定处理,NVIC 将调用中断向量表中与该中断源对应的中断服务程序(ISR)。

  • 在 ISR 中,开发者必须手动清除 EXTI_PR 寄存器中的挂起位,表示中断已经被处理完毕。随后,NVIC 将该中断标记为已处理,可以再次接收来自该中断源的请求。

相关推荐
智者知已应修善业2 小时前
【51单片机用数码管显示流水灯的种类是按钮控制数码管加一和流水灯】2022-6-14
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
智商偏低8 小时前
单片机之helloworld
单片机·嵌入式硬件
青牛科技-Allen9 小时前
GC3910S:一款高性能双通道直流电机驱动芯片
stm32·单片机·嵌入式硬件·机器人·医疗器械·水泵、
森焱森11 小时前
无人机三轴稳定控制(2)____根据目标俯仰角,实现俯仰稳定化控制,计算出升降舵输出
c语言·单片机·算法·架构·无人机
白鱼不小白11 小时前
stm32 USART串口协议与外设(程序)——江协教程踩坑经验分享
stm32·单片机·嵌入式硬件
S,D12 小时前
MCU引脚的漏电流、灌电流、拉电流区别是什么
驱动开发·stm32·单片机·嵌入式硬件·mcu·物联网·硬件工程
芯岭技术15 小时前
PY32F002A单片机 低成本控制器解决方案,提供多种封装
单片机·嵌入式硬件
youmdt15 小时前
Arduino IDE ESP8266连接0.96寸SSD1306 IIC单色屏显示北京时间
单片机·嵌入式硬件
嘿·嘘15 小时前
第七章 STM32内部FLASH读写
stm32·单片机·嵌入式硬件
Meraki.Zhang15 小时前
【STM32实践篇】:I2C驱动编写
stm32·单片机·iic·驱动·i2c