嵌入式开发系列006-中断

一、中断流程:

 中断流程大致可分为9步:

1.执行主程序;

2.发生中断;

3.暂停主程序;

4.保存主程序状态;

5.跳转中断任务;

6.执行中断任务;

7.返回主程序;

8.恢复主程序状态;

9.继续执行主程序

二、中断和异常

中断的框架由内核设计者ARM设计,ARM为Cortex m3内核设计了256种中断。但大多数的MCU都用不到这么多中断,比如STM32F103系列就最多只有70个异常和中断,其中前十个是系统异常,后面60个是外部中断。

通常我们把cpu内部产生的紧急事件叫做异常,譬如非法指令(像除零、地址访问越界等。而把来自cpu外部的片上外设产生的紧急事件叫做中断,比如GPIO引脚电平产生一个变化,定时器溢出等。

异常和中断的效果是基本一致的,都是暂停当前任务,优先执行紧急事件。因此,一般将中断和异常统称为中断。

三、中断向量表

stm32f103xb.s里面涉及到中断向量表,可以看到具体这款芯片支持的中断信息。这个中断向量表定义了所有中断处理函数。当外设发生中断时,则跳到中断向量表中对应中断处理函数的位置。比如发生了SPI1中断事件,则跳到SPI1_IRQHandler这里执行。

 

如此多的中断导致了一些新的问题,比如

  1. 两个中断同时发生,应该先执行哪一个中断?
  2. 一个中断发生了,又来了一个更紧急的中断,是该继续执行原来的中断,还是执行新的紧急?

针对这些问题,Cortex M3内核有一个专门管理中断的外设NVIC,中文名叫嵌套向量中断控制器。通过优先级,控制中断的嵌套和调度。NVIC是个总的中断控制器,无论是来自于内核的异常,还是外设的外部中断,都由NVIC进行统一的管理。

在中断向量表里面,前三个是复位,NMI硬件异常,它们的优先级是负数,表示固定不可以设置优先级,剩下的异常或中断都可以通过修改MIC的寄存器调整优先级,但不能设置为负数。优先级数字越小,表示它的优先级越高。

四、抢占优先级、子优先级

优先级由抢占优先级和子优先级组成,每个中断都需要指定这两级,具有高优先级的中断可以打断低优先级的中断,实现中断的嵌套。抢占优先级决定是否可以嵌套;子优先级决定中断响应顺序。假如有四个中断。

 

1.假设irq1产生了中断,随后irq2产生,由于irq2的抢占优先级比irq1的优先级高,因此irq2就抢断了irq1,先执行irq2,执行完后再继续执行irq1;

2.irq1继续执行过程中,随后irq3产生,由于irq3的抢占优先级也是1相同,想着不会形成嵌套关系,尽管irq3的子优先级0比irq1的高,irq3也必须在等irq1执行完后采取执行;

3.如果irq1和irq3同时产生,它们的抢占优先级相同,irq3的子优先级比irq1的高,因此此时是irq3先执行;

4.如果irq1和irq4同时产生,它们的抢占优先级和子优先级都相同,就根据它们在中断向量表的默认位置来决定。靠前的位置就先执行。

五、EXIT管理GPIO中断

MCU的中断由NVIC进行管理,从而实现了中断的优先级。相比较于ADC,SPI,I2C等中断直接由NVIC管理,GPIO不同之处在于GPIO中断会先被EXIT(External Interrupt/Event Controller,外部中断/事件控制器)处理再由NVIC管理,

为什么要给EXIT先处理一下?这是因为STM32的GPIO支持中断模式和事件模式。中断模式是指外部信号产生电平变化时触发中断,执行中断服务函数完成对应的操作。事件模式是指外部信号产生电平变化时,根据电路完成adc或者定时器相关的 操作。中断和事件的产生源都是一样的,中断需要编程实现自定义的功能,而事件是由硬件触发后执行相应的操作。前者需要cpu参与实现功能,可以自定义功能,比如产生中断按键,控制led灯的亮度,后者无需cpu的参与,比如发生按键中断会自动启动adc采集,具有更高的响应速度。

芯片外部中断引脚较多,而CPU内部中断较少,怎么分配中断?这就引入了中断线的概念,也就是同组的GPIO共享一条中断线。如图中

1.PA0~PG0这一组GPIO硬件电路上对应EXIT0,PA1~PG1这一组GPIO硬件电路上对应EXIT1;

2.PA0~PG0这一组中,PA0作为中断源后,PB0~PG0都不能做中断源,否则无法确认是谁产生的中断。

 [参考:百问网(www.100ask.net)]

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值