精华内容
下载资源
问答
  • 以下是由学习啦小编整理关于什么是时钟中断的内容,希望大家喜欢!时钟中断的电路一种时钟中断检测电路,包括:对输入时钟以不同分度值进行分频并输出多个分频时钟的分频器电路;对输入时钟和多个分频时钟进行“与”...

    在单片机程序设计中,设置一个好的时钟中断,将能使一个CPU发挥两个CPU的功效,大大方便和简化程序的编制,提高系统的效率与可操作性。那么你对时钟中断了解多少呢?以下是由学习啦小编整理关于什么是时钟中断的内容,希望大家喜欢!

    时钟中断的电路

    一种时钟中断检测电路,包括:对输入时钟以不同分度值进行分频并输出多个分频时钟的分频器电路;对输入时钟和多个分频时钟进行“与”操作的“与”电路;将具有最大分度值的分频时钟反相的反相器;对输入时钟中其余分频时钟和反相器输出进行“与”操作的“与”电路;第一和第二开关,具有被提供以各个“与”电路输出的控制端,控制第一和第二电容器放电路径的开/关;第一和第二波形形成缓冲器电路,被提供以第一和第二电容器的端电压;根据延迟电路中使反相器输出延迟预定时间长度所得的选择控制信号选择第一和第二波形形成缓冲器电路的一个输出的选择电路。其通过单输入时钟系统使时钟中断能被检测,集成更容易,并使时钟中断时间能精确地检测。

    时钟中断的举例

    定时器初值与中断周期 时钟中断无需过于频繁,一般取20mS(50Hz)即可。如需要百分之一秒的时基信号,可取10mS(100Hz)。这里取20mS,用定时器T0工作于16位定时器方式(方式1)。T0的工作方式为:每过一个机器周期自动加1,当计满0FFFFh,要溢出时,便会产生中断,并由硬件设置相应的标志位供软件查询。即中断时比启动时经过了N+1个机器周期。所以,我们只要在T0中预先存入一个比满值0FFFFh小N的数,然后启动定时器,便会在N个机器周期后产生中断。这个值便是所谓的“初值”。下面计算我们需要的初值:时钟为6MHz,12个时钟周期为一个机器周期,20mS中有10000个机器周期。(10000)10=(2710)16,则0FFFFh-2710h+1=0D8F0h。由于响应中断、保护现场及重装初值还需要7~8个机器周期,把这个值再加上7,即T0应装入的初值是0D8F7h。每次中断进入后,先把A及PSW的值压入堆栈,然后即把0D8F7h装入T0。

    设置一个单元,每次中断加1 我们可以取内部RAM中一个单元,取名为INCPI(Increase Per Interrupt),在中断中,装完T0初值后,用INC INCPI指令将其加一。从这个单元中,无论中断程序还是主程序,都可以从中获得20mS的1~256之间任意整数倍的信号。例如:有一段向数码管送显的程序,需要每0.5秒执行一次以便刷新显示器,便可以设一单元(称为等待单元)W_DISP,用/MOV A,INCPI/ADD A,#25/MOV W_DISP,A/语句让其比当前的INCPI值大25,然后在每次中断中检查是否于INCPI值相等。若相等,说明已过了25个中断周期,便执行送显程序,并且让W_DISP再加上25,等待下个0.5秒。我们可以设置多个等待单元,以便取出多个不同的时基信号。让中断程序在每次中断时依次查询各个等待单元是否与INCPI相等,若相等,则执行相应的处理,并重新设置该等待单元的值,否则跳过。例如:用0.5秒信号刷新或闪烁显示器,用1秒信号产生实时时钟,或输出一定频率的方波,以一定间隔查询输入设备等。

    在中断中读键 通常,我们在主程序中读键盘,步骤为:扫描键盘,若有键按下,则延时几十毫秒去抖动,再次确认此键确实按下,然后处理该键对应的工作,完成后再次重上述步骤。但这有两点不足:1.处理相应工作时无法锁存按键的输入,即可能漏键。2.延时去抖时CPU无法做其它事情,效率不高。如果把读键放入时钟中断中,则可避免上述不足。方法为:如果两次相邻的中断中都读到同一个键按下,则这个键是有效的(达到了去抖目的),并将其锁存到先入先出(队列)的键盘缓冲区,等主程序来处理。这样,主程序处理按键的同时,仍可响应键盘的输入。缓冲区深度通常可设为8级,若锁存的键数多于8个,则忽略新的按键,并报警提示用户新的按键将无效。若键盘缓冲队列停滞的时间大大长于主程序处理按键所需要的最大时间,说明主程序已出错或跑飞,可以在中断用指令将系统复位,起到了看门狗的目的。

    主程序中的延时 由于有常开的时钟中断,所以当主程序中有需要时间较短、精度较高的延时时,应暂时把时钟中断关闭。而程序中需要时间较长、精度不高的延时时,便可仿照下需的写法,避免多层嵌套的循环延时。

    例:在P1.1输出1秒的高电平脉冲

    MOV A,INCPI

    INC A

    CJNE A,INCPI$ ;等待一次中断处理完成

    SETB P1.1 ;设P1.1为H,脉冲开始

    ADD A,#50 ;50个20mS为1秒

    CJNE A,INCPI,$ ;等中断将INCPI加一50次

    CLR P1.1 ;设P1.1为L,脉冲结束

    下面用MCS-51为例:

    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 0000H

    LJMP START

    ORG 0003H

    LJMP INT0 ;转外中断0

    ORG 000BH

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

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

    时钟中断的评价

    要灵活地应用时钟中断,将任务合理分配给中断和主程序,并且二者要分工明确,接口简单。这其中的技巧还需要大家在实践中多多摸索与体会。另外要注意:应尽量缩短中断处理程序的执行时间,更不要长于20mS。

    看过“时钟中断的举例”的人还看了:

    展开全文
  • 什么是中断

    2021-11-26 00:41:29
    异常:异常是指令执行期间CPU内部产生的错误引起的,由于是运行时错误...当发生此类异常时 CPU 将机器状态恢复到异常之前的状态,之后调用中断处理程序时,CPU 将返回地址依然指向导致 fault 异常的那条指令。通常中断.
    • 由于 CPU 获知了计算机中发生的某些事,CPU 暂停正在执行的程序,转而去执行处理该事件的程序,当这段程序执行完毕后,CPU 继续执行刚才的程序。整个过程称为中断处理,也称为中断。

    把中断按事件来源分类,来自CPU外部的中断就称为外部中断,来自CPU内部的中断就称为内部中断。

    • 外部中断按是否导致宕机来划分,可分为可屏蔽中断和不可屏蔽中断。
    • 内部中断按中断是否正常来划分,可分为软中断和异常。

    外部中断

    外部中断可分为:可屏蔽中断和不可屏蔽中断

    • 外部中断是指来自CPU外部的中断,而外部的中断源必须是某个硬件,所以外部中断又称为硬件中断。CPU提供了两条信号线,外部硬件的中断是通过两根信号线通知CPU的,这两根信号线就是INTR(INTeRrupt)和 NMI(Non Maskable Interrupt)
      在这里插入图片描述
    1. 可屏蔽中断:可屏蔽中断是通过INTR引脚进入CPU的,外部设备如硬盘、网卡等发出的中断都是可屏蔽中断。可屏蔽的意思是此外部设备发出的中断,CPU可以不理会,因为它不会让系统宕机,所以可以通过eflags寄存器的IF位将所有这些外部设备的中断屏蔽。另外,这些设备都是接在某个中断代理设备的,通过该中断代理也可以单独屏蔽某个设备的中断。对于这类可屏蔽中断,CPU 可以选择不用理会,甚至,即使在理会后,也可以像 Linux 那样,把中断分为上半部和下半部分开处理。
    2. 不可屏蔽中断:不可屏蔽中断是通过 NMI 引脚进入 CPU 的,它表示系统中发生了致命的错误,它等同于宣布:计算机的运行到此结束了。 eflags 寄存器中的 IF 位对其无效

    内部中断

    内部中断可分为:软中断和异常

    1. 软中断:软中断是由软件主动发起的中断。由于该中断是软件运行中主动发起的,所以它是主观上的,并不是客观上的内部错误

    以下是可以发起中断的指令:

    • “int 8 位立即数”。这是我们以后常用的指令,我们要通过它进行系统调用,8 位立即数可表示 256种中断,这与处理器所支持的中断数是相吻合的。

    • “int3”。这可不是 int 空格 3,它们之间无间隙。int3 是调试断点指令,其所触发的中断向量号是 3,int3的机器码是0xcc。

    • into。这是中断溢出指令,它所触发的中断向量号是 4。不过,能否引发 4 号中断是要看 eflags 标志寄存器中的 OF 位是否为 1,如果是 1 才会引发中断,否则该指令悄悄地什么都不做,低调得很。

    • bound。这是检查数组索引越界指令,它可以触发 5 号中断,用于检查数组的索引下标是否在上下边界之内。该指令格式是bound 16/32 位寄存器, 16/32 位内存。目的操作数是用寄存器来存储的,其内容是待检测的数组下标值。。源操作数是内存,其内容是数组下标的下边界和上边界。当执行 bound 指令时,若下标处于数组索引的范围之外,则会触发 5 号中断。

    • ud2。未定义指令,这会触发第 6 号中断。该指令表示指令无效,CPU 无法识别。主动使用它发起中断,常用于软件测试中,无实际用途。

    以上几种软中断指令,除第一种的“int 8 位立即数”之外,其他的几种又可以称为异常。


    1. 异常:异常是指令执行期间CPU内部产生的错误引起的,由于是运行时错误,所以它不受标志寄存器 eflags 中的 IF 位影响,无法向用户隐瞒(因为运行不下去了,错误兜不住了)。
    • 并不是所有的异常都很致命,按照轻重程度,可以分为以下三种。:
      (1) Fault,也称为故障。这种错误是可以被修复的一种类型,属于最轻的一种异常,它给软件一次“改过自新”的机会。当发生此类异常时 CPU 将机器状态恢复到异常之前的状态,之后调用中断处理程序时,CPU 将返回地址依然指向导致 fault 异常的那条指令。通常中断处理程序中会将此问题修复,待中断处理程序返回后便能重试。最典型的例子就是操作系统课程中所说的缺页异常 page fault,话说 Linux 的虚拟内存就是基于 page fault 的,这充分说明这种异常是极易被修复的,甚至是有益的。
      (2) Trap,也称为陷阱,这一名称很形象地说明软件掉进了 CPU 设下的陷阱,导致停了下来。此异常通常用在调试中,比如 int3 指令便引发此类异常,为了让中断处理程序返回后能够继续向下执行,CPU将中断处理程序的返回地址指向导致异常指令的下一个指令地址。
      (3) Abort,也称为终止,从名字上看,这是最严重的异常类型,一旦出现,由于错误无法修复,程序将无法继续运行,操作系统为了自保,只能将此程序从进程表中去掉。导致此异常的错误通常是硬件错误,或者某些系统数据结构出错。
    向量号助记符说明类型错误号产生源
    0#DE除 出错故障DIV或IDIV指令
    1#DB调试故障/陷阱任何代码或数据引用,或是INT 1指令
    2- -NMI中断中断非屏蔽外部中断
    3#BP断点陷阱INT 3指令
    4#OF溢出陷阱INTO指令
    5#BR边界范围超出故障BOUND指令
    6#UD无效操作码(未定义操作码)故障UD2指令或保留的操作码(奔腾Pro中加入的新指令)
    7#NM设备不存在(无数学协处理器)故障浮点或WAIT/FWAIT指令
    8#DF双重错误异常终止有(0)任何可产生异常、NMI或INTR的指令
    9- -协处理器段超越(保留)故障浮点指令(386以后的CPU不产生该异常)
    10#TS无效的任务状态段TSS故障任务交换或访问TSS
    11#NP段不存在故障加载段寄存器或访问系统段
    12#SS堆栈错误故障堆栈操作和SS寄存器加载
    13#GP一般保护错误故障任何内存引用和其他保护检查
    14#PF页面保护故障任何内存引用
    15(Intel保留,请勿使用)
    16#MFx87FPU浮点错误(数学错误)故障x87FPU浮点或WAIT/FWAIT指令
    17#AC对齐检查故障有(0)对内存中任何数据的引用
    18#MC机器检查异常终止错误码(若有)和产生源与CPU类型有关(奔腾处理器引进)
    19#XMSIMD浮点异常故障SSE和SSE2浮点指令(PIII处理器引进)
    20~31- -(Intel保留,请勿使用)
    32~255- -用户定义(非保留)中断中断外部中断或者INT n指令
    展开全文
  • 第6章 中断与DMA第2节 中断中断系统第二节 中断中断系统2.1 中断的概念1、 中断中断系统"中断(Interrupt)"是一种操作,它使CPU中止正在执行的程序,而转入称为"中断处理程序(Interrupt Handler)"(或称中断...

    当前位置:电子发烧友网 > 图书频道 > 电子 > 《微计算机原理》 > 第6章 中断与DMA

    第2节 中断及中断系统

    第二节 中断及中断系统

    2.1 中断的概念

    1、 中断与中断系统

    "中断(Interrupt)"是一种操作,它使CPU中止正在执行的程序,而转入称为"中断处理程序(Interrupt Handler)"(或称中断服务程序Interrupt Service,或称中断例程Interrupt Routine)的程序。当中断处理程序执行完后,CPU接着执行被中断的程序(相对于中断处理程序来说,被中断的程序称为主程序)。

    6765a9e876678fb0c8c248396e5751d3.gif

    为了实现中断功能而设置的硬件和软件系统称为中断系统。

    2、 中断源

    引起中断的原因或发出中断请求的来源,称为中断源,通常中断源有以下几种:

    (1) 通用的I/O设备。如键盘、打印机等。

    (2) 数据通道中断源。如磁盘、磁带、光盘等设备。

    (3) 实时时种(RTC)。

    (4) 故障源。如电源掉电、存储器出错、运算溢出等。

    (5) 软件设置的中断源。如中断指令INT产生的中断。

    (6) 为调试程序而设置的中断源。如断点中断、单步中断。

    根据中断源的性质,可以分为硬件中断和软件中断。硬件中断源产生一个硬件请求信号,该信号连接到CPU的INTR或NMI引脚,使CPU执行中断处理。硬件中断又称为外部中断。软件中断源是CPU根据指令(如INT指令)或内部状态(如运算溢出、单步标志TF)产生的中断又称为内部中断。

    3、 中断的用途

    (1) 并行操作。有了中断功能后,CPU可以与多个外设并行工作。

    CPU在启动某外设后,不必等待该外设,而可以继续执行主程序,这样,CPU与外设并行工作。如果CPU在主程序中启动了另一个外设,则CPU与多个外设并行工作。

    当某外设准备好后,主动向CPU发出中断请求,CPU在中断处理程序中对该外设进行处理。中断处理执行完后,CPU又返回主程序执行。

    (2) 实时处理。

    实时处理即及时处理(在规定的时间内处理)。有了中断功能后,当外设需要CPU处理时,向CPU发出中断请求,CPU立即响应中断,使该请求被立即处理,提高了系统的实时性。

    在程序查询方式下,不能保证实时性。因为,当某外设需要处理时,CPU可能正在查询其它外设。

    (3) 故障处理。

    系统设计人员把系统中可能出现的故障的处理程序设计为中断处理程序,当出现故障时,CPU自动转入相应的中断处理程序,对该故障进行处理,而不需要报告工作人员。

    2.2 中断处理过程

    二、 中断处理过程

    六步:中断请求、中断响应、保护断点和现场、执行中断处理程序、恢复断点和现场、中断返回。

    11c27deb58abeea07e0a48d782617c99.gif

    中断处理过程是硬件和软件相结合的过程,中断处理程序是软件,其余过程均为硬件动作。

    1、 CPU响应中断的条件

    (1) 请求触发器和屏蔽触发器。

    中断请求信号必须一直有效,直到CPU响应中断后才能清除,对于每一个中断源,一般用一个"请求触发器"来保存外设的中断请求。

    在多个中断源请求中断的情况下,为了增加控制的灵活性,在每个外设的接口电路中,设置一个"中断屏蔽触发器"。只有该触发器为1时,外设的中断请求才会被送到CPU。

    具有中断请求触发器和屏蔽触发器的接口电路如图:

    413c694fbb56ca3ebe9342c5a4bb780f.gif

    注意:

    ① 中断请求信号只能保持到CPU响应中断,CPU响应中断后必须清除请求信号。可以用CPU的响应信号 清除中断请求信号,或在中断处理程序中用软件清除中断请求信号。上图中,在中断处理程序中用指令:

    IN AL,ADD_DATA

    清除中断请求信号.

    ② 上图中,中断屏蔽触发器为1时,外设的中断请求才会被送到CPU。

    在主程序中,用指令:

    MOV AL,01H

    OUT ADD_EN,AL

    使中断屏蔽触发器为1。

    在某些中断控制逻辑中(如中断控制器Intel 8259A),中断屏蔽触发器为0时,外设的中断请求才会被送到CPU。

    (2) CPU允许中断

    当CPU标志寄存器中"中断允许标志IF"置1时,CPU才能响应INTR信号线上的请求。否则,即使INTR上有请求,CPU也不响应。

    指令STI使IF=1,允许CPU响应INTR请求,称为"开中断"。

    指令CLI使IF=0,禁止CPU响应INTR请求,称为"关中断"。

    注意:NMI上的中断请求不受IF标志的影响,当NMI上出现请求时,无论IF的值是什么,CPU均要响应NMI上的请求。

    (3)在当前指令结束后,CPU响应中断。(执行一条指令所需要的时间,称为一个指令周期。一条指令一般包含几个基本操作,称为总线操作或总线通讯。一次总线操作所需的时间称为总线周期或机器周期。8086的基本总线周期由4个T状态组成:T1、T2、T3、T4)。即CPU在最后一个机器周期的最后一个T状态时,可以响应中断请求。

    54d6b3eb02f9896b2ad4b855af24806c.gif

    2、 CPU对中断的响应

    当满足上述条件后,CPU响应中断,执行以下任务:

    (1) 发出中断响应信号INTA(目的:获得中断类型码)。

    (2) 把标志寄存器的值存入堆栈。

    (3) 关中断(使标志寄存器中IF=0。目的:禁止CPU响应新的中断请求)。同时使TF=0,禁止单步执行中断处理程序。

    (4) 保护断点。即把下一条指令的地址(等于当前CS和IP的值)存入堆栈。(目的:中断处理完后能接着该指令执行)。

    (5) 根据中断类型码,从中断向量表中获得中断处理程序的入口地址。

    (6) 保护现场。(用PUSH指令把中断处理程序中要改变值的寄存器的值存入堆栈)。

    (7) 执行中断处理。

    (8) 恢复现场。(用POP指令从堆栈中恢复中断处理程序中改变值的寄存器的值)。

    (9) 开中断(用STI指令使IF=1)。

    (10) 中断返回(执行IRET指令,从堆栈中取出下一条指令的地址送CS和IP,从堆栈中取出标志寄存器的值,CPU接着该指令执行)。

    注意:

    ① 第(1)~(5)步是CPU的硬件动作。第(6)~(10)步属于中断处理程序软件。

    ② 中断处理程序中,开中断的时机取决于具体应用。如果该中断处理程序执行期间,不允许CPU响应其它中断,则在中断返回前开中断(如上述顺序),否则在保护现场后就开中断。

    2.3 中断的优先权

    三、 中断的优先权(优先级)

    多个设备使用中断方式与CPU交换数据时,需解决优先级问题。CPU对中断的优先权处理的一般原则是:

    (1) 不同级的中断请求同时发生时,先处理优先级高的请求。

    (2) 当CPU正在处理低优先级中断的过程中,又出现优先级高的请求,则CPU暂停低优先级中断的处理, 而优先处理高优先级的中断,当高优先级中断处理完后,再接着处理低优先级中断。这种情况称为"多重中断"或"中断嵌套"。

    (3) 当CPU正在处理某优先级中断的过程中,出现优先级低的请求,则CPU在处理完该中断后再响应新的请求。

    (4) 中断优先级相同的请求同时发生时,按预先规定的次序逐个处理。

    CPU处理中断优先级的方法:

    8191843a000e97bd2b54664ecc963b1f.gif     

    1.软件查询方式  软件查询方式要借助简单的硬件电路。把多个设备的中断请求信号相"或"作为向CPU的请求信号, 任意外设有中断请求时,都可以向CPU发出INTR信号。

    d3da6f61dbf7655bb00a4f9eb362588e.gif

    同时,设计一个状态寄存器,其中每一位标识一个设备的请求情况(如,有请求时,对应位置1)。CPU在中断处理程序中,读入状态寄存器的值,然后逐位检查它们的状态。若发现某位有中断请求,就转入相应的中断处理程序。

    e21f6ad0ba62e06976a8c8712ba59d9e.gif

    设中断优先级排列为:

    电源故障>磁盘>磁带>CRT>纸带输入>纸带穿孔>键盘>打印机

    部分软件编程为:

    IN AL,INT_PORT ;中断请求状态寄存器

    TEST AL, 80H ;电源故障(bit7)优先级最高,先查询

    JNZ PWZ   ;bit7=1,出现电源故障中断请求,

    ;转入相应的中断处理程序

    TEST AL, 40H ;bit6=1表示磁盘中断请求

    JNZ DISK ;转入磁盘中断处理程序

    2、 硬件优先级排队电路

    (1).链式排队电路-菊花链法

    在每个外设对应的接口电路上连接一个逻辑电路,这些逻辑电路构成一个链,称为菊花链。

    f717e35d736facc80a6cfafd3f208da6.gif

    当某个或几个外设请求中断时,优先级排队电路设置中断(F/F),并向CPU发出INTR信号(图中未画出),CPU响应中断时发出INTA信号。INTA信号只能传送到排队电路的前面,因此排队电路前面的外设获得允许信号(图中的中断输出),送出中断类型码。

    排队电路后面的外设收不到INTA信号。因此,接口在菊花链中的位置,决定了其优先级,越靠近排队电路前面的外设,优先级越高。

    (2)优先级编码集成芯片

    在微机中,典型地使用可编程中断控制器Intel 8259管理多个外设的中断请求。在中断控制器内部,有一个优先权编码排队电路,如图所示:

    1f301e60744e0f381a243f3cdf0d9dea.gif

    8条中断输入线的任意一条请求信号,经"8到3优先权编码器"5产生三位二进制编码A2A1A0,优先权最高的请求编码为111,优先权最低的请求编码为000。若有多个请求线同时请求,编码器仅输出优先权最高的编码。

    当CPU尚未处理任何中断时,"优先权失效"信号为1,此时,任意请求线有请求时,均可以经“或门7”、"与门2”、“或门3”向CPU申请中断,且该中断的编码经过CPU数据总线送至"优先权寄存器6"。 优先权寄存器中总是存放着当前正在处理的中断的编码(B2B1B0)。

    当出现新的请求时,新请求的编码A2A1A0送到比较器,只有当新请求的优先级A2A1A0大于正在处理的中断的编码B2B1B0时,比较器输出1,经“与门1”、“或门3”向CPU申请中断,同时,新中断的编码经过CPU数据总线送至“优先权寄存器6”。

    

    Copyright © 2006-2013 elecfans.com.All Rights Reserved

    展开全文
  • 如果要你讲一下中断,你会怎么去描述一个中断的触发流程呢? 最基础的可能就是:保护现场 - 中断处理 - 恢复现场... 那保护现场做了什么事情?... CPU在什么条件、什么时候、以什么方式来响应中断? ..

    如果要你讲一下中断,你会怎么去描述一个中断的触发流程呢?

    最基础的可能就是:保护现场 - 中断处理 - 恢复现场...

    那保护现场做了什么事情?中断处理需要注意什么事情?恢复现场又做了什么事情?

     

    相对应的,关于中断,还有很多这样的问题:

    • 触发中断的因素有哪些?
    • 各中断源如何向CPU提出中断请求?

    • CPU如何区分是哪个中断触发的请求?

    • 当多个中断源同时提出中断请求时,中断系统如何确定优先响应哪个中断请求?

    • CPU在什么条件、什么时候、以什么方式来响应中断?

    • CPU响应中断后,如何保护现场?

    • CPU响应中断后,如何停止源程序的执行而转入中断服务程序的入口地址?

    • CPU响应中断结束后,如何恢复现场?如何返回到源程序的间断处?

    • 在中断处理的过程中又出现了新的中断请求,CPU该如何处理?

    • 设计中断系统时,需要考虑哪些主要问题?

      ...

    本文希望就以上的问题,对中断触发和响应流程进行一个详细的描述。力求可以通过一篇文章将中断讲明白!


    首先,我先简单的描述一个中断的触发流程:

    1. 我们通过某些操作(例如按下按键),产生了电信号(电平触发 / 边沿触发);

    2. 这些电平信号,通过硬件上的中断引脚,被传递到了中断控制器;

    3. 如果该中断没有被关闭/屏蔽,中断控制器会向CPU发送中断请求;

    4. CPU收到中断请求后,判断是否响应该中断;

    5. (保护现场)如果一切条件满足,响应中断,将当前正在运行的程序上下文保存到寄存器/堆栈中;

    6. (中断处理)CPU寻找中断服务程序的入口地址,跳转到中断服务程序运行;

    7. (恢复现场)中断处理结束后,CPU会将之前保存在堆栈中的断点和寄存器重新恢复;

    8.  

      CPU继续运行之前被打断的程序。


    在上述例子中,相关的问题如下:

    • 产生中断的方式有哪些?

    答:主动触发、软件触发、硬件触发。

     

    1. 主动触发(程序中通过函数接口,通知CPU进行中断处理)
    2. 内部中断(数据溢出、非法地址访问、未识别的操作码...)
    3. 外部中断(输入/输出设备、硬件设备故障...)

     

    • CPU如何区分是哪个中断源触发的请求?

    答:中断引脚+中断号。

     

    每一个能够发出中断请求的硬件设备控制器都有一条名为“IRQ”的输出线。

    所有的IRQ输出线都与一个名为可编程中断控制器的硬件电路输入引脚相连。

    中断控制器会监视IRQ线上的信号。

    如果IRQ线上出现信号,中断控制器会将其转化成对应的中断号,通知CPU处理。

    CPU根据中断号,在中断向量表中找到对应的中断处理程序

    ...


    外部设备进行I/O操作时,会随机产生中断请求信号。这个信号中会有特定的标志,使计算机能够判断是哪个设备提出中断请求,这个信号就叫做中断号。

    中断号一般是由中断控制器提供的,中断控制器支持一系列的中断源,并提供对应的中断号。中断引脚也是由中断控制器上引出来的。

    即中断控制器将中断引脚和中断号关联起来,CPU又将中断号和中断处理程序关联起来,

    最终实现了通过中断引脚上的信号,触发CPU去执行中断处理程序。

    • 当多个中断源同时提出中断请求时,中断系统(中断控制器)如何确定优先响应哪个中断请求?

    答:中断优先级+中断屏蔽

     

    为使系统能及时响应并处理发生的所有中断,系统根据引起中断事件的重要性和紧迫程度,硬件将中断源分为若干个级别,称作中断优先级。

    在实际系统中,常常遇到多个中断源同时请求中断的情况,这时CPU必须确定首先为哪一个中断源服务,以及服务的次序。

    解决的方法是中断优先排队,即根据中断源请求的轻重缓急,排好中断处理的优先次序即优先级( Priority ),又称优先权,先响应优先级最高的中断请求。

    另外,当CPU正在处理某一中断时,要能响应另一个优先级更高的中断请求,而屏蔽掉同级或较低级的中断请求,形成中断嵌套。

    • CPU在什么时候、什么条件、以什么方式来响应中断?

    答:可以从产生中断、接收中断、执行中断角度去描述。

    中断控制器对应的中断引脚上收到信号(产生中断),中断未被屏蔽、中断优先级最高(接收中断),CPU当前处于可以切换上下文的状态(执行中断)。

     

    CPU响应中断条件:

    1. 有中断源发出的中断请求;
    2. 中断总允许位EA=1,即CPU开中断;
    3. 申请中断的中断源的中断允许位为1,即中断没有被屏蔽;
    4. 无同级或更高级中断正在被服务;
    5. 当前的指令周期已经结束。
    • (保护现场)CPU响应中断后,在开始执行中断服务程序之前,需要做哪些操作?如何保护现场?如何保存原程序断点?

    答:简单来说就是,寄存器、堆栈、压栈。

     

    保护现场就是当出现中断时,把CPU的状态,也就是当前程序地址保存在寄存器中,随后转向执行其他任务,当任务完成,从寄存器中取出地址继续执行。保护现场其实就是保存中断前一时刻的状态不被破坏。

    CPU保护现场做如下动作:

    1. 将标志寄存器内容压入堆栈,以保护中断时的状态;
    2. 将IF和TF标志清0,目的是防止在中断响应的同时又来别的中断,而将TF清0是为了防止CPU以单步方式执行中断处理子程序。这时要特别提醒,因为CPU在中断响应时自动关闭了IF标志,因此用户如要进行中断嵌套时,必须在自己的中断处理子程序中用开中断指令来重新设置IF;
    3. 保护断点,断点指的是在响应中断时,主程序当前指令下面的一条指令的地址。因此保护断点的动作就是将当前的IP和CS的内容入栈,保护断点是为了以后正确地返回主程序;

    Ps:保护现场应该包括保护程序断点和保护CPU内部各寄存器内容的现场俩个方面

    Ps:主程序和中断服务子程序都要使用CPU内部寄存器等资源,为使中断处理程序不破坏主程序中寄存器的内容,应先将断点处各寄存器的内容压入堆栈保护起来,再进入的中断。

    • (执行中断)CPU响应中断后,如何转入中断服务程序运行?

    答:中断向量表。

     

    CPU响应中断做如下动作:

    1. 根据中断号(由中断控制器传递),在中断向量表中找出相应的中断服务程序的入口地址,跳转至中断服务子程序执行。

    Ps:驱动在申请注册中断时,会将中断服务程序和中断号进行绑定。

    Ps:中断号是由中断控制器提供的,中断控制器将对应的中断号和中断引脚进行绑定。

    • (恢复现象)CPU响应中断结束后,在开始执行中断服务程序之后,需要做哪些操作?如何恢复现场?如何返回到原程序的断点处?

    答:简单来说就是,寄存器、堆栈、出栈。

     

    恢复现场就是指将各寄存器和指针恢复到中断前的状态。

    当中断处理完毕后,CPU将原程序保存在堆栈中的各个寄存器的内容弹出,即恢复原程序断点处寄存器的原值。

    CPU保护现场做如下动作:

    1. 恢复断点,断点指的是在响应中断时,原程序当前指令下面的一条指令的地址。因此恢复断点的动作就是将先前的指针和寄存器的内容出栈,即恢复原程序断点处寄存器的原值;
    2. 将IF和TF标志置1,允许接收新的中断;

    除此之外,中断很多的概念,例如:

    什么是中断上下文?

    什么是中断的顶半部、底半部?

    中断程序的编写过程钟,有哪些注意事项?

    可以参考我的其他文章:

    Linux中断知识汇总:

    【深入理解Linux内核】【中断】内容汇总帖

    展开全文
  • DOS中断/ BIOS中断

    2021-07-21 19:56:56
    一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回...
  • 中断

    2021-03-10 18:05:59
    中断(Interruption)也称外中断,指来自CPU执行指令以外的事件的发生,如设备发出I/O结束中断,表示设备输入/输出处理已经完成,希望处理机能够及时响应。
  • 引入缓冲技术的主要目的

    千次阅读 2020-12-23 22:49:41
    2、可以减少对 CPU的中断频率,放宽对中断响应时间的限制 如果I/O操作每传送一个字节就要产生一次中断,那么设置了n个字节的缓冲区后,则可以等到缓冲区满才产生中断,这样中断次数就减少到1/n,而且中断响应的时间...
  • 时钟中断

    2021-07-21 03:25:57
    本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!在单片机程序设计中,设置一个好的时钟中断,将能...中文名时钟中断外文名clock interrupt时钟中断电路编辑语音一种时钟中断检测电路,包...
  • 中断和软中断

    2021-08-31 21:41:19
    本文介绍了中断的分类,以Linux系统为例,介绍了操作系统的硬中断和软中断的实现机制。
  • 什么是进程的可中断等待状态?进程退出后为什么要等待调度器删除其task_struct结构?进程的退出状态有哪些? TASK_RUNNING(可运行状态) TASK_INTERRUPTIBLE(可中断等待状态) TASK_UNINTERRUPTIBLE(不可中断...
  • 实验三 软中断通信

    千次阅读 2021-05-17 21:02:40
    实验三 软中断通信实验目的1、了解什么是信号2、熟悉LINUX系统中进程之间软中断通信的基本原理实验内容1、编写程序:用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按^c键);...
  • 以外部中断0为例,在编程中常使用的方式为:void INT0()interrupt 0 using 1{……}在这里特别做上笔记:其中前面的void INT0() 只是代表一个普通没有形参的函数而已,函数名写成什么都是可以的,这个到不重要。...
  • Linux 内核将中断分为上半部和下半部的主要目的就是实现中断处理函数的快进快 出,那些对时间敏感、执行速度快的操作可以放到中断处理函数中,也就是上半部。剩下的所 有工作都可以放到下半部去执行,比如在上半部将...
  • Java线程的中断

    2021-03-01 11:09:11
    线程中断是一种协作式的机制,并不是说调用了中断方法之后目标线程一定会立即中断,而是发送了一个中断请求给目标线程,目标线程会自行在某个取消点中断自己。这种设定很有必要,因为如果不论线程执行到何种情况都...
  • Linux中断处理

    2020-12-29 10:02:16
    2.中断类型分类以及具体的中断。3.中断向量的注册。4.中断处理流程。5.各类型中断的具体执行流程。中断的类型及具体的种类Linux0.11内核注释1.可屏蔽硬件中断。优先级较低,可以被忽略或者延后处理,通常有键盘,...
  • 异常处理目标什么是异常?异常体系结构 目标 明确什么是异常 (重点) 能辨识出常见的异常及其含义。 (熟悉+) 理解异常产生的原理 (了解) 能处理异常 (重点) 能够自定义异常类型 (熟悉) 什么是异常? 异常...
  • Linux中断中断处理程序 由于处理器的速度与外设的速度相差很大,无法采取处理器向外设发出请求然后等待的方法。处理器与外设通信的方法: 轮询:处理器定期对设备的状态进行查询(缺点:在不需要通信的情况下,...
  • linux 中断机制浅析

    2021-05-15 03:53:07
    广义上的中断可以分为外部中断和内部中断(异常)中断是由外部事件引起的,一般分为可屏蔽的中断与非可屏蔽的中断,所谓可屏蔽就是可以通过设置CPU的IF标志位进行屏蔽,而非可屏蔽的是一些非常紧急的事件,往往IF对其...
  • 8086中断技术

    2021-12-04 10:27:48
    中断技术一,概述1,中断中断源2,中断响应与中断处理二,lntel8086的中断系统(重点)1,外部中断2,内部中断3,中断向量表 一,概述 1,中断中断源 所谓“中断”是指在CPU正常运行程序时,由于内、外部事件引起...
  • 记录一下Int9中断。 我们从键盘输入一个按键时,会到达相关芯片的60端口;60端口会向CPU发出int9中断:告诉CPU有输入到了60端口。 int9中断处理过程,有以下三步: 读取60h端口中的扫描码; 如果是字符键的扫描码,...
  • 计算机组成原理中断实验报告 (12页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!9.90 积分计141 201406030128 艾尼瓦尔·阿布力米提北 京 建 筑 大 学2015/2016 学年 ...
  • linux内核中断

    2021-05-13 02:02:02
    中,其作用就是构建一个 irqaction,并...* 普通进程可以被中断或异常处理程序打断* 异常处理程序可以被中断程序打断* 中断程序只可能被其他的中断程序打断中断与异常处理1. 无特权转换。如果CPU的当前执行环境是在...
  • Linux 中断实验

    2021-11-08 21:48:56
    目录Linux 中断简介Linux 中断API 函数上半部与下半部设备树中断信息节点获取中断号硬件原理图分析实验程序编写修改设备树文件 不管是裸机实验还是Linux 下的驱动实验,中断都是频繁使用的功能,关于I.MX6U 的中断...
  • 中断和异常

    2021-01-06 12:36:58
    中断和异常.md ## 中断和异常的定义 中断(interrupt)指在程序执行过程中遇到急需处理的事件时,暂时中止现行程序在 CPU 上的运行,转而执行响应的事件处理程序,待处理完成后再返回断点或...## 为什么需要中断/异.
  • STM32时钟和中断

    2021-05-20 12:46:16
    STM32F427IIH6外设时钟总结及中断理解一、STM32F427IIH6基本信息二、STM32F427IIH6外设时钟三、中断相关理解 一、STM32F427IIH6基本信息 芯片官网信息戳我 二、STM32F427IIH6外设时钟 1、时钟树 时钟树的讲解可以...
  • 操作系统对中断信号的处理实际是对硬件中断的一种模拟, CPU在INTR引脚上接到一个中断请求信号,如果此时IF=1,CPU就会在当前指令执行完以后开始响应外部的中断请求,这时,CPU在INTA引脚连续发两个负脉冲,外设在...
  • Linux 中断管理机制GIC 硬件原理GIC,Generic Interrupt Controller。是ARM公司提供的一个通用的中断控制器。主要作用为:接受硬件中断信号,并经过一定处...
  • 05中断

    2021-01-02 21:10:28
    1、中断概述 中断机制的应用场景:让处理器和外部设备能协同工作,且不会降低机器的整体性能。 中断过程:当接收到一个中断后,中断控制器会给处理器发送一个电信号。处理器一检测到此信号,便中断自己的当前工作...
  • 原标题:Linux中断机制:硬件处理,初始化和中断处理来源: CSDN | phenix_lord的专栏硬件处理最近解决一个关于Linux中断的问题,把相关机制整理了一遍,记录在此。不同的外部设备、不同的体系结构、不同的OS其中断...
  • 硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。 现在的服务器上动不动就是多 CPU 多核、多网卡、多硬盘,如果能让...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 223,978
精华内容 89,591
关键字:

中断的目的是什么