目录
一、中断概述
1、中断系统
2、EXTI
二、外部中断相关寄存器
1、EXTI_IMR (External Interrupt/Event Controller_Interrupt Mask Register) 中断屏蔽寄存器
2、EXTI_EMR (External Interrupt/Event Controller_Event Mask Register) 事件屏蔽寄存器
3、EXTI_RTSR (External Interrupt/Event Controller_Rising Trigger Selection Register) 上升沿触发选择寄存器
4、EXTI_FTSR (External Interrupt/Event Controller_Falling Trigger Selection Register) 下降沿触发选择寄存器
5、EXTI_SWIER (External Interrupt/Event Controller_Software Interrupt Event Register) 软件中断事件寄存器
6、EXTI_PR (External Interrupt/Event Controller_Pending Register) 挂起寄存器
三、外部中断配置
“STM32的中断数量繁多,为了方便开发者,厂商建立了强大而又边界的中断控制工具——NVIC (Nested Vectored Interrupt Controller) 嵌套向量中断控制器。”
中断可分为可屏蔽中断和不可屏蔽中断,二者都属于外部中断,不同的是不可屏蔽中断一旦提出请求 ,CPU必须无条件响应;而对于可屏蔽中断请求,CPU可以响应也可以不响应。各个中断是有优先级的,多个中断源同时申请中断时,CPU会根据优先级的顺序选择中断。
图1.1 中断嵌套
中断嵌套发生在CPU执行中断程序过程中又有更高抢占优先级的中断程序申请中断。
*优先级分组:抢占优先级高的可以中断嵌套;响应优先级高的可以优先排队;抢占优先级和响应优先级都一样的按中断号排队。
EXTI(External interrupt/event controller)外部中断/事件控制器,是NVIC中的一员。负债管理映射到GPIO引脚上的外部中断以及片内几个集成外设的中断(PVD,RTC alarm,USB wakeup,ethernet wakeup)以及软件中断,其输出最终被映射到NVIC的相应通道。
触发响应的方式有中断响应和事件响应。中断响应很好理解,就是引脚电平变化触发中断;事件响应不会触发中断,而是触发别的外设响应,如ADC,DMA等,是外设之间的联合工作。
图2.1 时钟树(局部)
图2.2 外部中断/事件控制器(EXTI)框图
图1.2右下角的“输入线”,即信号输入口,可以将输入线设置为任意一个GPIO口,信号从这里进入。从整体来看,输入的信号最终有两个去向。一是到NVIC中断控制器,二是到脉冲发生器。
详细来说,信号先经过边缘检测电路,至于是选择上升沿触发选择寄存器还是选择下降沿触发选择寄存器,由用户自行配置。若检测达到信号突变,则输出有效信号“1”,反之输出无效信号“0”。
之后信号遇到一个或门,该或门有两个信号源,只要有一个信号源满足条件,或门就会产生有效信号给后面的电路。再一次说明了中断可以用软件触发,即使电平并没有变化。
图2.3 与或非门符号
在经过或门后,信号兵分两路。这两个与门相当于开关,通过将寄存器的相应位配置为0,用户可以控制信号具体从哪一端流出。请求挂起寄存器相当于图1.1中的断点。
产生中断是将信号传入NVIC控制器,进而运行中断服务函数,这属于软件级;而事件则是产生相应脉冲,而后这个脉冲给其他外设功能使用,是电路上的信号传输,属于硬件级。
*图2.2的/20表示有20个通道。
*可以设置仅上升沿触发(低→高)、仅下降沿触发(高→低)和上升沿下降沿都触发,除此之外还支持软件中断。同一个GPIO_Pin?不可同时触发中断(例如GPIOA_Pin1和GPIOB_Pin1不可同时触发中断,原因如图)。
图2.4
AFIO负债复用功能引脚重映射和中断引脚选择。
*说与门相当于开关是因为:1&0=0,1&1=1;0&0=0,0&1=0。
开启时钟→初始化I/O口→I/O口映射中断线→中断线配置→中断配置→中断服务函数
若文章内容出现错误,恳请各位批评指正,感激不尽!