0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

中断是什么 如何使用它们

454398 来源:工程师吴畏 2019-07-31 14:08 次阅读

原理图

中断是什么 如何使用它们

什么是中断?

微控制器编写的简单程序通常都可以在主函数内部完成,并且几乎不需要使用外设。但是,大多数其他微控制器程序更复杂,需要大量代码。当发生这种情况时,中断会变得非常有用,但究竟什么是中断?

想象一下,我们的微控制器需要同时做两件事:准确跟踪时间并使LED闪烁。我们的程序可以通过重置计时器,递增计数器,然后等待计时器溢出来开始。完成后,我们的代码可以使LED闪烁。虽然这有点完成工作,但是有两个问题。 CPU花费大部分时间坐在延迟循环中,这浪费了CPU时间,并且LED的执行时间很难计算。

那么,我们如何解决这个问题呢?我们可以在计时器上使用中断!因此,我们不是在主代码中递增计数器,而是将代码转换为处理时序的中断服务程序。

通常,微控制器将运行LED闪烁代码,但是一旦定时器生成中断请求,微控制器停止LED闪烁代码,执行定时器中断服务程序,然后返回到LED闪烁代码。这样,LED闪烁代码不会干扰我们的定时器代码,它可以更准确(并且更容易)跟踪时间。

AVR Core上的中断

AVR有一个向量表,每个中断源都跳转到一个唯一的地址。这是非常有利的,因为我们不再需要执行比较来查看触发了哪个中断,这可能需要一些时间。

下表显示了Atmega168上可用的不同中断以及它们跳转到的地址。程序记忆。但是,在我们使用它们之前必须配置几个中断选项。

从ATmega168数据表中提取

表位置

Atmega168具有允许的引导加载程序区域它可以动态地重写自己的程序存储器,这对固件更新很有用。因此,ISR向量表将位于内存中很重要。如果表位于引导加载程序区域中,则在启用引导加载程序时永远不会更新(不推荐)。

因此,如果没有引导加载程序,则应将向量表放在内存的底部(接近地址0x0000),但如果使用引导加载程序,则应将向量表移动到引导加载程序上方。这可以通过改变MCUCR寄存器中的几个位来轻松完成。

如果IVSEL = 0,则ISR位于向量表的起始,否则ISR驻留在引导加载程序中。现在,将其保留为0,因为我们没有使用引导加载程序

如果IVCE = 1,则执行ISR切换。暂时保留为0

中断启用位

每个中断源(I/O引脚,外设等)都有关联中断使能位。与PIC类似,STATUS寄存器中有一个全局中断使能位,需要将其设置为允许中断工作。要找出这些中断标志所在的位置,需要参考数据手册中的特定外设章节。

例如,我们将在定时器0上使用溢出中断,所以如果我们看一下定时器0在章节中,我们发现中断使能位位于TIMSK0寄存器(第89页)中,称为TOIE0。需要将此位设置为1才能触发定时器溢出。该寄存器还有另外两个中断源,A匹配溢出和B匹配溢出,这对PWM功能很有用(将来会介绍)。

注意,设置我在SREG中的位不是使用SREG本身,而是使用函数sei();设置I位和cei();清除I位。

在WinAVR中编写ISR

所以我们现在明白需要启用中断才能启动,但我们如何使用C和WINAVR编译器编写?答案很简单:我们使用特殊保留字ISR并传递中断名称参数来告诉编译器哪个中断函数处理。注意我们需要包含中断头文件,否则中断函数将不起作用!

#include

ISR(TIMER0_OVF_vect)

{

// Interestingly, the AVR automatically clears interrupt flags.。。.unlike the PIC

// Put your code here

}

简单闪烁示例

在这个例子中,ATmega168会使连接到PD0的LED频繁闪烁,其中闪烁的速率受到控制通过定时器0但是,您可能会注意到主功能为空,并且LED在定时器溢出中断服务程序(ISR)内闪烁。这意味着我们可以在while循环中放入我们想要的任何代码,并且该代码不会阻止中断运行。

/*

* AVR Interrupt.c

*

* Created: 09/01/2018

* Author : RobinLaptop

*/

// These are really useful macros that help to get rid of unreadable bit masking code

#define setBit(reg, bit) (reg = reg | (1 《《 bit))

#define clearBit(reg, bit) (reg = reg & ~(1 《《 bit))

#define toggleBit(reg, bit) (reg = reg ^ (1 《《 bit))

#define clearFlag(reg, bit) (reg = reg | (1 《《 bit))

#include

#include

ISR(TIMER0_OVF_vect)

{

// Interestingly, the AVR automatically clears interrupt flags =) 。。..unlike the PIC =(

// Toggle the LED (PD0 , Pin 2)

toggleBit(PORTD, PD0);

}

int main(void)

{

// Initialize Registers

clearBit(TCCR0A, WGM00); // Configure WGM to be 0x00 for normal mode

clearBit(TCCR0A, WGM01);

clearBit(TCCR0B, WGM02);

setBit(TCCR0B, CS00); // Configure clock source to be clock io at 1024 pre-scale

clearBit(TCCR0B, CS01);

setBit(TCCR0B, CS02);

DDRD = 0xFF; // Make PORT D and output

sei(); // Enable interrupts

setBit(TIMSK0, TOIE0); // Enable the timer interrupt

while (1)

{

// Put any code you want here

// It should not affect the interrupt service routine!

}

}

结论

教程仅涵盖单个中断,即定时器0溢出中断,但它清楚地表明中断是非常强大。如果使用得当,您可以拥有一个系统,它可以在信号到达时立即响应并暂停主代码。这可以用来做很多事情,包括多任务处理,不同外围设备的多重处理,以及创建实时代码!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 中断
    +关注

    关注

    5

    文章

    884

    浏览量

    41020
