stm32学习笔记-中断系统
文章目录
问题引入
问题引入:我们想通过 按键 控制灯亮 ,怎么做
一般做法:轮询
2b轮询例子:
2:吃了吗?B:没吃
2:吃了吗?B:没吃
2:吃了吗?B:吃了
2:吃了吗?B:…
具体做法
1 将GPIO口设为输入模式,
2 不断判断GPIO口的电平状态,从而得到是否按下按键
这样的 方式叫 “轮询”
轮询 有天生的 缺陷:
- 浪费CPU时间
- 查询GPIO口的状态时,占用总线
有人提出,能不能这样做,按下或弹起的时候,外设主动通知CPU,这就叫中断。
1、中断系统概述。
日常中的中断,有更紧急的事情出现要去处理。比如说看电视的时候,电话响了,暂停电视听电话。
1.1 为什么要中断(中断意义)
处理器的中断:在处理器中,中断是一个过程。在处理器正常执行程序时,出现内部/外部紧急事件需要去处理,处理器暂停当前的程序,去处理紧急事件,处理完毕后,返回被打断的程序处继续往下执行。
中断可以提升CPU的处理效率,同时能堆突发事件做出实时的处理。实现程序的并行化,实现嵌入式系统进程之间的切换。
中断不是动不动就用的,在特定的应用场合应用。
中断应用场合:
- 急的
- 要求效率的
1.2 中断处理过程
i.保护现场
保护现场,寄存器的值压栈。
ii.执行中断
执行中断服务程序,通过中断向量去寻找中断服务程序。
iii.返回现场
恢复现场。
2、STM32中断的体系结构
这个NVIC是个重大的创举有着伟大的意义,就像秦朝设立丞相那样减轻的皇帝的负担。
每一个外设(分管部门):外设中的每一个外设都有一个自己的中断开关,内核中的系统定时器等也有自己中断开关。
NVIC(主管家):NVIC专门管理中断的,每一个中断都要在NVIC中挂号(使NVIC监听器中断请求)。NVIC收到外设的中断请求,会将其中断请求发送给内核,内核收到NVIC的中断通知之后,就会去判断时哪个中断发生,然后查找FLASH中断向量表去获取相应的中断处理函数。
举例:
由简单GPIO电平引起的中断,由专门的部件管理中断,这个部件脚EXTI(外部中断管理控制器)。
某个GPIO需要产生中断,由EXTI使能之后,EXTI会把中断的请求,通知给NVIC,NVIC若对其使能,则NVIC把这个中断请求通知给CORTEX_M3,由CORTEX_M3处理中断。
2.1 NVIC 内嵌向量中断控制器。
NVIC的作用
1、快。(男人就是要快!)
快速的运行的产品需要快,如高铁,飞机,导弹等产品。
2、标准化,同一化。
中断服务程序同一了,方便编程人员。
NVIC的主要功能。
i.中断管理。
ii.支持异常及中断向量化处理。
减少中断处理的一个时间。
iii.支持前台中断。
例如:一个中断发生了,另一个更加紧急的中断不久也发生了,可以打断当前中断的处理,去执行紧急程度更改的中断。