进来讨论一下,NVIC寄存器组中的中断挂起SETPEND与消除CLRPEND,与外部中断挂起寄存器EXTI_PR有何关系?

2019-07-21 04:17发布

本帖最后由 warship 于 2018-7-27 19:32 编辑

如题,讨论一下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
34条回答
warship
2019-07-22 00:02
本帖最后由 warship 于 2018-7-30 08:58 编辑

比如EXTI5_9_IRQn对于NVIC来说,只是一个中断,编号为23
但实际却包括了5个中断源,这一点NVIC根本是不知情的。EXTI5_9_IRQn是我们编的一个符号,实际就是一个常数,值为23(本文称为编号)
这5个中断源就具体由下级机构来管理了,每个都必须要有:
中断屏蔽位:是否受理该中断请求(在EXTI->IMR中)
中断挂起位:是否发生了该中断请求(在EXTI->PR中)
只要这5个中任一个或多个触发了中断条件(上升沿/下降沿等),相应的中断挂起就会被硬件置位,如果对应的一个或多个中断屏蔽是开放的,都会产生向NVIC发出EXTI5_9_IRQn号中断请求
至于这个EXTI5_9_IRQn是谁发的,是EXTI5、EXTI6、EXTI7、EXTI8还是EXTI9申请了中断? NVIC是无从知道的,它也管不了那么多。
软件如果需要的话,可以通过调阅监控记录来了解细节,而这个监控记录就是在外设中实现的中断挂起位。
在STM32的外部线中断EXTI系统中,共有19条外部中断线,每一条都有相应的中断挂起位,即EXTI->PR的BIT18:0,满足中断条件后,由硬件置位,并一直保持(随便等待调阅监控),直到由软件手动清除。
注:19条是目前常用芯片具体实现的数目,有些互联型的是20条,EXTI各用一个字来设置中断屏蔽位和中断挂起位,理论上最大可扩展能力为可以表达32条外部中断线

一周热门 更多>