【嵌入式学习笔记】---- 中断

1 中断概述

1.1 什么是中断

打断CPU执行正常的程序,转而处理紧急程序,然后返回原暂停的程序继续执行。

中断是一种硬件机制,在这种机制中,中断可以随时发生,需要CPU立即处理;因此,当CPU通过指示中断请求线收到中断信号时,CPU停止当前进程并通过将控制权传递给服务设备的中断处理程序来响应该中断
 

image

1.2 中断的作用

  1. 实时控制
  2. 故障处理
  3. 数据传输

1.3 中断的意义和优点

高效处理紧急程序,不会一直占用CPU资源

  • 分时操作:可以分时为多个外部设备服务,提高了处理器的利用率
  • 实时相应:处理器能够及时处理系统的随机事件,提高了系统的实时性
  • 可靠性高:具有处理设备故障及掉电等突发事件的能力,提高系统的可靠性

1.4 中断相关介绍

1.4.1 中断源

引发中断的事件

1.4.2 主程序

当前正在执行的程序(通常都是main函数)

1.4.3 断点

主程序被暂停的位置

1.4.4 中断服务函数程序

中断服务程序(ISR)就是指在中断发生时所执行的特定程序,一般由用户编写

1.4.5 中断向量表

为了区分中断源,系统为每一个中断源分配了一个唯一的编号,这个编号称为中断类型号,按照中断类型号,从小到大将所有中断服务程序的入口地址依次排列,得到中断向量表,中断服务程序的入口地址称为中断向量,定义在启动文件,当发生中断时,CPU自动执行对应的中断服务函数程序。

b9b665d504434f8e99109adbb21e1659.png

中断向量表通常位于存储器的零地址处。当某个中断源发出中断申请时,处理器根据识别到的中断类型号在中断向量表中寻找对应的表项,表项的内容就是该中断所对应的中断服务程序的入口地址,然后跳转到该地址执行相应功能函数 

2 嵌套向量中断控制器 NVIC

2.1 NVIC相关寄存器

NVIC相关寄存器位数寄存器个数备注
中断使能寄存器ISER328每个位控制一个中断
中断除能寄存器ICER328每个位控制一个中断
应用程序中断及复位控制寄存器AIRCR321位[10:8]控制优先级分组
中断优先级寄存器IPR82408个位对应一个中断,STM32只用高4位

2.2 NVIC工作原理

image

3 中断优先级

3.1 抢占优先级(pre)

抢占优先级高的(数字越小,优先级越高)最先执行,且可打断低优先级的中断,抢先执行

3.2 响应优先级(sub)

当两个抢占优先级相同的中断源同时触发时,响应优先级高的先执行(注意必须是同时触发,否则按照自然顺序依次执行,即不能互相打断)

3.3 自然优先级

中断向量表的优先级。抢占优先级和响应优先级都相同时,自然优先级高的先执行

3.4 优先级分组

优先级分组AIRCR[10:8]IPRx bit[7:4]分配分配结果
0111none:[7:4]0位抢占优先级,4位响应优先级
1110[7]:[6:4]1位抢占优先级,3位响应优先级
2101[7:6]:[5:4]2位抢占优先级,2位响应优先级
3100[7:5]:[4]3位抢占优先级,1位响应优先级
4011[7:4]:none4位抢占优先级,0位响应优先级

3.5 中断优先级和中断嵌套

         抢占优先级高的数字越小,优先级越高最先执行,且可打断低优先级的中断,抢先执行(嵌套中断的核心);当两个抢占优先级相同的中断源同时触发时,次优先级高的先执行(注意是同时触发,否则按照自然顺序依次执行),且不支持抢占

4 外部中断事件控制器 EXTI

4.1 EXTI基本概念

在STM32内部专门设计了一个外部中断事件控制器(EXTI)管理一些涉及GPIO引脚电平变化或者来自RTC和USB等外设的唤醒事件而引起的中断,EXTI提供了外部中断线,其中一部分用于GPIO引脚产生的中断,其余一部分用于RTC和USB等外设的唤醒事件(详情需参考芯片手册)

4.2 中断和事件的区别

4.2.1 中断

要进入NVIC,有相应的中断服务函数,需要CPU处理

4.2.2 事件

不进入NVIC,仅用于内部硬件自动控制,如TIM,DMA,ADC

4.3 EXTI主要特性

每条EXTI线都可以单独配置:
①选择类型:中断或事件
②触发方式:上升沿、下降沿、或双边沿触发
③......等等

4.4 EXTI工作原理

image

4.4.1 产生中断

要产生中断,必须先配置好并使能中断线。根据需要的边沿检测设置2个触发寄存器,同时在中断屏蔽寄存器的相应位写1允许中断请求。当外部中断线上发生了期待的边沿时,将产生一个中断请求,请求挂起寄存器对应位随之被置1,作为该中断请求的中断标志位,表明有中断发生。经与门后输出中断信号至NVIC。

完成中断处理后,必须对请求挂起寄存器的对应位写1,以清除本次中断的中断标志位,从而避免对同一个中断的重复响应

4.4.2 产生事件

如果需要产生事件,必须先配置好并使能事件线。根据需要的边沿检测通过设置2个触发寄存器,同时在事件屏蔽寄存器的相应位写1允许事件请求,当事件线上发生了需要的边沿时,将产生一个事件请求脉冲.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Luminescence

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值