AVR单片机中断的优点和触发方式控制

AVR(至少是ATmega16)单片机采用固定的硬件优先级方式,不支持通过软件对中断优先级重新设定。三、AVR不支持软件改变中断优先级,即其优先级是固定的。3.软件中断,AVR不支持,好像ARM里面有,可以作为操作系统的中断调用。以上均由硬件自动完成,软件需要做的事情如下:

中断函数只有在中断触发源被触发时才会执行,其他时候不会执行。 如果不使用中断,并且要根据某个端口的变化来执行相应的功能操作,则必须不断查询该端口的信号,中断号,只要端口发生变化,系统就会自动进入中断状态。中断功能。 我想这就是中断的目的和优点。

中断优先级

1)在相同优先级的AVR单片机中,中断向量入口地址越低,其优先级越高。 AVR单片机响应一个中断后,会禁止系统响应其他中断。 如果程序需要在一个中断服务程序中响应其他中断事件,可以在中断服务程序中重新使能全局中断。 否则,AVR微控制器只会在退出中断过程时重新启用全局中断。

2)AVR(至少ATmega16)单片机采用固定硬件优先级方式,不支持通过软件重置中断优先级。

AVR有不同的中断源。 每个中断和复位在程序空间中都有一个独立的中断向量。 所有中断事件都有自己的使能位。 当使能位被置位且状态寄存器的全局中断使能位 I 也被置位时,就会发生中断。

3)AVR单片机的中断优先级只有同时触发中断时才最先处理。 但51单片机中的低级中断不能打断高级中断,而AVR单片机中的低级中断可以。

中断相关寄存器

1.MCUCR——单片机控制寄存器

SM2 SE SM1 SM0 ISC11 ISC10 ISC01 ISC00

Bits 3、2——ISC11、ISC10:中断触发模式控制 1 Bit 1 和 Bit 0

如果 SREG 寄存器的 I 标志位和相应的中断屏蔽位被置位,则外部中断 1 由引脚 INT1 触发。 MCU 在检测边沿之前首先对 INT1 引脚上的电平进行采样。 如果选择边沿触发或电平变化触发,持续时间超过1个时钟周期的脉冲将触发中断,太短的脉冲则不能保证触发中断。 如果选择低电平触发方式,则必须保持低电平,直到当前指令执行完毕。

ISC11 ISC10 描述

0 0 当INT1 为低电平时产生中断请求。

0 1 INT1 引脚上的任何逻辑电平变化都会触发中断

1 0 INT1 下降沿产生异步中断请求

1 1 INT1 上升沿产生异步中断请求

Bit 1,0–ISC01,ISC00:中断 0 触发模式控制位 1 和位 0

如果 SREG 寄存器的 I 标志位和相应的中断屏蔽位被置位,则外部中断 0 由引脚 INT0 触发。 在检测边沿之前,MCU 首先对 INT0 引脚上的电平进行采样。 如果选择边沿触发或电平变化触发,持续时间超过1个时钟周期的脉冲将触发中断,太短的脉冲则不能保证触发中断。 如果选择低电平触发方式,则必须保持低电平,直到当前指令执行完毕。

ISC01 ISC00 说明

0 0 当INT0为低电平时产生中断请求。

0 1 INT0 引脚上的任何逻辑电平变化都会触发中断

1 0 INT0 下降沿产生异步中断请求

1 1 INT0 上升沿产生异步中断请求

2.MCUCSR——单片机控制和状态寄存器

JTD ISC2 – JTRF WDRF BORF EXTRF PORF

Bit 6——ISC2:中断2触发模式控制

如果 SREG 寄存器的 I 标志和 GICR 寄存器的相应中断屏蔽位被置位,则异步外部中断 2 由外部引脚 INT2 激活。 如果ISC2 被写入0,则INT2 的下降沿激活中断。 如果ISC2 被写入1,则INT2 的上升沿激活中断。 INT2 的边沿触发方式为异步。 只要 INT2 引脚上产生大于表 36 所示数据的脉冲宽度,就会触发中断。 如果选择低电平中断,则必须保持低电平直到当前指令完成。

然后就会发生中断。 并且只要将该引脚拉低,就会触发中断请求。 更改 ISC2 时可能会发生中断。 因此,建议先清除寄存器GICR中相应的中断使能位INT2,然后再更改ISC2。 最后,在重新使能之前,不要忘记通过向 GIFR 寄存器中相应的中断标志位 INTF2 写入“1”来清除它。

3.GICR——通用中断控制寄存器

INT1 INT0 INT2 – – – IVSEL IVCE

位 7 – INT1:使能外部中断请求 1

当 INT1 为“1”且状态寄存器 SREG 的 I 标志置位时,相应的外部引脚中断使能。 MCU 通用控制寄存器——MCUCR 的中断灵敏度电平控制1 位1/0(ISC11 和ISC10)决定中断是由上升沿、下降沿还是INT1 电平触发。 只要使能,即使INT1引脚配置为输出,只要引脚电平发生相应变化,就会产生中断。

Bit 6——INT0:使能外部中断请求0

当 INT0 为“1”且状态寄存器 SREG 的 I 标志置位时,相应的外部引脚中断使能。 MCU 通用控制寄存器——MCUCR 的中断敏感电平控制0 位1/0(ISC01 和ISC00)决定中断是由上升沿、下降沿还是INT0 电平触发。 只要使能,即使INT0引脚配置为输出,只要引脚电平发生相应变化,就会产生中断。

位 5 – INT2:使能外部中断请求 2