收藏 人收藏

    评论

    相关推荐

    CPU中断程序:从硬件看什么是中断

    CPU响应中断转去执行中断服务程序前,需要把被中断程序的现场信息保存起来,以便执行完中断服务程序后,接着从被中断程序的断点处继续往下执行。
    发表于 03-26 11:36 186次阅读
    CPU<b class='flag-5'>中断</b>程序:从硬件看什么是<b class='flag-5'>中断</b>?

    图像采集卡到底是什么?为什么要使用它们

    :图像采集卡到底是什么?它们有什么用?何时以及为什么应该使用它们?为什么要使用图像采集卡?帧或视频采集卡的最初目的是将模拟图片转换为数字信号。由于当今纯数字图像处理技
    的头像 发表于 01-26 16:14 449次阅读
    图像采集卡到底是什么?为什么要使<b class='flag-5'>用它们</b>?

    中断的基础概念

    (1)中断的分类、分组 1-中断触发方式 • ◾edge-triggered: 边沿触发,当中断源产生一个边沿,中断有效 • ◾level-sensitive:电平触发,当
    的头像 发表于 11-07 18:01 393次阅读
    <b class='flag-5'>中断</b>的基础概念

    中断与硬中断介绍

    • 硬中断是由外部事件引起的因此具有随机性和突发性;硬中断是否可以嵌套的,是否有优先级(由硬件设计体系决定)。 • 软中断是执行中断指令产生的,无面外部施加
    的头像 发表于 11-07 17:02 376次阅读

    单重中断与多重中断介绍

    单重中断与多重中断 •单重中断在CPU执行中断服务程序的过程中不能被打断。当有新的更高优先级的中断发生时,正在执行的
    的头像 发表于 10-30 16:46 1615次阅读
    单重<b class='flag-5'>中断</b>与多重<b class='flag-5'>中断</b>介绍

    什么是中断响应次序?什么是中断处理次序?

    什么是中断响应次序?什么是中断处理次序? 中断响应次序和中断处理次序是计算机系统中非常重要的概念,它们有助于确保系统稳定、可靠、高效地运行。
    的头像 发表于 10-24 11:49 1409次阅读

    LIC内核中断挂起位和中断使能

    中断挂起位 PLIC 内核中中断源挂起位的当前状态可以从挂起数组中读取,组织为 32 位的 5 个字。中断 ID 的挂起位存储在字的位中。 因此,U54 内核有 5 个中断挂起寄存器。
    的头像 发表于 10-07 17:57 389次阅读
    LIC内核<b class='flag-5'>中断</b>挂起位和<b class='flag-5'>中断</b>使能

    AXI中断控制器(INTC)v4.1简介

    LogiCORE™ IP AXI中断控制器(INTC)内核接收来自外围设备的多个中断输入,并将它们合并到或中断输出到系统处理器。
    的头像 发表于 10-07 11:45 896次阅读
    AXI<b class='flag-5'>中断</b>控制器(INTC)v4.1简介

    什么是ARM中断事件?ARM中断异常处理具体过程

    ARM处理器是一种流行的处理器架构,用于许多现代移动设备和嵌入式系统中。中断和异常是ARM处理器中的两个重要概念,它们是处理器中断程序执行的关键机制。
    发表于 09-05 15:45 814次阅读
    什么是ARM<b class='flag-5'>中断</b>事件?ARM<b class='flag-5'>中断</b>异常处理具体过程

    定时器中断程序怎么写

    定时器中断程序怎么写  在嵌入式系统中,定时器被广泛应用于各种任务。它们在实时系统中可用于轮询,计时等任务。定时器可以被配置为周期性定时器,非周期性定时器或单次定时器,以执行不同类型的任务。当定时器
    的头像 发表于 09-01 10:17 1145次阅读

    中断是什么?PLC的三大类中断事件

    在200SMART系列PLC中共有三大类中断事件,分别是:I/O中断:I/O 中断包括上升/下降沿中断、高速计数器中断和脉冲串输出
    发表于 06-20 14:11 4425次阅读
    <b class='flag-5'>中断</b>是什么?PLC的三大类<b class='flag-5'>中断</b>事件

    中断是什么,PLC中断,单片机中断,那中断能干什么?

    中断程序连接到定时中断事件时,启用定时中断并且开始定时。连接期间,系统捕捉周期时间值,因此 SMB34 和 SMB35 的后续变化不会影响周期时间。要更改周期时间,必须修改周期时间值,然后将
    的头像 发表于 06-20 14:11 1476次阅读
    <b class='flag-5'>中断</b>是什么,PLC<b class='flag-5'>中断</b>,单片机<b class='flag-5'>中断</b>,那<b class='flag-5'>中断</b>能干什么?

    STC15W408AS单片机外部中断简介

    STC15W408AS单片机有4个外部中断它们分别是:外部中断0(INT0)、外部中断1(INT1)、外部中断2(INT2)、外部
    发表于 06-16 09:40 1923次阅读
    STC15W408AS单片机外部<b class='flag-5'>中断</b>简介

    单片机中断程序是如何被中断的?

    中断一般是由硬件(例如外设、外部引脚)产生,当某种内部或外部事件发生时,MCU的中断系统将迫使 CPU 暂停正在执行的程序,转而去进行中断事件的处理
    的头像 发表于 05-16 14:06 904次阅读
    单片机<b class='flag-5'>中断</b>程序是如何被<b class='flag-5'>中断</b>的?

    什么是端口443,以及如何启用它

    安装SSL证书时,其中一个步骤是选择端口443——HTTPS连接的默认端口。但什么是端口443,以及如何启用它?下面,小编给大家分析下。
    的头像 发表于 05-04 17:02 6318次阅读