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 将该中断标记为已处理,可以再次接收来自该中断源的请求。

相关推荐
manhuami20071 小时前
51单片机ALE引脚的作用 - 锁存地址和输出时钟信号并不冲突
单片机·嵌入式硬件·51单片机
搬砖的小码农_Sky1 小时前
单片机如何入门?
单片机·嵌入式硬件
Q23553688721 小时前
60V恒流IC SL8443B内置功率MOS 支持2.5A电流 降压LED恒流驱动芯片
单片机·嵌入式硬件
暮雪倾风2 小时前
【STM32-HAL库】TEMT6000光照强度传感器(STM32F407ZGT6)(附带工程下载链接)
stm32·单片机·嵌入式硬件
三菱-Liu2 小时前
三菱FX5U CPU实时监视功能GX LogViewer Version
驱动开发·嵌入式硬件·硬件工程·制造
板子小哥3 小时前
Lua语法基础全面剖析(中篇)
开发语言·嵌入式硬件·junit·单元测试·硬件工程·lua·1024程序员节
Industio_触觉智能4 小时前
瑞芯微RK3566/RK3568 Android11下该如何默认屏蔽导航栏/状态栏?看这篇文章就懂了
嵌入式硬件·物联网·rk3568·rk3566·鸿蒙开发板
陌夏微秋4 小时前
00 硬件、嵌入式硬件知识-目录篇
linux·stm32·单片机·嵌入式硬件·mcu·ubuntu
Whappy0015 小时前
4. STM32之TIM实验--输出比较(PWM输出,电机,四轴飞行器,智能车,机器人)--(实验2:PWM驱动舵机)
stm32·嵌入式硬件·机器人
RIGOL小普5 小时前
如何利用双踪示波器测量两个电压信号的相位差?如何判别波形的超前与滞后?
单片机·嵌入式硬件·fpga开发·硬件工程·射频工程