2.1中断的作用和执行过程
2.1.1中断的作用
中断一般是由硬件(如外设和外部输入引脚)产生的事件,它会引起程序流偏离正常的流程(如给外设提供服务),转去执行其他的流程
提高实时性: 中断允许单片机在特定事件发生时立即响应, 而无需持续轮询状态. 这大大提高了系统的实时性, 确保及时处理外部事件和设备请求
降低资源占用, 通过使用中断, 单片机可以在需要时才处理指定任务, 而不是持续检查设备和输入状态, 这降低了系统资源的占用. 使单片机能够更有效地执行其他任务
简化程序结构: 中断使得开发者能够将事件处理逻辑分离, 编写简单, 清晰的代码. 这有助于提高程序的可维护性和可读性
支持多任务处理: 中断机制使得单片机能够在同一事件处理多个任务. 通过合理分配中断优先级, 可以确保紧急任务优先执行, 提高系统的整体效率
动态事件响应:中断可以根据事件发生的条件动态地执行不同的处理函数. 这使得系统能够根据实际需求灵活地响应时间, 提高系统的适应性和鲁棒性
省电优势: 当没有外部事件发生时, 单片机可以进入低功耗模式, 降低功耗. 当时间发生时, 中断机制能够立即唤醒单片机进行处理. 这在许多低功耗应用场景中具有显著优势
平衡性能和功耗:通过合理配置中断, 开发者可以在系统性能和功耗之间实现平衡. 这对于需要在有限资源下实现高性能运算的嵌入式系统尤为重要
2.1.2中断的执行过程
1、外设发出中断请求
2、处理器暂停当前执行的任务,保护现场,将当前位置的PC地址压栈;
3、程序跳转到中断服务程序,执行中断服务程序;
4、恢复现场,将栈顶的值回送给PC;
5、跳转到被中断的位置开始执行下一个指令
中断服务函数:相对于正常子函数,中断服务函数有以下需要注意的地方:
1、中断服务函数不能传入参数;
2、中断服务函数不能有返回值;
3、中断服务函数应该做到短小精悍,快入快出,禁止延时性的过程。
4、不要在中断函数中使用printf函数,会带来重入和性能问题。
中断重入:就是在一个中断程序执行过程中又被另一个中断打断,转而又去执行另一个中断程序。
2.2外部中断exti
2.2.1
位置 | 优先级 | 优先级类型 | 名称 | 说明 | 地址 |
6 | 13 | 可设置 | EXTI0 | EXTI线0中断 | 0x0000_0058 |
7 | 14 | 可设置 | EXTI1 | EXTI线1中断 | 0x0000_005C |
8 | 15 | 可设置 | EXTI2 | EXTI线2中断 | 0x0000_0060 |
9 | 16 | 可设置 | EXTI3 | EXTI线3中断 | 0x0000_0064 |
10 | 17 | 可设置 | EXTI4 | EXTI线4中断 | 0x0000_0068 |
23 | 30 | 可设置 | EXTI9_5 | EXTI线[9:5]中断 | 0x0000_009C |
40 | 47 | 可设置 | EXTI15_10 | EXTI线[15:10]中断 | 0x0000_00E0 |
EXTI外部中断 可以监测指定GPIO口的电平信号,当其指定的GPIO口产生平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后中断CPU主程序,使CPU执行EXTI对应的中断程序。
2.2.2外部中断内部框图以及外部中断线路映像
边沿检测电路+软件中断事件寄存器:这个几个进行或门输出,便可以实现“上升沿/下降沿/双边沿/软件触发”这四种触发方式。
请求挂起寄存器:相当于一个中断标志位,通过读取该寄存器可以判断是哪个通道触发的中断。
中断屏蔽寄存器/事件屏蔽寄存器:相当于开关,只有置1,中断信号才能继续向左走。
脉冲发生器:产生一个电平脉冲,用于触发其他外设的动作。
2.2.3外部中断线路映像
2.3外部中断EXTI的配置过程
1、配置要中断检测的IO引脚模式为:浮空输入模式,具体查阅参考手册8.1.11以及自己的硬件电路来设置
2、把要中断检测的IO引脚映射到对应的EXTI中断线上,通过AFIO来设置
3、配置对应的EXTI中断线,触发的边沿、使能屏蔽位
4、通过NVIC配置EXTI中断的优先级、使能NVIC的EXTI中断
5、编写中断服务函数:函数名、清中断等等