精华内容
下载资源
问答
  • 中断系统里有一个器件叫中断控制器。它控制着整个中断源和优先级的判别。 下面是别人写的有关这方面的知识: ARM有七种模式,我们这里只讨论SVC、IRQ和FIQ模式。 我们可以假设ARM核心有两根中断...

    原来一直不明白这样一件事,想arm系统的外部中断源只有irq一种,那么它怎么识别很多个中断源那。原来是自己的计算机组成原理没学好。在中断系统里有一个器件叫中断控制器。它控制着整个中断源和优先级的判别。

    下面是别人写的有关这方面的知识:

     

     

     

      ARM有七种模式,我们这里只讨论SVC、IRQ和FIQ模式。 我们可以假设ARM核心有两根中断引脚(实际上是看不见的),一根叫 irq pin, 一根叫fiq pin. 在ARM的cpsr中,有一个I位和一个F位,分别用来禁止IRQ和FIQ的。 先不说中断控制器,只说ARM核心。正常情况下,ARM核都只是机械地随着pc的指示去做事情,当CPSR中的I和F位为1的时候,IRQ和FIQ全部处于禁止状态。无论你在irq pin和fiq pin上面发什么样的中断信号,ARM是不会理你的,你根本不能打断他,因为他耳聋了,眼也瞎了。 在I位和F位为0的时候,当irq pin上有中断信号过来的时候,就会打断arm的当前工作,并且切换到IRQ模式下,并且跳到相应的异常向量表(vector)位置去执行代码。这个过程是自动的,但是返回到被中断打断的地方就得您亲自动手了。当你跳到异常向量表,处于IRQ的模式的时候,这个时候如果irq pin上面又来中断信号了,这个时候ARM不会理你的,irq pin就跟秘书一样,ARM核心就像老板,老板本来在做事,结果来了一个客户,秘书打断它,让客户进去了。而这个时候再来一个客户,要么秘书不断去敲门问,要么客户走人。老板第一个客户没有会见完,是不会理你的。 但是有一种情况例外,当ARM处在IRQ模式,这个时候fiq pin来了一个中断信号,fiq pin是什么?是快速中断呀,比如是公安局的来查刑事案件,那才不管你老板是不是在会见客户,直接打断,进入到fiq模式下,并且跳到相应的fiq的异常向量表处去执行代码。那如果当ARM处理FIQ模式,fiq pin又来中断信号,又就是又一批公安来了,那没戏,都是执法人员,你打不断我。那如果这个时候irq pin来了呢?来了也不理呀,正在办案,还敢来妨碍公务。 所以得出一个结论: IRQ模式只能被FIQ模式打断,FIQ模式下谁也打不断。 在打不断的情况下,irq pin 或 fiq pin随便你怎么发中断信号,都是白发。 所以除了fiq能打断irq以外,根本没有所谓中断嵌套的情况。 但是再怎么说irq pin 和fiq pin加起来也就2根引脚,那这么多中断源,怎么办呢?不可能谁来了都直接来敲门吧。 那么接下来该说谁来给irq pin或者 fiq pin发信号呢?上文中可以看到,是老板的客户,也可能是公安。这个事情就是由中断控制器来管理。 拿最简单的2410/2440的中断控制器举例,这个中断控制器加一个子中断控制器,还有一个外部中断控制器管理了50多个中断资源,说穿了有50多个脚。这些脚除了外部中断都是规定了功能的,比如WDT、LCD、DMA等,这个功能不能改,因为2410/2440内部硬件连线决定了。 当你WDT和DMA的中断都到来的时候,就会被送到SRCPND寄存器中,两个中断都在里面,那到底把哪一个送给ARM呢?这个时候先看INTMOD,也就 是模式,哪个是设置成为了快速中断,哪个就被送上去;那如果两个都是设置的快速中断呢?不可能,因为同一时间只能有一个中断可以被设成快速中断。所以,如果有快速中断,这个时候直接就给fiq pin发中断信号,打断ARM。 那要是没有快速中断呢,这个时候就看INTMSK,看WDT和DMA有没有被屏蔽的,如果DMA在INTMSK被屏蔽了,那就只有WDT继续向上送了,如果都没有屏蔽,那么他们两个同进来到了PRIORITY优先级寄存器,在这里,根据优先级的设置,一定会分出一个高,一个低的优先级出来,高的那个就被送上去,送到了INTPND寄存器,所以INTPND随时随地有且只有一个一个中断在里面。只要INTPND里面有中断,irq pin就不会一直不断给ARM中断信号,当第一次发的时候,中断了ARM,这个时候ARM进入相应的异常向量,并处于IRQ模式,正在这个时候,INTPND仍然在不断的通过irq pin向ARM发中断信号,但是ARM这个时候已经处于IRQ模式,是不会理睬你的。当你中断处理完了,要退出IRQ模式了,这个时候小心了,如果你在退出IRQ模式之前不清除INTPND里面的中断位,当你刚退出IRQ模式,又被中断了,因为INTPND一直在发中断信号。所以在退出IRQ模式之前要清除INTPND里面的中断位。但是光清除INTPND里面的位还不行,因为SRCPND里面WDT和DMA的中断还在,当你刚清除完INTPND,结果SRCPND里面又选了一个出来又送到了INTPND里面。所以正确的处理方法是退出IRQ模式之前,一定要先清除SRCPND里相应的中断位,再清除INTPND里相应的位。那么请注意,SRCPND里面可能有多位,所以清除你已处理过的中断就行了,而INTPND里面只可能有一位,直接清掉就可以了。 再来说说Linux的情况。Linux不用FIQ,只用到了IRQ。但是我们有时候一个中断需要处理很长时间,那我们就需要占用IRQ模式那么长的时间吗?没有,linux在IRQ模式下只是简单的记录是什么中断,马上就切换回了SVC模式,换句话说,Linux的中断处理都是在SVC模式下处理的。那么中断号是怎么来的呢?在ARM上固死了,相应的中断号只有一个办法得到:查询irqs.h 。那我先用一个中断号注册一个中断处理程序,当中断发生的时候,Linux怎么知道是我这个中断号发生的中断呢? 在处理中断的时候,先读取INTPND,根据需要再读取EINTPEND或SUBSRCPND计算出一个中断号,相应的处理算法在get_irq_nr_base这个宏中。而且irqs.h中的中断号就是根据这个算法把每个中断算一下得来的。

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yyt7529/archive/2010/01/22/5224698.aspx

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    转载于:https://www.cnblogs.com/zhanglianpin/archive/2011/04/11/4622362.html

    展开全文
  • 文章目录第八章 中断系统8.1 中断的基本概念8.1.1 中断概念的引入及描述中断方式示意(以输入中断为例)**中断**的定义8.1.2 中断源及中断分类中断的分类8.1.3 中断类型码中断类型码中断向量中断向量表中断向量表的...

    文章目录

    第八章 中断系统

    分三次课讲述、各次的重点为

    • 中断的分类(知道了解)以及中断向量(计算,知道中断向量的引导过程,操作系统响应中断的过程)
    • 微机系统中的可屏蔽中断,中断管理器8259(工作过程,自己语言描述,8259级联,pc机中时两片管理15级,从接在主的IR2上)

    8.1 中断的基本概念

    8.1.1 中断概念的引入及描述

    查询方式当外设数据未准备好时,CPU需要不断查询外设数据是否准备好的状态,效率低

    中断方式示意(以输入中断为例)

    现行程序输入接口输入设备1.启动2.cpu执行现行程序3.数据4.中断请求5.中断响应6.中断现行程序并执行中断服务子程序7.数据9.结束子程序返回现行程序现行程序输入接口输入设备CPU采用中断方式与外设交换信息(以输入为例)

    中断的定义

    中断:CPU在执行程序的过程中,由于某种外部或内部事件的作用,使CPU停止当前正在执行的程序而转去为该事件服务,待事件服务结束后,又能自动返回到被中止了的程序中继续执行的过程。

    • 被中断的源程序称为主程序
    • 中断处理程序称为中断服务子程序
    • 主程序被中止的地方,称为断点,也就是下一条指令所在内存的地址

    8.1.2 中断源及中断分类

    中断源:是能够引发CPU中断的信息源,分为两大类。

    • (CPU)外部中断源(硬件中断源)通过I/O接口发中断
      • I/O设备 如键盘、显示器、打印机
      • 数据通道 如磁带、磁盘
      • 时钟 如8254 0#,由此引发的中断
      • 故障源 如掉电、存储器奇偶校验错误
    • (CPU)内部中断源(软件中断源、异常)
      • 执行INT软件中断指令 如执行指令INT 21H
      • CPU指令执行产生的异常 如被0除、单步执行

    中断的分类

    中断根据中断源可以分为:

    • 由外部事件所引发的中断,即由CPU以外的设备发出,并由CPU的中断请求信号引脚输入所引发的中断称为外部中断,也称为硬件中断(80x86中 INTR 可屏蔽硬件中断,NMI非屏蔽硬件中断
    • 由CPU内部事件,即由CPU硬件故障程序执行中的指令所引发的中断称为内部中断。内部中断可以进一步分为软件中断和异常
      • 执行有定义的INT N指令而引发的中断称为软件中断。软件中断可分为BIOS中断、DOS中断。DOS中断又分为DOS专用中断、DOS保留中断、用户可调用的DOS中断以及保留给用户开发的中断。
      • 由于CPU本身故障、程序故障等引发的中断,称为异常
    中断
    外部中断
    INTR 可屏蔽硬件中断
    NMI 非屏蔽硬件中断
    内部自动产生中断类型码
    内部中断
    异常
    软件中断
    BIOS中断
    DOS中断
    DOS专用中断
    DOS保留中断

    外部中断和异常的发生是随机的。

    常见的异常

    • 除法错中断——当除法结果溢出或者除数为0时,发生的中断。
    • 单步或陷阱中断——执行每条指令后,如果标志寄存器的T标志(陷阱标志)为1时,则产生中断。
    • 断点中断——CPU执行“INT 3”指令后,进入相应的中断服务程序。INT 3指令通常用于调试程序时设置程序断点。
    • 溢出中断——CPU执行“INT 4”指令,或者标志寄存器O标志(溢出标志)为1时,执行“INTO”指令,进入相应的中断服务程序。

    8.1.3 中断类型码

    中断类型码

    为了区别各种不同的中断,微机系统给每一个中断分配了一个中断号n,即中断类型码,其取值范围是0~255。微机系统可以处理256种中断,在这256个中断中,intel 在它各种微处理器中都保留了前32个(0—31)为系统所专用,后224个可由用户设定。

    常用中断号 对应中断
    0型中断 除法错中断
    1型中断 单步或陷阱中断
    2型中断 非屏蔽硬件中断
    3型中断 断点中断
    4型中断 溢出中断
    5型中断 屏幕打印
    08H~0FH型中断 可屏蔽硬件中断
    10H~1FH型中断 BIOS中断(10H,16H)
    20H~3FH型中断 DOS中断(21H)

    中断优先级

    中断向量

    ⭐️**中断向量是实模式下,中断服务子程序的入口地址。**它由两部分组成:

    • 服务程序入口的偏移地址 2个字节(4n~4n+1)
    • 服务程序所在代码段的段基址 2个字节(4n+2~4n+3)

    例:若四个单元内容为11H,22H,33H,44H,则入口地址为:(中断向量表的表地址与中断类型的关系)
    2211H  4433H2211H+44330H=46541H 偏移地址:2211H\ \ 段基址:4433H\\ 2211H+44330H=46541H

    中断向量表

    中断类型码通过一个地址指针表中断服务程序的入口地址相联系。

    • 实模式下:该表称为中断向量表
    • 保护模式下:该表称为中断描述符表。
    中断向量表的设置

    CPU规定:在实模式下,中断向量表需设置在系统的RAM最低端的1k单元(000000H~003FFH)256(28)×4=210=1k256(2^8)\times4=2^{10}=1k

    n4n4n+3n型中断向量存放在4n\sim4n+3

    中断向量表的初始化

    谁(DOS,BIOS,用户)设计(开发)的程序,由谁将它写入中断向量

    DOS设计的两个专门用于中断向量的读出与写入的代码

    INT21H 35H子功能 25H子功能
    功能 读出n型中断向量 写入n型中断向量
    入口 AL=中断类型码 DS=中断服务程序所在代码段的段基址
    DX=中断服务程序入口的偏移地址
    AL=中断类型码
    出口 ES:BX=n型中断向量
    将中断向量写入中断向量表
    ;方法一、用户自己编写程序填写中断向量
    CLI;关中断
    PUSH DS;程序会破坏DS内容,所以先将DS保存
    MOV AX,0000H
    MOV DS,AX;给DS赋值
    MOV BX,4*n
    MOV AX,OFFSET SERVICE
    MOV [BX],AX;写入程序起始地址的偏移地址,这里需要使用DS间址寻址,省略了段基址
    MOV AX,SEG SERVICE
    MOV [BX+2],AX;写入段基址
    POP DS
    STI:开中断
    ;采用方法2,使用DOS自带的子程序,对应的程序段如下:
    CLI
    PUSH DS
    PUSHA
    MOV AX,SEG SERVICE
    MOV DS,AX;写入段基址
    MOV DX,OFFSET SERVICE;写入偏移地址
    MOV AH,25H
    MOV AL,n
    INT 21H
    POPA
    POP DS
    STI
    
    
    中断响应和处理过程

    微机系统各种类型中断的响应和处理过程不完全相同,主要区别在于中断类型码的获得方式不同,当CPU获得了中断类型码后的处理过程基本类似。

    中断类型 中断类型码
    非屏蔽硬件中断请求 CPU内部会自动产生中断类型码2
    可屏蔽硬件中断请求 当CPU处于开中断状态时,由外部中断控制器将相应的中断类型码送给CPU
    异常 中断类型码也是自动形成的
    INT n指令 中断类型码即为指令中给定的n

    CPU获得了中断类型码n后,中断的处理过程如下:

    1. F寄存器→栈(保存中断处理之前的F状态)使F中的
      • T标志置0——禁止单步操作
      • I标志置0——CPU处于关中断状态
    2. 断点地址→栈
      1. 先:断点基地址(CS) →栈,
      2. 后:断点偏移地址(IP)→栈
    3. CPU从4n ~4n+3单元取出n型服务程序入口地址→IP:CS,从而转入n型中断服务程序。
    4. 服务程序执行完毕,执行中断返回指令。中断返回指令的功能是按顺序恢复断点处的IP值、CS值和之前保护的相应中断前的标志寄存器内容→标志寄存器。CPU根据恢复后的CS:IP返回断点,继续执行主程序。
    中断向量的引导作用

    在这里插入图片描述

    中断服务子程序的结构
    ISR PROC
     ;保护现场
     ;中断处理
    
     ;恢复现场
     ;中断返回是IRET弹出六个字节,RET不能实现要求
    ISR ENDP
    

    8.2 多级中断管理

    1.中断优先与中断分级

    当有多个中断源在同一时刻提出请求时,CPU对中断响应的次序称中断优先级。(中断响应的次序是用排队器硬件实现的,可以由程序控制改变实际的中断处理次序)前文提到的中断类型码

    80X86响应中断的优先级如下:

    中断类型优先级
    1 除法错中断最高
    2 软件中断INT n ↓
    3 断点中断↓
    4 溢出中断INTO↓
    5 NMI中断↓(非屏蔽)
    6 INTR中断↓(可屏蔽)
    7 单步中断最低

    2.禁止中断与中断屏蔽

    • 禁止中断:产生中断请求后,CPU不能中断现行程序的执行。
    • 中断屏蔽:用程序有选择地封锁部分中断,而允许其余部分仍可得到响应。
    • 软件中断与硬件中断甚至可以“相互中断”

    3.中断嵌套

    中断嵌套:在执行中断服务程序时,仍可再响应中断申请。

    4.中断系统应具备的基本功能

    • 对于硬件中断,接口电路应具备‘屏蔽’和‘开放’的功能,这种功能由程序员通过软件去控制。
    • 能实现中断判优(中断排队),当有多个中断源提出请求时,应能优先响应高级别的中断源。
    • 能够实现中断嵌套
    • 响应中断后,能自动转入中断处理,处理完毕能自动返回断点。

    8.3 80x86的中断指令

    1. 开中断指令STI:指的是CPU可否响应中断请求,STICLI只对可屏蔽硬件中断INTR有用
      • 功能:使F寄存器中I标志置1,CPU处于开中断状态。
    2. 关中断指令CLI
      • 功能:使F寄存器中I标志置0,CPU处于关中断状态。
    3. 软件中断指令INT n
      • n为中断类型码,n为0~255之间有定义的无符号整数。功能:无条件转向n型中断服务子程序。
    4. 中断返回指令IRET: IRET 是中断服务子程序的出口指令
      • 功能:依次从栈顶弹出6个元素→IP,CS,F。如果栈顶是INT n 的断口地址,则执行IRET后,返回断点,否则不能。SP会变大(加六)
    5. 溢出中断指令INTO
      • 功能:先判别F寄存器中O标志位是否为1,如是则直接调用类型为4的中断子程序,用以处理溢出中断。

    INT n指令的执行过程

    与中断响应和处理过程的1.2.3步一致

    ❌软件中断指令 INT n,n是0~255之间的任意无符号整数。❎

    8.4 中断控制器8259A

    8.4.1 8259A功能

    1. 一片8259A中断控制器可以管理8级中断
    2. 每一级中断都可以通过设置内部屏蔽字进行屏蔽或允许。
    3. 在中断响应周期,8259A可以向CPU提供相应的中断类型码。
    4. 8259A是很复杂的中断控制器,可以通过编程从中断触发方式、中断屏蔽方式、中断优先级管理方式、中断结束方式和总线连接5个方面对中断进行管理。

    8259A主从级联

    2片8259A通过级联,采用1主1从的方式,可管理15级中断。

    通过级联,采用1主8从的方式,可扩展管理64级中断

    8.4.2 8259A结构

    8259A内部结构

    1. 中断请求寄存器( IRR)
      寄存引脚IR0~IR7的中断请求信号,IRRi位置1,表明IRi引脚上有了中断请求信号
    2. 中断屏蔽寄存器(IMR)
      寄存程序员写入的中断屏蔽字,屏蔽字某位=1(IMRi位=1),则与该位对应的中断请求信号(IRRi位)就不能送到中断优先权电路
    3. 优先权电路(排队电路)
      1. 比较同时送达优先权电路的中断请求,哪一个级别最高。
      2. 比较CPU正为之服务的中断源和刚进入优先权电路的中断源,哪一个级别更高。
      3. 通过判优‘选中’其中级别最高的中断源,然后通过控制电路,从INT端向CPU提中断请求。中断控制器8259A内部结构
      4. 中断控制电路
      5. 中断服务寄存器(ISR)
        1. 通过判优电路IRR0位的请求被选中,8259A向CPU发中断请求,通过INTA\overline{INTA}收到第一个中断响应信号后,ISR0位置1,IRR0位置0。ISR0位置1,表明CPU正在准备(或正在)执行IR0的服务程序。
        2. 反之,如果ISR0位由1 →0,表明IR0的中断服务程序执行完了所以ISR的每一位都是响应中断源的中断服务标志位。中断控制器8259A内部结构
    4. 数据总线缓冲器
      • 完成与CPU数据线配接
      • 接收初始化命令字,操作命令字
      • 当收到第二个中断响应脉冲时,通过他们向CPU送出被选中的中断源的中断类型码n
    5. 读/写控制模块
    6. 级联/缓冲比较器

    控制逻辑电路

    在这里插入图片描述

    8259A外部中断

    在这里插入图片描述

    中断控制器8259A中断过程——CPU响应可拼比硬件中断的过程

    1. 首先由中断请求寄存器寄存加到引脚IR0IR7IR_0\sim IR_7的中断请求
    2. 在中断屏蔽寄存器的管理下,没有被屏蔽的中断请求被送到优先权电路判优
    3. 经过优先权电路的判别,选中当前级别最高的中断源,然后从引脚INT向CPU发出中断请求信号
    4. CPU满足一定条件后,向8259A发出2个中断响应信号(负脉冲)
    5. 8259A从引脚INTA\overline{INTA}收到第1个中断信号之后,立即使中断服务寄存器中与被选中的中断源对应的那位置1,同时把中断请求寄存器中的相应位清0
    6. 从引脚INTA\overline{INTA}收到第2个中断响应信号后,8259A把选中的中断源类型码n,通过数据线送往CPU
    7. 在实模式下,CPU从4×n4×n+34\times n\sim 4\times n +3单元取出该中断源的中断向量IPCS\longrightarrow IP 、CS,从而引导CPU执行该中断源的中断服务程序

    8.4.3 8259A的中断管理方式

    8259A中断管理方式
    中断触发方式
    边缘触发
    电平触发
    中断屏蔽方式
    常规屏蔽方式
    特殊屏蔽方式
    中断优先级管理方式
    完全嵌套方式
    特殊嵌套方式
    优先级循环方式
    常规EOI循环方式
    自动EOI循环方式
    特殊EOI循环方式
    中断结束方式
    自动EOI方式
    非自动EOI方式
    常规EOI方式
    特殊EOI方式
    总线连接方式
    缓冲方式
    非缓冲方式

    中断触发方式

    • 边沿触发IRiIR_i出现上升沿表示有中断请求)
    • 电平触发IRiIR_i出现高电平表示有中断请求)

    80X86微机中采用边沿触发方式

    屏蔽中断源方式

    • 常规屏蔽方式
      MR屏蔽字决定了允许或禁止某位IRiIR_i所对应的中断:IMi=1IM_i=1禁止,IMi=0IM_i=0允许
    • 特殊屏蔽方式
      • 提供了允许较低优先级的中断能够得到响应的特殊手段
      • 当一个中断被响应时,仅屏蔽同级别的再次中断,而允许较低和较高级别的中断源中断正在执行的当前中断服务程序
        80x86采用常规屏蔽方式

    中断优先级管理方式

    优先级控制方式

    1. 固定优先级方式
      • 所有中断请求IRiIR_i的中断优先级固定不变
      • 加电后8259A的默认方式,默认优先级顺序从高到低为IR0IR7IR_0\sim IR_7
    2. 循环优先级方式
      • 中断源轮流处于最高优先级,即自动中断优先级循环
      • 某中断请求IRiIR_i被处理后,其优先级别自动降为最低,原来比它低一级的中断上升为最高级

    中断嵌套方式

    在中断处理过程中允许被更高优先级的时间所中断称为中断嵌套。8259A有两种中断嵌套方式:

    • 普通全嵌套方式(默认方式)
      一中断正被处理时,只有更高优先级的时间可以打断当前的中断处理过程而被服务
    • 特殊全嵌套方式
      一中断正被处理时,允许统计或更高优先级的事件可以打断当前的中断处理过程

    80x86采用固定优先级、普通全嵌套方式

    中断结束处理方式

    当某一IRiIR_i中断被服务时,ISR中的相应位ISRi=1ISR_i=1.当服务结束后,则必须清零该ISRiISR_i。当服务结束后,则必须清零该ISRiISR_i位。使ISRi=0ISR_i=0是通过向8259A发出中断结束命令(EOI命令)实现的。

    三种EOI命令

    • 自动EOI(AEOI)1——(自动EOI方式)
    • 指定EOI(SEOI)2——(特殊EOI方式)
    • 非指定EOI(NSEOI)3——(正常/常规EOI方式)

    80x86微机中采用NSEOI(常规中断结束)方式

    8259A的编程

    20H是最常用的中断结束命令字

    8.5.2 非屏蔽中断

    ⭐️非屏蔽中断:输入到CPU的NMI引脚的请求信号引发的中断

    ⭐️响应非屏蔽中断的条件

    1. 有非屏蔽中断请求,没有DMA请求
    2. 一条指令执行完

    CPU响应非屏蔽中断的过程

    CPU在每一条指令的最后一个时钟周期,检测NMI引脚。处理器不屏蔽来自NMI的中断请求。
    处理器在响应NMI中断时,不从外部硬件接收中断向量号。在80X86中,非屏蔽中断所对应的中断向量号固定为2。为了非屏蔽中断的嵌套,每当接受一个NMI中断,处理器就在内部屏蔽了再次响应NMI,这一屏蔽过程直到执行中断返回指令IRET后才结束。所以,NMI处理程序应以IRET指令结束。

    8.5.3 可屏蔽中断

    可屏蔽中断:输入到INTR引脚的中断请求信号,引发的中断

    硬件中断的级别:DMA请求>非屏蔽中断>可屏蔽中断

    1.响应可屏蔽中断的条件

    1. 有可屏蔽中断请求,没有DMA请求,没有非屏蔽中断请求
    2. CPU一条指令执行完毕
    3. CPU处于开中断状态(I标为1)

    2.CPU响应可屏蔽中断过程

    ​ CPU在每一条指令的最后一个时钟周期,检测INTR引脚,当检测到有可屏蔽中断请求时,在满足上述条件的前提下,通过总线控制器向系统8259A发出中断响应信号(2个负脉冲)。在获得8259A送来的中断类型码之后,在实模式下查询中断向量表,从而转向相应中断源的中断服务程序。

    3.PC系列机可屏蔽中断的硬件结构

    1.使用2篇8259级连,管理15级中断
    2.中断源与中断类型
    主8259 中断源 中断类型 从8259 中断源 中断类型
    IR0 日时钟 08H IR0 实时时钟 70H
    IR1 键盘 09H IR1 用户中断 71H改向0AH
    IR2 从8259 IR2 保留 72H
    IR3 辅串口 0BH IR3 保留 73H
    IR4 主串口 0CH IR4 保留 74H
    IR5 并行口2 0DH IR5 协处理器 75H
    IR6 软盘 0EH IR6 硬盘 76H
    IR7 并行口1 0FH IR7 保留 77H
    3.系统分配的8259口地址
    中断屏蔽寄存器口地址 接收中断结束命令的寄存器口地址
    主8259 21H 20H
    从8259 0A1H A0H
    4.硬件可屏蔽中断的中端级别
    5.中断结束命令
    1. 命令字为20H
    2. 接入主8259A IR0 ,IR1,IR3IR7~的中断源,其服务程序结束要向主8259送中断结束命令字
    3. 接入从8259的中断源,经主8259A的IR2向INTR提中断请求,其服务程序结束应分别向主、从8259各送一个中断结束命令字 。
    ;接入主8259A  IR0,IR1,IR3 ~IR7的中断源其服务程序结束要向主8259送中断结束命令字
    MOV  AL,20H
    OUT  20H,AL
    ;恢复现场
    IRET
    ;接入从8259的中断源,经主8259A的IR2向INTR提中断请求,其服务程序结束应分别向主、从8259各送一个中断结束命令字 。
    MOV    AL,20H
    OUT    20H,AL
    OUT    0A0H,AL
    ;恢复现场
    IRET
    

    8.6 微型计算机系统中用到的中断及应用举例

    8.6.1 日时钟中断

    BIOS系统规定:40H:6CH~40H:6FH这4个单元
    (共32位)为日时钟计数器,每55ms加1次,计数
    到:001800B0H,为24小时,其计数值供系统软件使用。
    系统启动时CPU执行BIOS中的一段程序,读取CMOS实
    时时钟电路的时间值→计数值→40:6CH~40:6FH做
    为日时钟计数器的计数初值。

    1. 中断源:系统8254 0#计数器,每55ms发一次中断请求
    2. 中断类型:08H
    3. 日时钟中断处理流程:(CPU转入8型中断后,完成下列工作)
      1.开中断,保护现场(DS压栈)
      2.40H给DS,对“日时钟级数器”加1
      3.测算软驱马达关闭时间
      4.执行 INT 1CH
      5.向主8259送中断结束命令
      6.恢复现场DS,IRET

    关于1CH服务程序(软件中断)

    • 8# 服务程序,每隔55ms在DS=40H的前提下,调用一次1CH服务程序,之后又返回8型
    • 所以1CH中断是日时钟的附加中断,用户可开发新的1CH中断服务程序(完成每55ms一次的定时操作)取代系统原来的中断服务子程序

    软件中断和硬件中断可以相互嵌套他们之间的优先级是指当中断请求同时发生时高优先级的中断优先响应,不存在低优先级无法打断高优先级的说法

    系统日时钟中断的开发应用

    1. 置换中断向量,(08H或1CH)
      • 当用户程序的某项定时操作,其定时周期等于55ms的整数倍时,可定义用户程序的定时操作为1CH中断。此时需要置换1CH型中断向量,调用DOS系统25H号子程序把用户定时中断服务程序入口地址写入4×1CH~4×1CH +3单元。
      • 当用户程序的定时操作,其定时周期不等于55ms的整数倍或者小于55ms时,需要重新对8254 0#计数器进行编程,定义输出周期为用户定时周期与55ms的最大公约数,此时用户中断服务程序为08H型,此时需要置换08H型中断向量,调用DOS系统25H号子程序把用户定时中断服务程序入口地址写入4×08H~4×08H+3单元。
    2. 用户中断服务程序结束
      • 若用户定时中断定义为1CH型,服务程序结束前不需要向主8259A送结束命令。
      • 若用户定时中断定义为08H型, 服务程序结束前,需要先向主8259A送中断结束命令
    3. 中断服务程序的执行时间
      • 定时中断服务程序的执行时间,必须远远小于定时中断的时间间隔
    4. 避免DOS重入(DOS不允许重入)

    8.6.2 键盘中断

    可屏蔽硬件中断

    1. 键盘中断源是主板键盘接口电路
    2. 中断类型:09H

    8.6.3 实时中断

    1. 中断源是主板中的实时时钟电路
    2. 中断类型:70H

    8.6.4 用户中断

    1. 系统用户中断的中断源是系统的ISR总线**B4**端子(IRQ9)引入的中断请求信号,接到从8259的IR1经过INT接到主8259的IR2端,通过INT接到INTR
    2. 中断类型71H(转向0AH)
    3. 系统用户中断处理流程BIOS设计的71H型中断服务程序处理流程如下:
      1. 开中断、保护现场;
      2. 向从8259A发出中断结束命令
        MOV AL, 20H;OUT 0A0H, AL
      3. 执行INT 0AH,转向0AH服务程序。
        0AH服务程序是用户预先设计好的,其中断向量已经存放在系统RAM 4×0AH~4×0AH+3单元。

    用户中断是微机系统为用户开发可屏蔽中断预备的中断口。在用户中断程序的设计中,需要采取以下措施:

    1. 把外扩中断源的中断请求(由低电平到高电平的跃变)接入ISA总线B4端子
    2. 开放用户中断
    3. 置换中断向量

    CPU响应用户中断后,自动转向“71H型”服务程序。根据BIOS设计的71H型中断服务程序处理流程,可以知道,用户自行设计的用户中断服务程序类型可以是“71H”,也可以是0AH。

    1. 定义用户中断服务程序为0AH型,置换0AH型中断向量,调用DOS系统25H号子程序把用户中断的服务程序入口地址写入4×0AH~4×0AH+3单元。

    2. 定义用户中断服务程序为71H型 ,置换71H型中断向量,调用DOS系统25H号子程序把用户中断的服务程序入口地址写入4×71H~4×71H+3单元。

    用户中断请求的途径

    • 用户中断请求从ISA总线B4端子(IRQ9)引入,经过主8259,从8259二级中断管理,最后由主8259向CPU提中断。

    • 只有从8259IMR1置0,主8259IMR2置0,其中断请求方能送到CPU。 (日时钟中断和键盘中断是开放的)

    ;实现用户中断必须对主、从8259应用编程,保证中断申请由8259中断控制器提向CPU
    IN        AL,   0A1H
    AND       AL,   11111101B
    OUT       0A1H, AL      ; 从8259
    
    IN        AL,   21H
    AND       AL,   11111011B
    OUT       21H,  AL        ;开放主8259中断
    

    1. 在第2个INTA#结束时,由8259A使ISR~i自动复位;⭐️因不保留当前正在服务的中断的状态,故AEOI不能用于中断嵌套方式 ↩︎

    2. 由CPU发出一条SEOI命令,该EOI命令中指出了所要复位的ISR的位号。⭐️用于特殊屏蔽方式 ↩︎

    3. 由CPU发出正常EOI命令没,该EOI命令使ISR~i=1的位中优先级最高的那一位复位。⭐️用于普通全嵌套方式 ↩︎

    展开全文
  • 中断系统

    2020-07-30 09:35:20
    中断系统 1.概述 2.中断的基本概念 3.中断请求的分类 4.中断请求标记 5.中断判优 6.中断处理过程 7.单重中断与多重中断 8.中断屏蔽技术 9.总结

    中断系统

    1.概述
    在这里插入图片描述
    2.中断的基本概念
    在这里插入图片描述
    3.中断请求的分类
    在这里插入图片描述
    在这里插入图片描述
    4.中断请求标记
    在这里插入图片描述
    5.中断判优
    在这里插入图片描述
    在这里插入图片描述
    6.中断处理过程
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    7.单重中断与多重中断
    在这里插入图片描述
    8.中断屏蔽技术
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    9.总结
    在这里插入图片描述

    展开全文
  • 0、89C51中断系统分类: 分为三种: 1)、外部中断 2)、定时器中断 3)、串口中断 1、中断的概念 中断触发后,CPU会从主函数调到中断函数中。 外部中断1: 低电平触发:P3.2是0 下降沿触发:p...

    来源《霖锋带你征服嵌入式》

    0、89C51中断系统分类:

    分为三种:

    1)、外部中断

    2)、定时器中断

    3)、串口中断

    1、中断的概念

     

     中断触发后,CPU会从主函数调到中断函数中。

    外部中断1: 

     低电平触发:P3.2 是0

    下降沿触发:p3.2电平:1变为0则触发。

    外部中断2同1。

    2、中断允许控制

     EA是总开关;EX0、ET0、EX1、ET1、ES为分开关。

    3、中断请求标志

    4、中断优先级 

    2个优先级,故可实现2级嵌套。 INT0和INT1两个外部中断,T0、T1两个定时器中断,RX和TX为一个串口中断。

    硬件中断优先级最高,串口优先级最低。

    5、中断响应条件

    6、中断优先级的三条原则:

    1)CPU同时接受到多个中断时,首先响应优先级别最高的中断请求。

    2)正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。

    3)正在进行的低优先级中断服务,能被高优先级中断请求所中断。

    7、 使用中断,程序员需要做的:


    1)想使用的中断是哪个?------>选择相应的中断号;

    2)希望的触发条件是什么?------>下降沿触发还是低电平触发?

    3)希望中断之后干什么?

    以外部中断0为例分析:

    主程序中需要以下代码:

    EA =1;//打开总中断开关

    EX0 = 1;//开外部中断0;

    IT0 = 0/1;//设置外部中断的触发方式0是低电平触发,1是下降沿触发

    中断服务函数:

    void int0() interrupt 0 using 1

    {

        //do sth.

    }

    中断函数没有返回值,故void

    int0为中断函数名,可以自定义

    interrupt 表示为中断服务函数

    0 表示中断号

    using 1     //(0-3),4组不同的寄存器,保存到哪个寄存器,一般可以不用加。  

    注意:中断函数中的内容尽量的短,少占用CPU。

    8、总结:

    最小系统 一文中,如上图,P3.2引脚接的是外部中断0,当我们设置 IT0 = 0;即外部中断为低电平时触发中断;

    实际中,我们可以把设备的某以一端接在P3.2引脚上,当设备故障是,P3.2为低电平,此时触发中断,蜂鸣器报警或发光二极管亮。

    中断类似信号,不用我们去操作,也不用我们调用,只要触发中断条件,会自动从主函数中调到中断函数中。

    9、外部中断示例 

    #include  <reg52.h>
    sbit led0 = P0^0;
    unsigned char code smg_du[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
    //12MHz下,延时50us
    void delay_50us(unsigned int t)
    {
        unsigned char j;
        for(;t>0;t--);
            for(j =19;j>0;j--);
    }
    void main()
    {
        unsigned char i;
        EA = 1; //打开总中断开关
        EX0 = 1; //打开外部中断0
        IT0 = 1;//触发方式设置
        while(1)
        {
            for(i =0;i<10;i++)
            {
                P1 = smg_du[i];
                delay_50ms(10);
            }
        }
    }
    
    void int0() interrupt 0
    {
        led0 = 0;
        delay_50ms(20);
        led0 = 1;
    }

    P3^2引脚出现低电平,就会触发中断,从main函数中立马调到 中断函数int0中,函数执行完,又跳回到main函数跳出时的位置,接着执行。

    展开全文
  • 原语 操作系统或计算机网络用语范畴。是由若干条指令组成的,用于完成一定功能的一个过程。primitive or atomic action 是由若干个机器指令构成的完成某种特定功能的一段程序,具有不可分割性·即原语的执行必须是...
  • 28335 中断系统

    2017-05-30 15:39:52
    DSP 28335 的中断系统总结   (2012-12-09 13:17:46) 标签:  dsp   28335   中断   杂谈   分类: DSP 28335 的中断系统总结" title="DSP 28335 的中断...
  • 中断分类

    2012-06-22 14:11:33
    内部中断来源于CPU内部(软件中断指令,溢出,除法错误等),例如,操作系统从用户态切换到内核态需借助CPU内部的软件中断。 外部中断来源于CPU外部,由外设提出请求。 根据是否可被屏蔽,可分为可屏蔽中断和...
  • Linux内核中断系统

    千次阅读 2020-07-20 13:18:15
    点击上方蓝色字关注我们!前言 中断在驱动中是非常常用的,无论是外部的GPIO中断,还是SPI,I2C等发送或接收中断,都是必不可少的。所以今天来看看Linux中的中断处理。中断分类...
  • x86中断(一)-中断分类

    千次阅读 2016-10-31 15:05:26
     x86系统支持256个中断源,每个中断源使用0~255数字标识,该标识称作中断向量号(即CPU中断源的中断号,要与外部中断中断号IRQ n相区别),CPU通过获取中断向量号识别中断源。256个中断源可以分为:  ...
  • DSP28335:中断系统

    2020-12-12 22:45:46
    CPU中断有两种分类方法: ①硬件与软件中断 1°软件中断:通过在软件中写指令触发的中断 2°硬件中断:来自于片内外设或者外围设备的中断信号 ②可屏蔽中断与不可屏蔽中断 1°可屏蔽中断:这些中断可以用软件加以...
  • 中断系统调用

    2020-12-26 18:57:07
    为什么要采用中断系统。 维持系统可靠正常工作。1)程序员不能直接干预和操纵机器,通过操作系统来实现。2)程序运行过程中,如果发生越界访问,应该由存储管理部件进行监测,一旦发生应向处理机发出中断请求,采取...
  • 目录 1.操作系统的基本特征 (1)并发 (2)共享 (3)虚拟 ...5.中断分类 1.外中断 2.异常 3.陷入 1.操作系统的基本特征 (1)并发 并发是指宏观上在一段时间内能同时运行多个程序,而...
  • 中断系统中断概念什么是中断中断系统中断优点51单片机中断分类中断控制位中断请求标志中断优先级51单片机的中断优先级有三条原则中断处理过程 中断概念 什么是中断 CPU在处理某一事件A时,发生了另一事件B请求CPU...
  • 主要内容有: ·中断分类 ·非可屏蔽中断 ·中断处理 ·外部中断 ·程序中如何使用中断
  • 文章目录1 中断的基本概念2 中断请求的分类3 中断请求标记4 中断判优-实现5 中断处理过程5.1 中断处理过程-中断隐指令5.2 中断处理过程-硬件向量法5.3 中断处理过程-中断服务程序6 单重中断与多重中断6.1 单重中断与...
  • 本资源详细介绍了中断源的分类,8086及奔腾的中断系统对比研究及中断向量和中断向量表的相关内容。
  • 51单片机的中断系统十分重要,前几次我在学习的时候,根本分不清外部中断、定时器中断的区别以及正确使用方法。今天,偶然打破了自己的常规思路,得到了一点点理解,与大家分享下,希望大家不吝指出其中的不足与错误...
  • # 操作系统中断

    2019-10-30 23:01:00
    操作系统中断 错漏之处,搏君一笑而已 中断分类 中断按照触发的来源可以分为两类,内部中断和外部中断。其中内部中断实在cpu内部引起的,也就是说是由当前的进程触发的所以也叫异常。而外部中断也就是由cpu以外的...
  • 操作系统概述 一、操作系统的概念、功能 1. 操作系统的概念 (1) 系统资源的管理者 (2) 向上层提供简便易用的服务 (3) 最接近硬件的一层软件 2. 操作系统的功能 (1) 系统资源的管理者: 执行一个程序之前需要将该...
  • 中断系统调用

    2013-05-16 20:45:00
    中断及其分类  中断是指程序执行过程中,遇到紧急处理的事件时,暂停中止CPU上现行程序的运行,转去执行相应的事件处理程序,待处理完成后再返回原程序被中断处或调度其他程序执行的过程。  中断分为:硬中断和...
  • 操作系统中断

    2020-06-05 15:54:37
    中断的概念 中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被...按中断源进行分类:发出中断请求的设备称为中断源。按中断源的不

空空如也

空空如也

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

中断系统分类