自学内容网 自学内容网

NVIC和EXIT寄存器工作

目录

1. EXTI 控制的寄存器

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


原文地址:https://blog.csdn.net/2301_78622258/article/details/142964536

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!