N32G003学习—— 第五章 第一节 EXTI外部中断

1·中断的概念

(1)什么是中断

在主程序运行过程中,

出现了特定的中断触发条件(中断源)

使得CPU暂停当前正在运行的程序,

转而去处理中断程序

处理完成后又返回原来被暂停的位置继续运行

(中断就是停下手头的东西,做另外的事情,完成事情后,回来继续做手头的东西)

(2)中断优先级

当有多个中断源同时申请中断时,

CPU会根据中断源的轻重缓急进行裁决,

优先响应更加紧急的中断源

(3)断嵌套

当一个中断程序正在运行时,

又有新的更高优先级的中断源申请中断,

CPU再次暂停当前中断程序,

转而去处理新的中断程序,

处理完成后依次进行返回

(套娃)

中断来的时间点,叫断电

保留现场,去做中断程序

做完中断程序,回来恢复现场

这个保留现场和恢复现场的操作,C语言的编辑器会自动帮我们做好的

(比用汇编好多了,汇编要保留现场,手动进行堆栈操作,恢复现场要手动出栈操作)

2·外部中断含义

Extern interrupt的缩写

EXTI监测GPIO的电平信号         

当电平发生变化时,EXTI向NVIC发送中断请求,

经过NVIC裁决后,中断CPU程序,使CPU执行EXTI对应的中断程序

2·专业名称

3·触发方式:

上升沿  、  下降沿  、 双边沿  、 软体设置(对于STM32而言)

4·触发响应方式: 中断响应,事件响应 

中断响应:CPU暂停当前任务转而执行中断函数里的程序。

事件响应 :CPU暂停当前任务转而触发其它外设操作。

中断响应,触发中断;

事件响应,不会触发中断,触发外设操作,属于外设之间的联合工作;

5·GPIO选择

支持所有GPIO口,但是相同pin口,不能同时触发中断

(因为相同的Pin口是占相同的EXTI通道的,例如PA0和PB0是同样中断通道EXTI0)

5·中断通道

多少个PIN口,一般就有多少个,根据手册还可以增加很多

譬如STM32:

16个GPIO_Pin、PVD输出、RTC闹钟、USB唤醒、以太网唤醒

6·中断向量表

有些手册,会列出表格,说明中断资源,如下(STM32)

如上,灰色部分是内核的中断,复位中断、监测CPU电源中断等等。

我们能利用的中断资源,白色即外设中断,EXIT0、EXIT1、EXIT2、EXIT3.....这些才是

每个中断,后面有个地址

我们中断函数是编辑器自动分配的,不固定,注意这不是中断函数的地址

这个地址,是中断跳转的地址

由于硬件的限制,只能跳转到固定的地址执行程序
所以为了跳到不固定的中断函数

这里就需要在内存定义一个地址列表

这个列表的地址是固定的

中断发生后,就跳到这个固定地址

通过编译器,加上一条跳转到中断函数的代码

这样,中断跳转,就能跳到任意位置,执行对应的程序

这个中断地址,就是中断向量表。

(相当于中断跳转的一个跳板,中断来了,先来到这地址,之后再跳到中断函数)

(C语言编程,就不用管中断向量表,编译器已经帮我们做好了,比汇编好太多了...)

7·NVIC嵌套中断向量控制器

1.作用:统一分配中断优先级别、管理中断的

(NVIC是一个内核外设,是CPU的小助手,CPU主要用来运算,需要个助手管理中断)

如下通道有个n,相当于一个中断占用n个中断通道口

NVIC把多种中断,优先级别分组,逐个给到CPU

2.NVIC优先级别分组

响应优先级:中断B很紧急,中断A一旦完成后,立马到中断B,相当于插队

抢占优先级:中断B很急,中断A在做也要停下来,立马到中断B,中断B完成后,再继续中断A,这种霸道的做法,别人停下来自己先做,别人才能继续做。(嵌套中断)

3.NVIC区分优先级

由优先级寄存器(4位,0~15)决定

切开

高n位:抢占优先级

低n-4位:响应优先级

4.优先级顺序

抢占优先级高的可以中断嵌套,

响应优先级高的可以优先排队,

抢占优先级和响应优先级均相同的按中断号排队

