精华内容
下载资源
问答
  • STM32中断系统 基本概念 一、日常生活中中断 *图片来源网络 二、处理器中中断 在处理器中,中断是一个过程,CPU在正常运行过程中,遇到内部/外部紧急事情需要处理,那么这个时候先终止当前程序执行,转...

    STM32中断系统

    基本概念

    一、日常生活中的中断

    图篇来源网络
    *图片来源网络

    二、处理器中的中断
    • 在处理器中,中断是一个过程,CPU在正常运行的过程中,遇到内部/外部的紧急事情需要处理,那么这个时候先终止当前程序的执行,转而去处理内部/外部的紧急事件,当这些事情被处理完成之后,再返回刚才被打断的地方继续往下执行程序。
    • 意义:能够提升CPU的效率,同时能对突发事件作出实时处理,实现程序的并行化、嵌入式系统进程之间的切换
    • 相较于轮询(按照一定的频率和周期不断地检测某些事件的发送),中断在处理一些偶然发生的事情效率会比较高,相较于一些不常发生的偶然的事件,采用轮询的方式比较消耗CPU的资源,会大大降低了CPU的效率
    三、中断处理过程

    进入中断

    • 中断发生,处理器自动保存现场到堆栈里,当这些寄存器的状态和参数入栈结束后,中断服务子程序开始执行

    退出中断

    • 中断前的现场被自动从堆栈中恢复,一旦出栈完成,继续执行被中断打断的指令
    四、NVIC(嵌套向量中断控制器)

        ARM Crotex-M3内核支持256个中断(16个内核和240个外部)和可编程256级中断优先级的设置,但是STM32并没有完全使用M3内核的东西,它只有84个中断,包括16个内核中断和68个可屏蔽中断 。
        这么多中断,如果有两个同时发生,这个时候就需要根据一定的规则,进行先后顺序的选择。而这正是NVIC(嵌套向量中断控制器)存在的意义,他用于为中断分组,从而分配抢占优先级和响应优先级。
        这里介绍一下什么是抢占优先级和响应优先级:
        STM32中有两个优先级的概念:抢占优先级响应优先级,每个中断源都需要指定这两种优先级,具有高抢占优先级的中断可以在低抢占优先级的中断处理过程中响应。这个过程叫中断嵌套。当两个中断源的抢占优先级相同时,这两个中断就没有嵌套关系了,只有按照先后顺序执行。
        如果两个中断源同时到来时,那么NVIC(嵌套向量中断控制器)就会根据他们的响应优先级的高低来决定先处理哪个优先级,如果抢占优先级和响应优先级都一样,就会根据他们在中断向量表中的排位顺序决定先处理哪一个。

    五、EXTI(外部中断控制器)

        相较于其他的外设,GPIO的中断是由EXTI控制的,他是以组为单位设计的,所有GPIOx的0管脚是一个,1管脚是一个…,每一组使用一个中断标志位EXTIx。例如GPIOA0,GPIOB0,GPIOC0,GPIOD0,GPIOE0,GPIOF0,GPIOG0是一组,他们由EXTI0控制。这里需要注意的是,EXTI0~EXTI4这5个外部中断有着各自单独的中断响应函数,EXTI5-9共用的一个中断响应函数,EXTI10-15共用的一个中断响应函数。

    展开全文
  • 计算机组成真好难,考试要考,看一看视频,做个简单总结,以备不时之需。看是mooc刘宏伟老师课课程链接 指令:CPU能够识别执行就是指令 指令格式应该既能给出足够信息,其长度又尽可能与机器字长匹配,...

    计算机组成真的好难,考试要考,看一看视频,做个简单总结,以备不时之需。看的是mooc刘宏伟老师的课课程链接

    指令:CPU能够识别执行的就是指令
    指令格式应该既能给出足够的信息,其长度又尽可能的与机器字长匹配,以便节省存储空间,缩短取指时间,提高机器的性能

    操作码:不仅告诉机器做什么,还告诉机器对哪些数据进行操作,操作码的长度是可以是固定的也可以变化的,固定是为了更好的译码,不固定我猜是为了扩大寻址范围,且听我慢慢道来

    操作码

    有几个A就是第N地址
    如果是固定长度的话,4位操作码,三地址指令,可以保存2^4也就是16个三地址指令,但是要-1是15个三地址指令,最后一位要保留一下因为后面也要保存二地址指令,1111这个就保留下来给二地址指令了。
    在这里插入图片描述
    二地址指令,8位操作码了,可以看到1111作为保存地址,1111是开头,后面还是2^4个二地址指令,一地址指令和零地址依次类推
    在这里插入图片描述
    注:为什么要保留一个指令,我直接使用不行嘛?我个人认为是因为A1或A2或A3是地址码里面本身也保存着01二进制,如果不用一个特殊的作为开头,译码器也不知道这是一个三地址指令还是一个二地址指令。

    三地址再多保留一位,二地址指令就能多2^4个了
    在这里插入图片描述

    地址码

    这是四地址,实际上取下一条指令是用PC来取的,每一个地址码决定了寻址的范围、访存的次数。
    在这里插入图片描述
    减少一个操作数地址,寻址范围就增大,下图是让PC来取下一条指令,可以看到寻址范围明显变大了

    在这里插入图片描述
    又减少一个地址码,寻址范围再次增大,一开始相当于int a3 = a1 + a2;现在是a1 += a2;
    在这里插入图片描述
    在寄存器中选一个数做操作,又可以减少一个指令,增大寻址的范围
    在这里插入图片描述

    指令的字长取决于

    • 操作码的长度
    • 地址码的个数
    • 地址码的长度

    最后的总结
    在这里插入图片描述

    操作数

    操作数又是个啥东西?

    操作数可以是

    • 地址,无符号数(绝对地址),有符号数(相对地址)
    • 数字
    • 字符
    • 逻辑数

    完成一条指令的4个周期

    • 取指周期
    • 间址周期
    • 执行周期
    • 中断周期
      并不是每条指令都有这个周期,比如非访存的指令或者不是间址寻址的方式,或者没有中断信号,可能只有2个周期。

    举个例子说下执行周期,是访存指令,add操作

    在这里插入图片描述

    IR(指令寄存器)告诉MAR(地址寄存器)X的内存地址,CU(控制单元)发出R(读操作),就去内存中读这个,读到里面的操作数就返回给MDR(数据寄存器),ACC(累加寄存器)加上这个数再给ACC,相当于 acc += x;

    微程序控制的基本概念

    微操作还是以加法指令为例子,加法指令有4步(取指令、计算地址、取数、加法运算),这4步就是4个微操作,一步就是一个微操作

    微指令多个微操作就是一个微指令,比如取指令和计算地址他俩假设可以合并成一个东西,我们称这个东西为微指令。相当于部分微操作的集合

    微程序多个微指令集合构成的东西,我们称之为微程序

    控制存储器微程序存放在专用的存储器中(一般是ROM中),主要存放控制命令与下一条执行微指令地址。

    注意尽管ROM还是叫只读存储器,但是现在不只可读还可写呢,以前的ROM是叫只可读存储器,随着技术的发展,出现了PROM(可编程只读存储器),EPROM(可擦可编程只读存储器),等等…

    中断

    中断是由I/O设备或其他非预期的急需处理的事件引起的,它使CPU暂时中断现在正在执行的程序,而转至另一服务程序去处理这些事件。

    中断源引起中断的事件,即发出的中断请求的来源,称为中断源

    中断优先权多个中断,根据中断优先级来判断先响应那个。

    禁止中断产生中断源后,由于某种条件的存在,CPU不能中止现行程序的执行,称为禁止中断。我的理解:比如在执行一条指令的时候,这条指令必须执行完才能再去执行下一条指令或者响应中断,这个时候就要禁止中断了。

    中断屏蔽
    产生中断请求后,用程序方式有选择的封锁部分中断,而允许其余部分中断仍得到响应,称为中断屏蔽

    中断有优先级,中断的优先级(响应优先级)不可能改变,那如何保证优先级呢?通过处理优先级的方法来改变谁先执行,这不就相当于了屏蔽了一些中断请求嘛。

    中断向量
    产生了中断,要去执行产生中断源的指令,咋执行啊?要有一个入口地址吧,这个地址称为中断服务程序入口地址啊。怎么找这个入口地址呀?根据中断向量地址找到中断服务程序的入口地址

    多重中断
    有A B C D优先级,假设A最高D最低,优先级从左到右依次递减,D来了执行D中断,这时候A也来了,D中断中断,执行A

    关中断
    硬件自动实现的。因为要保护断点和现场,在保护现场中,即使有更高级的中断源申请中断,CPU也不应该响应的。不然断点和现场保存不恢复,执行完中断以后,中断之前的那个程序还咋跑啊,所以关中断是有必要的。

    开中断
    关完了中断,保存完断点和现场之后当然要去打开了去执行中断服务程序啦,按照中断优先级来进行服务

    断点
    再处理完中断服务程序之后要正确的返回中断点,要把当前的PC(已经保存的是运行程序的下一条指令了)中的内容(断点)保存起来

    现场
    要保存寄存器的内容、程序状态字、中断屏蔽寄存器

    中断流程图,如图所示
    在这里插入图片描述

    展开全文
  • 概念: cpu:特指处理器核心,而不是处理器封装,因为很多处理器将桥芯片和内存控制器芯片都封装在...外设芯片也可以处理数据,因此和cpu在功能上是对等,GPU概念的提出加深了我们对这种对等性理解。cpu是相对...

    概念: 
    cpu:特指处理器核心,而不是处理器封装,因为很多处理器将桥芯片和内存控制器芯片都封装在一起,造成一种误解,实际上处理器核心并不包含这些内容。
    外设:带有处理逻辑的集成电路核心。

    一、CPU和外设芯片

    1、功能对等性和地位的不平等 
    外设芯片也可以处理数据,因此和cpu在功能上是对等的,GPU概念的提出加深了我们对这种对等性的理解。cpu是相对比较通用的芯片,而外设呢是功能比较专一的芯片。有时候,外设在某方面的处理能力要远远高于cpu。
    冯.诺依曼机器是以处理器即CPU为中心的,因此在编程层面上cpu和外设是不平等的。由于历史原因,在那个年代,计算机主要用于科学计算,cpu足以胜任全部任务,因此外设几乎是不存在的,加上设计的简单性,软件指令统一由cpu发出和执行,因此软件意义上的不平等是历史原因和设计原因造成的。
    2、通信机制 
    不管怎样,外设连接于系统上,cpu和外设必然需要相互通信。由于编程的不平等性,一般意义上所有指令由cpu发出,cpu可以主动读写或者操作外设,而外设却很难直接操作cpu,因此提出中断的概念。外设通过硬件逻辑,而不是软件逻辑(软件逻辑一般全部由cpu负责)来通知cpu有事情要做,cpu必然需要一种机制被动得到这种通知,这就是中断。
    二、主板架构 
    1、以cpu为中心 
    由于历史原因和设计原因,主板都是以cpu为中心的,然后通过硬件连线逻辑连接各种外设。最简单的连接方式就是外设们和cpu连接在一条共享的线路上(由于它们的平等性)。
    2、以各种桥连接各种总线
    然而外设们的速率和通信协议彼此并不一定相同,和cpu之间的协议也有所不同,那么必然需要一种设备来进行协议转换和数据缓冲,以适配速率不同,协议不同的各种外设之间以及外设和cpu之间的通信。因此提出总线的概念,连接在一种总线上的所有设备的速率和底层通信协议是一致的。
    3、外设连接在各种总线上 
    相同协议和相同速率的外设连接在一类总线之上。注意,系统中某一种总线并不一定只有一条,每一条总线(注意,不是一种,而是一条)都定了一个地址空间,也就是一个地址命名空间,在这个意义上,cpu访问的地址x和pci设备的地址x并不是一个地址,因此桥设备必须可以提供一个地址映射机制,可以将一端的地址映射到另一端的y(可以直接等于x,然而意义却不一样)。
    4、中断引脚 
    cpu核心为了可以被外设中断,它必须有一个中断引脚。外设为了可以中断cpu,也必须有一种机制使它和cpu中断引脚直接或者间接相连接。
    4.1、基于硬连线的中断
     
    外设要想能中断cpu,最直接的方式是引出一根线,和cpu的唯一的中断引脚相连,然而cpu只有一个引脚,所以cpu需要在后续的总线周期中查询是谁发送了中断信号,因此外设需要有机制告知这个信息,这个信息就是中断向量号,然而很多设备会共享一个向量号,这就需要cpu在基于中断向量号的中断处理程序中遍历所有的设备进行确认了。
    5.协议软化 
    早期很多的总线都是并行的,芯片除了片选引脚外,地址线/数据线都是并行的,这样的话不利于通信协议的更改,因为并行总线的通信协议(总线事务)完全基于时序,而时序是硬件设计时定义的,比如对于地址/数据复用线,第一个总线周期发出地址,然后后续周期发出数据等,这些都是硬连线确定的,另外,并行线路,频率越高干扰越大,离得越近干扰越大,然而事情却在向高频,小型化发展,这明显是一个矛盾,因此设计出了串行总线,将处理逻辑集中于芯片,总线线路只负责传输基于frame的数据,这就是协议软化,也叫总线事务软化。当需要更新协议的时候,只需要更换芯片即可,线路无需更改。
    5.1、基于消息的中断 
    pci/pcie总线使用基于消息的中断,即msi/msi-x,这种中断机制无需设备的中断线引脚,只需要在串行总线发出一个中断事务,然后会有芯片接管这个事务,这个事务消息中有中断向量号信息,然后该芯片会代理设备向cpu发出中断事务,具体如何向cpu转发设备的中断,有很多种方式,一种古老的方式用于使用8259的系统中,8259会向cpu的intr引脚发送中断,然后到cpu查询向量号的时候8259会将从msi中得到的向量号发给cpu。一种更新的方式是使用apic,msi向一个存储器地址空间写一个中断消息,该地址在pcie桥处被转换为cpu的存储空间地址,该地址就是local-apic的映射地址,然后在fsb上发送中断事务,由于地址被映射到处理器封装中的local-apic,该事务被local-apic接管,然后local-apic再向处理器核心即cpu发送中断。这种方式完全由消息事务完成,丝毫不需要任何硬连线。
    三、系统软件相关 
    系统软件并不仅仅是操作系统,实际上操作系统并不直接管理硬件。fireware和硬件接口,而操作系统和用户接口。
    1、fireware定义硬连线拓扑 
    这种fireware和主板硬件接口,在x86平台上,这种fireware称为bios,在bios定义了丰富的信息。主板上电后,bios执行,bios中保存了E820映射信息,也就是cpu的地址空间的什么地址映射到什么总线,接下来的一种可能实现是bios根据这些信息检测并初始化总线设备,实际上是一种遍历,为各个设备分配基地址,也就是写入配置空间基地址信息。这些信息由操作系统读出并使用。(当然也可以将这信息写死到设备的rom中)
    2、操作系统 
    和用户接口,操作完全是为了管理用户进程的,它对硬件的管理完全是基于fireware的。操作系统根据fireware的信息得到主板拓扑信息,设置中断向量,得到设备的基地址等信息。
    附:软化 
    不知以太网以及tcp/ip的设计思想有没有影响主板设计,以太网的802.3设计就是一个串行协议设计的成功例子,tcp/ip的设计也是类似的一个例子,网络协议的设计几乎都是串行的,这和计算机早期的并口不同,串口有着简单性和抗干扰性的优点,这点意义上,双绞线最终淘汰了并口线,同轴线等...
    不管怎样,串行线路是软的,而不像并行线路那样硬,这样就可以将处理逻辑集中于端点而不是线路本身,比如再也不用定义哪根线是数据准备好信号,那些根线是地址信号了,只需要定义一个frame的格式,然后按照这个格式发送数据就可以了,这样在串行线路上,甚至都不再区分什么地址线和数据线了,地址和数据都包含在数据包本身了,这样分层协议和封装协议就容易设计出来了,芯片本身使用软件或者硬件处理数据包,和线路没有关系,正如ipv6的数据包和ipv4的包都可以跑在一条线路上一样,虽然它们的地址信息一点都不同。
    串行线路将更多的事交给了端点的软件或者硬件,这就解耦了线路和线路载荷。一般意义上,并行线路在低频率时钟情况下比串行线路快,然而当这种优势达到极端时,当时钟频率发展到使并行线路不再可以提升性能时反而降低性能时,串行线路取代了并行了线路,此时由于时钟频率足够高,串行线路也已经足够快了,前仆后继,善莫大焉!我们的主板将越来越像一个网络了,实际上,最终,我们的互联网和主板将归于一种设计,那就是串行线路连接各端点。人们一直以为软件处理效率不如硬件直接处理,说不定最终接替摩尔定律的恰恰的软件的设计思想而不再是单纯的硬件,这里的软件并不是编程意义上的软件,而是设计意义上的软件,也就是将处理逻辑集中于端点的设计思想。
    笑声中说一句,串行总线中可以轻松实现中断的动态配置,操作系统可以参与中断向量的配置,而在并行线路中,操作系统只能使用fireware的信息。


     本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1271081


    展开全文
  • 单片机的中断系统

    2012-03-11 21:46:00
    有关单片机中断系统的概念:什么是中断,我们从一个生活中的例程引入。你正在家中看书,突然电话铃响了,你放下书本,去接电话,和来电话的人交谈,然后放下电话,回来继续看你的书。这就是生活中的“中断”的现象,...

    有关单片机中断系统的概念:什么是中断,我们从一个生活中的例程引入。你正在家中看书,突然电话铃响了,你放下书本,去接电话,和来电话的人交谈,然后放下电话,回来继续看你的书。这就是生活中的“中断”的现象,就是正常的工作过程被外部的事件打断了。仔细研究一下生活中的中断,对于我们学习单片机的中断也很有好处。

    第一、什么可经引起中断,生活中很多事件能引起中断:有人按了门铃了,电话铃响了,你的闹钟闹响了,你烧的水开了….等等诸如此类的事件,我们把能引起中断的称之为中断源,单片机中也有一些能引起中断的事件,8031中一共有5个:两个外部中断,两个计数/定时器中断,一个串行口中断。

    第二、中断的嵌套与优先级处理:设想一下,我们正在看书,电话铃响了,同时又有人按了门铃,你该先做那样呢?如果你正是在等一个很重要的电话,你一般不会去理会门铃的,而反之,你正在等一个重要的客人,则可能就不会去理会电话了。如果不是这两者(即不等电话,也不是等人上门),你可能会按你常常的习惯去处理。总之这里存在一个优先级的问题,单片机中也是如此,也有优先级的问题。优先级的问题不仅仅发生在两个中断同时产生的情况,也发生在一个中断已产生,又有一个中断产生的情况,比如你正接电话,有人按门铃的情况,或你正开门与人交谈,又有电话响了情况。考虑一下我们会怎么办吧。

    第三、中断的响应过程:当有事件产生,进入中断之前我们必须先记住现在看书的第几页了,或拿一个书签放在当前页的位置,然后去处理不一样的事情(因为处理完了,我们还要回来继续看书):电话铃响我们要到放电话的地方去,门铃响我们要到门那边去,也说是不一样的中断,我们要在不一样的地点处理,而这个地点常常还是固定的。计算机中也是采用的这种办法,五个中断源,每个中断产生后都到一个固定的地方去找处理这个中断的程序,当然在去之前首先要保存下面将执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序。具体地说,中断响应能分为以下几个步骤:1、保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈。2、寻找中断入口,根据5个不一样的中断源所产生的中断,查找5个不一样的入口地址。以上工作是由计算机自动完成的,与编程者无关。在这5个入口地址处存放有中断处理程序(这是程序编写时放在那儿的,如果没把中断程序放在那儿,就错了,中断程序就不能被执行到)。3、执行中断处理程序。4、中断返回:执行完中断指令后,就从中断处返回到主程序,继续执行。究竟单片机是怎么样找到中断程序所在位置,又怎么返回的呢?我们稍后再谈。

    MCS-51单片机中断系统的结构:
    5个中断源的符号、名称及产生的条件如下。
    INT0:外部中断0,由P3.2端口线引入,低电平或下跳沿引起。
    INT1:外部中断1,由P3.3端口线引入,低电平或下跳沿引起。
    T0:定时器/计数器0中断,由T0计满回零引起。
    T1:定时器/计数器l中断,由T1计满回零引起。
    TI/RI:串行I/O中断,串行端口完成一帧字符发送/接收后引起。
    整个中断系统的结构框图见下图一所示。

    点击浏览下一页
    <51单片机中断系统结构>

    如图所示,由与中断有关的特殊功能寄存器、中断入口、次序查询逻辑电路等组成,包括5个中断请求源,4个用于中断控制的寄存器IE、IP、ECON和SCON来控制中断类弄、中断的开、关和各种中断源的优先级确定。

    中断请求源:

    (1)外部中断请求源:即外中断0和1,经由外部管脚引入的,在单片机上有两个管脚,名称为INT0、INT1,也就是P3.2、P3.3这两个管脚。在内部的TCON中有四位是与外中断有关的。IT0:INT0触发方式控制位,可由软件进和置位和复位,IT0=0,INT0为低电平触发方式,IT0=1,INT0为负跳变触发方式。这两种方式的差异将在以后再谈。IE0:INT0中断请求标志位。当有外部的中断请求时,这位就会置1(这由硬件来完成),在CPU响应中断后,由硬件将IE0清0。IT1、IE1的用途和IT0、IE0相同。(2)内部中断请求源TF0:定时器T0的溢出中断标记,当T0计数产生溢出时,由硬件置位TF0。当CPU响应中断后,再由硬件将TF0清0。TF1:与TF0类似。TI、RI:串行口发送、接收中断,在串行口中再讲解。2、中断允许寄存器IE在MCS-51中断系统中,中断的允许或禁止是由片内可进行位寻址的8位中断允许寄存器IE来控制的。见下表EAX

    其中EA是总开关,如果它等于0,则所有中断都不允许。ES-串行口中断允许ET1-定时器1中断允许EX1-外中断1中断允许。ET0-定时器0中断允许EX0-外中断0中断允许。如果我们要设置允许外中断1,定时器1中断允许,其它不允许,则IE能是EAX

    即8CH,当然,我们也能用位操作指令SETB EA

    SETB ET1SETB EX1

    来实现它。3、五个中断源的自然优先级与中断服务入口地址外中断0:0003H定时器0:000BH外中断1:0013H定时器1:001BH串行口:0023H它们的自然优先级由高到低排列。写到这里,大家应当明白,为什么前面有一些程序一始我们这样写:

    ORG 0000HLJMP START

    ORG 0030H

    START:。

    这样写的目的,就是为了让出中断源所占用的向量地址。当然,在程序中没用中断时,直接从0000H开始写程序,在原理上并没有错,但在实际工作中最好不这样做。优先级:单片机采用了自然优先级和人工设置高、低优先级的策略,即能由程序员设定那些中断是高优先级、哪些中断是低优先级,由于只有两级,必有一些中断处于同一级别,处于同一级别的,就由自然优先级确定。

    开机时,每个中断都处于低优先级,我们能用指令对优先级进行设置。看表2中断优先级中由中断优先级寄存器IP来高置的,IP中某位设为1,对应的中断就是高优先级,不然就是低优先级。

    XX

    X

    PS

    PT1

    PX1

    PT0

    PX0

    例:设有如下要求,将T0、外中断1设为高优先级,其它为低优先级,求IP的值。IP的首3位没用,可任意取值,设为000,后面根据要求写就能了XX

    因此,最终,IP的值就是06H。例:在上例中,如果5个中断请求同时发生,求中断响应的次序。响应次序为:定时器0->外中断1->外中断0->实时器1->串行中断。

    MCS-51的中断响应过程:

    1、中断响应的条件:讲到这儿,我们依然对于计算机响应中断感到神奇,我们人能响应外界的事件,是因为我们有多种“传感器“――眼、耳能接受不一样的信息,计算机是如何做到这点的呢?其实说穿了,一点都不希奇,MCS51工作时,在每个机器周期中都会去查询一下各个中断标记,看他们是否是“1“,如果是1,就说明有中断请求了,所以所谓中断,其实也是查询,不过是每个周期都查一下而已。这要换成人来说,就相当于你在看书的时候,每一秒钟都会抬起头来看一看,查问一下,是不是有人按门铃,是否有电话。。。。很蠢,不是吗?可计算机本来就是这样,它根本没人聪明。了解了上述中断的过程,就不难解中断响应的条件了。在下列三种情况之一时,CPU将封锁对中断的响应:

    CPU正在处理一个同级或更高级别的中断请求。

    现行的机器周期不是当前正执行指令的最后一个周期。我们知道,单片机有单周期、双周期、三周期指令,当前执行指令是单字节没有关系,如果是双字节或四字节的,就要等整条指令都执行完了,才能响应中断(因为中断查询是在每个机器周期都可能查到的)。

    当前正执行的指令是返回批令(RETI)或访问IP、IE寄存器的指令,则CPU至少再执行一条指令才应中断。这些都是与中断有关的,如果正访问IP、IE则可能会开、关中断或改变中断的优先级,而中断返回指令则说明本次中断还没有处理完,所以都要等本指令处理结束,再执行一条指令才能响应中断。

    2、中断响应过程CPU响应中断时,首先把当前指令的下一条指令(就是中断返回后将要执行的指令)的地址送入堆栈,然后根据中断标记,将对应的中断入口地址送入PC,PC是程序指针,CPU取指令就根据PC中的值,PC中是什么值,就会到什么地方去取指令,所以程序就会转到中断入口处继续执行。这些工作都是由硬件来完成的,不必我们去考虑。这里还有个问题,大家是否注意到,每个中断向量地址只间隔了8个单元,如0003-000B,在如此少的空间中如何完成中断程序呢?很简单,你在中断处安排一个LJMP指令,不就能把中断程序跳转到任何地方了吗?一个完整的主程序看起来应该是这样的:

    ORG 0000HLJMP START

    ORG 0003H

    LJMP INT0 ;转外中断0ORG 000BH

    RETI ;没有用定时器0中断,在此放一条RETI,万一 “不小心“产生了中断,也不会有太大的后果。。

    中断程序完成后,一定要执行一条RETI指令,执行这条指令后,CPU将会把堆栈中保存着的地址取出,送回PC,那么程序就会从主程序的中断处继续往下执行了。注意:CPU所做的保护工作是很有限的,只保护了一个地址,而其它的所有东西都不保护,所以如果你在主程序中用到了如A、PSW等,在中断程序中又要用它们,还要保证回到主程序后这里面的数据还是没执行中断以前的数据,就得自己保护起来。

    中断系统的控制寄存器:
    中断系统有两个控制寄存器IE和IP,它们分别用来设定各个中断源的打开/关闭和中断优先级。此外,在TCON中另有4位用于选择引起外部中断的条件并作为标志位。

    1.中断允许寄存器--IE
    IE在特殊功能寄存器中,字节地址为A8H,位地址(由低位到高位)分别是A8H-AFH。
    IE用来打开或关断各中断源的中断请求,基本格式如下图二所示:

    点击浏览下一页

    EA:全局中断允许位。EA=0,关闭全部中断;EA=1,打开全局中断控制,在此条件下,由各个中断控制位确定相应中断的打开或关闭。
    ×:无效位。
    ES:串行I/O中断允许位。ES=1,打开串行I/O中断;ES=0,关闭串行I/O中断。
    ETl;定时器/计数器1中断允许位。ETl=1,打开T1中断;ETl=O,关闭T1中断。
    EXl:外部中断l中断允许位。EXl=1,打开INT1;EXl=0,关闭INT1。
    ET0:定时器/计数器0中断允许位。ET0=1,打开T0中断;ET0=0,关闭TO中断。
    EXO:外部中断0中断允许位。Ex0=1,打开INT0;EX0=0,关闭INT0.

    中断优先寄存器--IP:
    IP在特殊功能寄存器中,字节地址为B8H,位地址(由低位到高位)分别是B8H一BFH,IP用来设定各个中断源属于两级中断中的哪一级,IP的基本格式如下图三所示:

    点击浏览下一页

    ×:无效位。
    PS:串行I/O中断优先级控制位。PS=1,高优先级;PS=0,低优先级。
    PTl:定时器/计数器1中断优先级控制位。PTl=1,高优先级;PTl=0,低优先级。
    Pxl:外部中断1中断优先级控制位。Pxl=1,高优先级;PXl=O,低优先级。
    PT0:定时器/计数器o中断优先级控制位。PT0=1,高优先级;PTO=0,低优先级。
    Px0:外部中断0中断优先级控制位。Px0=1,高优先级;Px0=0,伤优先级。
    在MCS-51单片机系列中,高级中断能够打断低级中断以形成中断嵌套;同级中断之间,或低级对高级中断则不能形成中断嵌套。若几个同级中断同时向CPU请求中断响应,则CPU按如下顺序确定响应的先后顺序:

    INT0一T0---INT1一T1一RI/T1.

    中断的响应过程

    若某个中断源通过编程设置,处于被打开的状态,并满足中断响应的条件,而且①当前正在执行的那条指令已被执行完
    1、当前末响应同级或高级中断
    2、不是在操作IE,IP中断控制寄存器或执行REH指令则单片机响应此中断。
    在正常的情况下,从中断请求信号有效开始,到中断得到响应,通常需要3个机器周期到8个机器周期。中断得到响应后,自动清除中断请求标志(对串行I/O端口的中断标志,要用软件清除),将断点即程序计数器之值(PC)压入堆栈(以备恢复用);然后把相应的中断入口地址装入PC,使程序转入到相应的中断服务程序中去执行。
    各个中断源在程序存储器中的中断入口地址如下:
    中断源 入口地址
    INT0(外部中断0) 0003H
    TF0(TO中断) 000BH
    INT1(外部中断1) 0013H
    TFl(T1中断) 001BH
    RI/TI(串行口中断) 0023H
    由于各个中断入口地址相隔甚近,不便于存放各个较长的中断服务程序,故通常在中断入口地址开始的二三个单元中,安排一条转移类指令,以转入到安排在那儿的中断服务程序。以T1中断为例,其过程下如图四所示。
    由于5个中断源各有其中断请求标志0,TF0,IEl,TFl以及RI/TI,在中断源满足中断请求的条件下,各标志自动置1,以向CPU请求中断。如果某一中断源提出中断请求后,CPU不能立即响应,只要该中断请求标志不被软件人为清除,中断请求的状态就将一直保持,直到CPU响应了中断为止,对串行口中断而言,这一过程与其它4个中断的不同之处在于;即使CPU响应了中断,其中断标志RI/TI也不会自动清零,必须在中断服务程序中设置清除RI/TI的指令后,才会再一次地提出中断请求。
    CPU的现场保护和恢复必须由被响应的相应中断服务程序去完成,当执行RETI中断返回指令后,断点值自动从栈顶2字节弹出,并装入PC寄存器,使CPU继续执行被打断了的程序。
    下面给出一个应用定时器中断的实例。
    现要求编制一段程序,使P1.0端口线上输出周期为2ms的方波脉冲。设单片机晶振频率
    Fosc=6MHZ.
    1、方法:利用定时器T0作1ms定时,达到定时值后引起中断,在中断服务程序中,使P1.0的状态取一次反,并再次定时1ms。
    2、定时初值:机器周期MC=12/fosc=2us。所以定时lms所需的机器周期个数为500D,亦即0lF4H。设T0为工作方式1(16位方式),则定时初值是(01F4H)求补=FEOCH

    点击浏览下一页

    START:
    MOV TMOD,#01H
    ;T0为定时器状态,工作方式1

    MOV TL0,#0CH
    ;T0的低位定时初值

    MOV TH0,#0FEH
    ;T0的高位定时初值

    MOV TCON,#10H
    ;打开T0

    SETB ET0
    ;1ET0,即允许T0中断

    SETB EA
    ;1EA,即充许全局中断

    AJMP $
    ;动态暂存

    000BH:
    AJMP IST0
    ;转入T0中断服务程序入口地址IST0

    IST0:
    MOV TL0,#0CH
    ;重置定时器初值

    MOV TH0,#0FEH
    ;重置定时器初值

    CPL P1.0
    ;P1.0取反

    RET1
    ;中断返回

    串行端口的控制寄存器:

    串行端口共有2个控制寄存器SCON和PCON,用以设置串行端口的工作方式、接收/发送的运行状态、接收/发送数据的特征、波特率的大小,以及作为运行的中断标志等。
    ①串行口控制寄存器SCON
    SCON的字节地址是98H,位地址(由低位到高位)分别是98H一9FH。SCON的格式如图五所示。

    点击浏览下一页

    SMo,SMl:
    串行口工作方式控制位。
    00--方式0;01--方式1;
    10--方式2;11--方式3。
    SM2:
    仅用于方式2和方式3的多机通讯控制位
    发送机SM2=1(要求程控设置)。
    当为方式2或方式3时:
    接收机 SM2=1时,若RB8=1,可引起串行接收中断;若RB8=0,不
    引起串行接收中断。SM2=0时,若RB8=1,可引起串行接收中断;若
    RB8=0,亦可引起串行接收中断。
    REN:
    串行接收允许位。
    0--禁止接收;1--允许接收。
    TB8:
    在方式2,3中,TB8是发送机要发送的第9位数据。
    RB8:
    在方式2,3中,RB8是接收机接收到的第9位数据,该数据正好来自发
    送机的TB8。
    TI:
    发送中断标志位。发送前必须用软件清零,发送过程中TI保持零电平,
    发送完一帧数据后,由硬件自动置1。如要再发送,必须用软件再清零。
    RI:
    接收中断标志位。接收前,必须用软件清零,接收过程中RI保持零电
    平,接收完一帧数据后,由片内硬件自动置1。如要再接收,必须用软件
    再清零。

    电源控制寄存器PCON

    PCON的字节地址为87H,无位地址,PCON的格式如图六所示。需指出的是,对80C31单片机而言,PCON还有几位有效控制位。
    点击浏览下一页

    SMOD:波特率加倍位。在计算串行方式1,2,3的波特率时;0---不加倍;1---加倍。

    串行中断的应用特点:

    8031单片机的串行I/O端口是一个中断源,有两个中断标志RI和TI,RI用于接收,TI用于发送。
    串行端口无论在何种工作方式下,发送/接收前都必须对TI/RI清零。当一帧数据发送/接收完后,TI/RI自动置1,如要再发送/接收,必须先用软件将其清除。
    在串行中断被打开的条件下,对方式0和方式1来说,一帧数据发送/接收完后,除置位TI/RI外,还会引起串行中断请求,并执行串行中侧目务程序。但对方式2和方式3的接收机而言,还要视SM2和RB8的状态,才可确定RI是否被置位以及串行中断的开放:
    SM2 RB8 接收机中断标志与中断状态
    0 1 激活RI,引起中断
    1 0 不激活RI,不引起中断
    1 1 激活RI,引起中断
    单片机正是利用方式2,3的这一特点,实现多机间的通信。串行端口的常用应用方法见相关章节。

    波特率的确定:

    对方式0来说,波特率已固定成fosc/12,随着外部晶振的频率不同,波特率亦不相同。常用的fosc有12MHz和6MHz,所以波特率相应为1000×103和500×103位/s。在此方式下,数据将自动地按固定的波特率发送/接收,完全不用设置。
    对方式2而言,波特率的计算式为2SMOD·fosc/64。当SMOD=0时,波特率为fm/64;当SMOD=1时,波特率为fosc/32。在此方式下,程控设置SMOD位的状态后,波特率就确定了,不需要再作其它设置。
    对方式1和方式3来说,波特率的计算式为2SMOD/32×T1溢出率,根据SMOD状态位的不同,波特率有Tl/32溢出率和T1/16溢出率两种。由于T1溢出率的设置是方便的,因而波特率的选择将十分灵活。
    前已叙及,定时器Tl有4种工作方式,为了得到其溢出率,而又不必进入中断服务程序,往往使T1设置在工作方式2的运行状态,也就是8位自动加入时间常数的方式。由于在这种方式下,T1的溢出率(次/秒)计算式可表达成:

    点击浏览下一页

    下面一段主程序和中断服务程序,是利用串行方式l从数据00H开始连续不断增大地串行发送一片数据的程序例。设单片机晶振的频率为6MHZ,波特率为1200位/秒。

    ORG 2000H
    ;1200位/秒的定时器初值

    MOV TL1,#0F3H

    MOV TH1,#0F3H
    ;使SMOD=0

    MOV PCON,#00H
    ;T1方式2

    MOV TMOD,#20H

    SETB EA

    CLR ET1
    ;关闭T1中断

    SETB ES
    ;开串行中断

    SETB TR1
    ;开T1定时

    MOV SCON,#40H
    ;串行方式1

    CLR A

    MOV SBUF,A
    ;串行发送

    JNB T1,$
    ;等待发送完

    CLR T1,
    ;清标志

    SJMP $

    ORG 0023H
    ;串行中断入口地址

    MOV SBUF,A
    ;连续发送

    JNB T1,$

    INC A

    CLR T1

    RET1
    ;中断返回

    展开全文
  • 网卡收到来自网络数据时系统给予响应(epoll实现依赖于此中断); 磁盘中断、显卡、声卡等事件响应。 2. 异常: OS被动处理意想不到事件,来源于非法指令、恶意程序或者合法程序执行到了不可预期指令等,...
  • 中断的概念

    2016-09-03 14:29:25
    中断:1. 硬中断是由硬件产生,比如,像磁盘,网卡,键盘,时钟等。每个设备或设备集都有它自己IRQ(中断请求)。基于IRQ,CPU可以将相应请求分发到对应硬件驱动上(注:...在有多核心的系统上,一个中断...
  • 系统调用是由应用程序发起,意思是应用程序主动向操作系统发出服务请求。 异常是由不良应用程序发起,意思是非法指令或者其他坏处理状态,比如内存出错。 中断是由外设发起,它来自于不同硬件设备计时器...
  • 异常:程序行为异常(被动产生,需要操作系统中断后再次执行) 调用:程序请求操作提供服务(主动产生,需要让操作系统提供某些服务) 处理时间: 中断:异步 异常:同步 系统调用:异步或同步 同步和异步...
  • 中断系统

    2020-07-30 09:35:20
    中断系统 1.概述 2.中断基本概念 3.中断请求分类 4.中断请求标记 5.中断判优 6.中断处理过程 7.单重中断与多重中断 8.中断屏蔽技术 9.总结
  • ——————————————...CPU暂时停止当前工作(中断响应),转而去处理事件B(中断服务),待CPU处理事件B完成后,再回到原来事件A被中断的地方继续处理事件A(中断返回)。 ① 中断源 // 5个中断源都有...
  • 操作系统概念学习笔记 2 系统中断

    千次阅读 多人点赞 2015-04-26 13:00:54
    操作系统概念学习笔记 2系统中断概述现代操作系统中断驱动。如果没有进程可执行,没有I/O设备可服务,没有用户可响应,那么操作系统就会安静等待事件发生。事件发生几乎总是通过中断或者陷阱来表征。...
  • 中断系统的原理

    2021-01-16 11:23:47
    一.中断的概念 1.cup在处理某一件事情A时,发生了另外的一件事B请求CPU迅速去处理(中断发生) 2.cpu暂停中断当前的工作,转去处理事件B ...51单片机中的中断系统结构: 5个中断 (1.)通过配置中断标志IEO或者是I
  • 中断概念

    千次阅读 2016-04-01 19:27:57
    一、中断的概念 1、中断产生:CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去...二、中断系统结构 引起CPU中断的根源,称为中断源(中断源有外部触发,定时器中断两种形式)。 中断源向CPU提出的中断请求。 CPU暂时
  • 中断的概念中断处理过程

    千次阅读 2013-05-30 22:17:06
    中断的概念中断处理过程 (1)中断: 在运行一个程序的过程中,断续地以“插入”方式执行一些完成特定处理功能的程序段,这种处理方式称为中断。 (2)中断的作用: ◎并行操作 ◎硬件故障报警与处理 ◎...
  • Linux中有关硬中断和软中断的概念

    千次阅读 2018-04-27 10:30:46
    中断: 1. 硬中断是由硬件产生,比如,像磁盘,网卡,键盘,时钟等。每个设备或设备集都有它自己IRQ(中断请求)。基于IRQ,CPU可以将相应请求分发到对应...在有多核心的系统上,一个中断通常只能中断一颗C...
  • 中断和异常的概念

    千次阅读 多人点赞 2017-11-01 20:43:08
    中断Interruption 异常Exception 在操作系统中引入核心态和用户态这两种工作状态后,就需要考虑这两种状态之间如何切换。...在实际操作系统中,CPU运行上层程序时唯一能进入这些“门”途径就是通过中断或异常。
  • 中断系统的概念和基本结构 CPU正在处理某一程序时,发生了另一突发事件请求CPU迅速去处理(中断发生);CPU暂时停止当前的工作,转到需要处理的中断源的服务程序的入口(中断响应),一般在入口处执行一跳转...
  • 计算机通信是将计算机技术和通信技术相结合,完成计算机与外部设备或者计算机与计算机信息交换。可以分成两个方式:并行通信和串行通信。 二,并行通信,串行通信 1,并行通信:将数据字节各位用多条数据线...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,362
精华内容 1,344
关键字:

中断系统的概念