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

2019-07-21 04:17发布

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

如题,讨论一下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
34条回答
warship
1楼-- · 2019-07-22 02:14
本帖最后由 warship 于 2018-7-28 11:59 编辑

STM32的外部线中断共19条,而对于NVIC来说,实际上只有10个通道,具体如下:


内核值(IRQn)       助记符                             备注
6                           EXTI0_IRQn                     PX0(即PA0-PG0口线)
7                           EXTI1_IRQn                     PX1口线
8                           EXTI2_IRQn                     PX2口线
9                           EXTI3_IRQn                     PX3口线
10                         EXTI4_IRQn                     PX4口线
23                         EXTI5_9_IRQn                  PX5-PX9口线
40                         EXTI15_10_IRQn               PX10-PX15口线
1                           PVD_IRQn                        电压监测
41                         RTC_IRQn                        RTC闹钟
42                         USB_IRQn                        USB唤醒


warship
2楼-- · 2019-07-22 04:24
本帖最后由 warship 于 2018-7-28 14:54 编辑

为进一步加深理解,我们从中断控制的角度来看一下串口1
虽然说只是一个串口,从中断控制的角度来看,也算是NVIC一个比较典型的下级机构,
对于NVIC来说,串口1只分配到了一个中断通道USART1_IRQn,编号值为37
但USART1的中断源是非常多的,
常用的有:
  RXNE接收缓冲区非空中断
  TC发送完成中断
  TXE发送缓冲区空中断
其它的还有IDLE中断、CTS中断、错误中断等等,总计不下十种。
但这些,NVIC都是一概不管的,对NVIC只能算一个中断!!!。

具体各类小中断的细分都是由串口1的外设来实现,具体实现套路是:
每一种小中断必有相应的屏蔽位(有时候称为中断允许位xxIE, 一般在控制寄存器CR中),
另外必有相应的标志位(名称如RXNE、TC、TXE等,一般在状态寄存器中),相当于挂起位,在满足触发条件时由硬件置位,并一直保持(随便等待调阅监控)
323232
3楼-- · 2019-07-22 07:01
可以  很强大
筑梦233
4楼-- · 2019-07-22 12:06
 精彩回答 2  元偷偷看……
hougeqvjing
5楼-- · 2019-07-22 17:09
楼主对STM32中断的理解,已经超神了。
hougeqvjing
6楼-- · 2019-07-22 22:19
warship 发表于 2018-7-28 10:35
先说结论,STM32的中断控制是分级管理的,CM3内核中的NVIC是顶层,对每个通道都设有1BIT的中断挂起位,
但 ...

虽然内核只有一个通道,但是外设可以对这个通道的响应有具体的标志位。

一周热门 更多>