当 INT2 为“1”且状态寄存器 SREG 的 I 标志置位时,相应的外部引脚中断使能。 MCU 通用控制寄存器——MCUCR 的中断敏感度级别控制位 2 1/0(ISC2 和 ISC2)决定中断是由上升沿、下降沿还是 INT2 电平触发。 只要使能,即使INT2引脚配置为输出,只要引脚电平发生相应变化,就会产生中断。

4.GIFR——通用中断标志寄存器

INTF1 INTF0 INTF2 – – – – –

位 7 – INTF1:外部中断标志 1

当INT1引脚电平发生变化时,触发中断请求,并设置相应的中断标志INTF1。 如果 SREG 的位 I 和 GICR 寄存器相应的中断使能位 INT1 为“1”,则 MCU 跳转到相应的中断向量。 进入中断服务程序后该标志自动清除。 另外,该标志位也可以通过写“1”来清除。

位 6 – INTF0:外部中断标志 0

当INT0引脚电平发生变化时,触发中断请求,并设置相应的中断标志INTF0。 如果 SREG 的位 I 和 GICR 寄存器相应的中断使能位 INT0 为“1”,则 MCU 跳转到相应的中断向量。 进入中断服务程序后该标志自动清除。 另外,该标志位也可以通过写“1”来清除。

位 5 – INTF2:外部中断标志 2

当INT2引脚电平发生变化时,触发中断请求,并设置相应的中断标志INTF2。 如果 SREG 的位 I 和 GICR 寄存器相应的中断使能位 INT2 为“1”,MCU 将跳转到相应的中断向量。 进入中断服务程序后该标志自动清除。 另外,该标志位也可以通过写“1”来清除。 请注意,当 INT2 中断被禁用进入某些睡眠模式时,该引脚的输入缓冲将被禁用。 这会导致 INTF2 标志设置信号发生逻辑变化。

一些要点

1. 中断信号往往是电信号的一些变体,例如

脉冲的上升沿或下降沿

高电平或低电平

水平变化

2. 中断向量

CPU检测到中断请求后,如果中断控制系统允许,CPU会自动转移到执行固定程序空间地址处的指令。

这个固定的地址称为中断入口地址,也称为中断向量。 该地址由微控制器的硬件决定。

一般情况下,该地址不放置具体的程序,仅放置跳转指令,重定向到真正的中断服务程序。

3、AVR不支持软件改变中断优先级,即其优先级是固定的。

4、中断源分为三类:

1.不可屏蔽中断,如复位中断,不能被屏蔽

2.屏蔽中断,大部分中断都是可屏蔽的

3. AVR 不支持软件中断。 看起来它们在ARM中是可用的,并且可以被操作系统作为中断来调用。

5. 中断响应条件

对 A 中断的响应 = 全局中断允许标志 AND 中断 A 允许标志 AND 中断 A 标志

AVR 的全局中断使能标志是其标志寄存器SREG、SREG.7 的I 位。 gcc中打开和关闭的方法是sei()和cli()

中断允许标志。 一般来说,每个中断都会有一个单独的使能标志位,放置在相关的寄存器中。 通过单独设置该位可以打开或关闭相应的中断。

中断标志,一般来说,该标志是由硬件触发的,即一旦满足该条件,该标志就自动变为1,不需要手动设置。

6、中断向量区大小 = 中断源数量 x 每个中断向量占用的字数

7、中断标志位一般在CPU响应中断后自动清除,或者通过在中断服务程序中读写特殊寄存器来清除。

当然,你也可以通过软件清除。 清除方法是往里面写1(这个比较奇怪)

8. 如果中断被禁止或CPU 不能立即响应,中断标志将始终保持。 这称为“暂停”。 一旦CPU可以响应,中断就会按照优先级进行处理。

9. 有些中断没有中断标志,例如配置为低电平触发的外部中断。 只要满足条件,就会向CPU发送中断请求。

这里会出现这样的问题:

1、CPU暂时不响应中断,低电平不再可用,意味着少了一次服务。

2、CPU响应,响应完成,低电平还在,再次服务。

所以设计时要注意

一般情况下,这种低级触发中断方法用于唤醒睡眠模式下的CPU。 具体解决方法请参考。

10、AVR响应中断时,关闭全局中断使能位,不响应其他中断,因此不允许中断嵌套。

当然,你可以在中断服务程序中打开它,但这样做是非常危险的,不建议这样做。

11、中断响应流程如下:

1.清除全局中断

2. 清除特定响应中断标志位。

3、中断断点地址入栈,SP减2。

4. 自动将中断向量地址压入PC并强制执行。

以上都是由硬件自动完成的。 软件需要做的事情如下:

1、中断进入命令:rjmp Reset

2. 中断服务程序

3.返回命令reti

十二,

非常需要注意的是,中断只保存和恢复断点的PC值,并不保护其他寄存器,所以如果在中断服务程序中改变了某些寄存器的值,就很容易出现问题。

因此,中断服务程序应尽可能短,没有不必要的操作,并且一旦sreg损坏,必须先将其压入堆栈。

13. 技能

在使能中断使能位之前,最好先清除中断的中断标志位,然后立即使能使能位。

这样可以避免不必要的错误。 如果之前将该标志更改为1,则会产生错误的中断。

同样,清除标志的方法是向其写入 1。

单片机

树莓派拟明年伦敦上市估值比5亿美元还高

2024-4-27 5:02:49

单片机

32位单片机的常用单片机64位超标量架构详解

2024-4-27 6:03:27

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索