5.中断号

如下黄色,数值越小,级别越高 

所以中断没有什么先来后到,只有级别高的先响应。 

NVIC优先级分组,区分 抢占优先级  和 响应优先级 的位置

8·EXIT结构

例如STM32,通道有16个GPIO_pin,

外加PVD输出,RTC闹钟,usb唤醒,以太网唤醒(这四个了解就行,不常用)

每个GPIO外设都有16个引脚

9·AFIO中断引脚选择

每个GPIO都有16个引脚

但是通道只有16个GPIO通道,显然不够用,这时候,就需要AFIO,是一个数据选择器

PA0/PB0/PCO,都是要经过EXIT的通道0的

但是只有一个通道

通过AFIO,选择只有一个譬如PA0经过通道0

其他的PB0/PC0就不能经过通道0了

这就是前面说的相同的pin不能同时触发中断

 通过AFIO后,进入EXIT边沿检测及控制,检测一下触发条件,

之后分配到EXIT10~ETH,给NVIT,用来触发中断

注意STM32,EXIT9-5是触发同一个中断函数,15~10触发同一个中断函数,可能是为了节约资源

所以在编辑这两个中断函数时候,通过标志位区分那个是EXIT9,哪个是EXIT8,哪个是7等等

有20条输出线,输出到其他外设,这个就是之前说的事件响应,譬如ADC转化等

 

1. AFIO操作

 理解AFIO的位置和作用之后,深入了解AFIO怎么操作

其实AFIO就是一个数据选择器,选择PA0/PB0/PC0其中1个经过通道0,其他通道也是这样操作

 AFIO主要完成两个任务:复用引脚重映射  /   中断引脚选择

复用引脚重映射

把默认复用功能引脚,换到重定义的这个位置,让复用功能在这个引脚实现

2·中断引脚选择

之前介绍,就是GPIO_pin很多个,选定一个通道

譬如PA0/PB0/PC0,都是要经过通道0的,AFIO就能选择一个,

譬如PA0用了通道0,那么PB0/PC0就不能用通道0

10·EXIT框图

从EXIT输出,给到NVIC排序,

那我们看看EXIT内部是怎么区分 中断响应 和 事件响应,怎么触发中断

大概了解一下,知道一下即可,主要是会自己设置对应寄存器

请求挂起寄存器:哪个通道触发中断

终端屏蔽寄存器:控制NVIC是否允许中断

软件中断事件寄存器:确认是中断响应,还是事件响应

EXIT其它寄存器就不用介绍了,字面意思

 11·其它外设

转瞬即逝的信号,需要中断,譬如 旋转编码器 / 对射性红外线感器,有脉冲信号过来,立即进入中断处理;按键有抖动,不好去除,而且按键信号一般维持时间较久,建议不用中断。

1.旋转编码器

用于测量位置 ,速度或旋转方向的装置,当其旋转时候,其输出端可以输出与旋转速度和方向对应的方波信号,读取方波信号的频率相位信息,即可得知旋转轴的速度和方向。

光栅编码器

编码盘转动,红外传感器的红外光就会出现遮挡、透过、遮挡的现象

对应输出电平,出现高低电平交替的方波

角度:方波的个数

转速:方波的频率

方式:捕获下降沿,以此判断角度和转速

缺点:只能测量角度和转速,不能区分正装反转(下一个介绍的可以)

机械触点式编码器

金属触点正向旋转和反向旋转,相位相差90°,这种相位相差90°的波形,叫 正交波形。

相位滞后:正向

相位滞前:反向

霍尔传感器式编码器

(简单了解)

中间圆形磁铁,边上有两个错开的霍尔传感器,转动时,经过传感器,产生正交波形

独立编码器

(简单了解)

可测速和方向

运用场景:

非接触式的例如霍尔传感器式、独立编码器,常用于电机测速。

 详解

旋转编码器电路

电路分析:

在没有旋转时候,A点为高电平,转动时,导通接地,A点变成低电平 ,B点同理

C1是滤波电容,过滤一些信号抖动  

注意:查看内核外设的手册,应该看Cortex-M3,例如查看NVIC是内核外设

重要的是把东西消化掉,要会看手册,知道能做的事情。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值