一、什么是中断?
暂停原先的程序或事情,执行另外一些程序或事情,执行完成后返回原来的程序。
二、为什么要中断
因为另一些程序或事情比你原先正在做的事情要重要,或者这些突发事情你是无法控制它的来临的。
三、中断的分类
按不同方法进行分类
- 内部中断,外部中断 (向量表中灰色为内部)。
- 可设置中断,固化中断。
- 中断向量表 (cl级别的芯片有10个内部 ,0~67个外部,一些没用到,其中通用化 中断编号0~17,个性化中断编号18~67)。
- 优先级别 (由主优先级和从优先级组成,主从优先级可以通过4个位进行设置)。
四、中断的组成
- 具体中断的名称。
- 中断的地址 用来保存一条跳转指令,跳到哪里去。
五、中断的特点
STM32的中断NVIC是嵌入CORTEX内核的。
- 中断的反应的速度就很快。
- 中断可以实现标准化(上面两点是ARM公司做的)
- 所有外部IO端口都可以作为外部中断(上面一点是ST公司做的)
- 有不同的优先级,只有主优先级相同的中断才可以嵌套。
六、中断的配置流程
- 时钟配置
- GPIO配置
- 外设中断配置(EXTI中断也属于外设中断)
- NVIC总中断配置
- 中断程序编写
七、中断几个概念区分
NVIC,NVIC 外设中断,NVIC 外部接口中断 EXTI。简单来说 NVIC>NVIC外设中断>EXTI.
抢占优先级:高优先级的中断打断低优先级的中断。
响应优先级:正在执行的中断不能被;多个优先级同时到达时,优先执行响应优先级高的中断。
八、中断服务函数的特点
1) 中断服务函数没有参数没有返回值
2) 中断服务函数名是固定的,在在CORE里面的start_stm32f40_41xxx.s这个汇编里面找
3) 中断服务函数一定要清楚中断标志位
4) 中断服务函数不需要调用不需要声明
5) 中断服务函数尽可能不要出现延时或者死循环
九、为什么中断服务函数没有返回值,也没有参数?
中断服务函数发生在裸机上,不能带返回值和参数;因为在裸机中,在启动文件中事先申明中断入口,在程序运行中中断都是硬件自动调用,没有程序去给他传递参数,也不没有相应的硬件去接收参数。
在汇编中用EXPORT导出函数名,并用该函数名作为汇编代码段的标识
汇编ARM指令DCD:用于分配一片连续的字存储单元并用指定的数据初始化
[weak] 的意思是该函数优先级比较弱,如果其它地方定义了一个同名函数,那么此处的这个函数就被取代了。
参考博客:
https://blog.csdn.net/weixin_34302798/article/details/85999046