Hello,小伙伴们,大家好,这里是左左右。这期视频我们来讲一下EXTI外部中断相关寄存器。我们都知道EXTI外部中断只是中断中的一种。如果之前你对中断的概念还有点模糊,没关系,我们先用几分钟快速梳理一下。假设没有中断,主程序会从头到尾顺序执行,但是,如果我们在程序的编写过程中加入多个中断。
并且按照NVIC分组2进行分组,也就是抢占优先级和响应优先级各占两位。当中断1被触发时,主程序直接就被打断了。当 中断2被触发时,我们都知道不管是抢占优先级还是响应优先级。都是值越小,优先等级越高。此时中断2的抢占优先级中的值大于中断1。所以,中断2的抢占优先级要低于中断1。

它只能在这里排队等候。接着,中断3被触发。它的抢占优先级中的值小于中断1。中断1就被打断了。接着,中断4被触发。它的抢占优先级和响应优先级和中断2一模一样。所以,它也只能排队等候。但是,该如何判断他们执行的先后顺序呢?这时就要打开stm32手册。找到中断向量表。在这个表中我们可以看到,灰色这部分被称为内核中断。
用来处理单片机异常。剩下的这些中断就是内核外中断了。这里每个中断都有一个固定的位置序号。当两个中断软件优先级相同时,谁排在前面,谁就先执行。这里的DMA位置序号小于USART。所以,当DMA和USART抢占优先级和响应优先级相等时。DMA中断要排到USART中断前面。随着时间的推移,所有中断都被执行完毕了。

那么,谁在背后管理这些打断和排队的逻辑。它就是NVIC,嵌套向量中断控制器。也被称为中断管理员,实际上,stm32芯片可以说是由两部分组成。分别是Cortex M3内核和片上外设。NVIC就住在这个内核里。前面中断向量控制表中的灰色部分的中断也在Cortex m3内核。
其他中断就在片上外设了。那么GPIO是如何变成中断引脚的?GPIO本身只能输入输出。我们需要借助 AFIO这个引脚复用选择器。把引脚连接到EXTI上。由于在实际项目中,我们不可能把所有引脚都设置为EXTI外部中断。为了节省资源,单片机将所有引脚分为16组,每组包括PA0到PG0,PA1到PG1。
一直到PA15到PG15,而且每组只能选择一个引脚作为EXTI外部中断,也就是说外部引最多只有16个通道到EXTI外部中断。与EXTI外部中断相连的还有。PVD电源检测,RTC闹钟,USB检测,以太网唤醒与EXTI相连。共计20个中断通道到NVIC。接着,我们来看一下EXTI相关寄存器。

凭着前面知识的积累。我们可以推断出EXTI相关寄存器。肯定包括上升沿触发选择寄存器和下降沿触发选择寄存器。当上升沿触发选择寄存器被激活时,上升沿信号会触发中断。当下降沿触发选择寄存器被激活时,下降沿信号会触发中断。当上升沿触发选择寄存器和下降沿触发选择寄存器被激活时,双边沿信号会触发中断。

这里假设上升沿触发选择寄存器被激活。当stm32引脚输入上升沿信号时,通过边沿检测电路检测到上升沿信号。中断被触发,移交到NVIC中断控制器。等待进入主程序。但实际情况要比我们想象的要复杂一些。EXTI相关寄存器还包括软件中断事件寄存器。请求挂起寄存器,中断屏蔽寄存器。
他们通过外设接口与APB总线相连。软件中断事件寄存器和边沿检测电路与或门相连。这里的或门就是二选一。或门的输出结果经请求挂起寄存器和中断屏蔽寄存器经“与门“到达NVIC。这里的与门是只要有一个条件不满足。结果就不满足。这里的或门结果有两条路可选。

另外,一条路是与事件屏蔽寄存器经与门到脉冲发生器。产生脉冲信号,也就是产生中断事件。这个脉冲信号可以作为其他片上外设的触发源。所以,EXTI的整个工作流程就是,引脚信号 或 软件触发 到 挂起寄存器置位。如果屏蔽寄存器允许,NVIC 响应。如果屏蔽寄存器关闭,信号就只能走事件通道。
今天的视频就到这里。一定要关注、点赞、收藏,评论。您的支持是我这样的小博主持续更新下去的最大动力。期待下期视频再见!