您好、欢迎来到现金彩票网!
当前位置:2019跑狗图高清彩图 > 向量屏蔽 >

第七章 中断控制器8259Appt

发布时间:2019-08-09 21:19 来源:未知 编辑:admin

  1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。

  共98页 中断响应过程(以可屏蔽中断为例) 1、外设通过INTR向CPU发出中断请求; 2、CPU在执行完现行指令后,响应该中断请求(IF=1); 3、外设向CPU提供中断类型号; 4、CPU将PSW、CS、IP压入堆栈; 5、清除IF、TF(默认情况下为不允许中断嵌套); 6、从中断向量表中取出中断向量,置入IP、CS; 7、执行中断例程; 8、在中断例程中,如果允许中断嵌套,则开中断(STI); 9、执行IRET,从堆栈中弹出IP、CS、PSW。 中断结束方式 中断服务完成时,必须给8259A一个命令,使这个中断级在ISR中对应位清“0”,表示该中断处理结束。 (1)自动中断结束方式(AEOI) ? 系统一旦进入中断响应,8259A就在第二个INTA信号的后沿,自动将ISR中对应位清“0”。最简单一种中断结束方式; 注意:它只能用在系统中只有一个8259A,且多个中断不会嵌套。 (2)非自动中断结束方式(EOI) 从中断服务程序返回前,必须在程序中向8259A输出一个中断结束命令(EOI),把对应于ISR中的位清“0”,具体由两种: 1、一般自动中断结束方式。指令中不指定清除ISR中哪一位,由8259A自动选择优先权最高的位; 2、特殊EOI结束方式。在指令中指明要清除ISR中某一位。 注意:非自动中断结束方式如果在程序中没有将ISR中对应位清“0”,那么 8259A在一般情况下将不再响应这个中断以及比他级别低的中断请求。 例:两片8259A进行级联,主片SP/EN连+5V,从片SP/EN接地,边沿触发,非缓冲方式,非自动中断结束,CAS0—CAS2互连,如前图所示。 主片: MOV AL 00010001B ;ICW1:边沿触发,级联,设置 ;ICW4 OUT 20H,AL MOV AL,00001000B ;ICW2:中断类型08H—0FH OUT 21H,AL MOV AL,00001000B ;ICW3:IR3连有从片 OUT 21H ,AL MOV AL,00010001B ;ICW4:特殊全嵌套,非缓冲, ;非自动中断结束,8086微处理器 OUT 21H ,AL 从片: MOV AL 00010001B ;ICW1:边沿触发,级联 OUT 0A0H,AL MOV AL,01110000B ;ICW2:中断类型70H—77H OUT 0A1H,AL MOV AL,00000011B ;ICW3:INT接主片IR3 OUT 0A1H ,AL MOV AL,00000001B ;ICW4:全嵌套,非缓冲, 非自动中断结束,8086微处理器 OUT 0A1H ,AL A0:A0=0,OCW2写入偶地址端口。 D4 、D3 : OCW2的标志位,等于00,区别ICW1和OCW3。 L2~L0:SL=1时,L2~L0有效。L2~L0有两个用途,一是当OCW2设置为特殊EOI结束命令时(011,111),L2~L0指出清除中断服务寄存器中的哪一位;二是当OCW2设置为特殊优先级循环方式时(110),L2~L0指出循环开始时设置的最低优先级。 R、SL、EOI:组合起来指明优先级设置方式和中断结束方式,每位有各自的意义。 R(Rotate):R=1,中断优先级是按循环方式设置的;R=0,设置为固定优先级。 SL(Specific Level):指明L2~L0是否有效。 EOI(End Of Interrupt):指定中断结束方式。EOI=1,使用中断结束命令使中断服务寄存器中对应位复0;EOI=0,不需要执行结束操作命令。(ICW4的AEOI=1,OCW2中的EOI位应为0)。 OCW2的功能包括两个方面,一方面是决定8259A是否采用优先级循环方式,另一个方面是中断结束采用普通的还是特殊的EOI结束方式。 操作控制字OCW1~OCW3的设置,安排在初始化命令字设置之后,用户根据需要可在程序的任何位置去设置。 尽管8259A只有两个端口地址,但不会混淆4个初始化命令字和3个操作命令字。ICW2、ICW3、ICW4和OCW1写入8259A奇地址端口,初始化时ICW1后面紧跟ICW2、ICW3、ICW4,而OCW1是单独写入的,不会紧跟在ICW1后面。ICW1、OCW2、OCW3写入8259A偶地址端口,但一方面ICW1是在初始化时写入,另一方面可用D4位区分,D4=1为ICW1,D4=0为OCW;再用D3位区分,D3=0为OCW2,D3=1为OCW3。因此对8259A编程时写入的命令字是不会混淆的。从8259A能够读出的状态字有4个:IMR、IRR、ISR和查询字。A0=1,读出的一定是IMR;在OCW3的P、RR和RIS位的控制下,可相应读出IRR、ISR和查询字。 例:一个8259A主片,连接2片8259A从片,从片分别经主片的IR3及IR5引脚接入,若主片设置为特殊全嵌套工作方式,从片设置为完全嵌套工作方式,则系统中优先级排列次序为: 主片IR0、IR1、IR2 从片IR0、IR1、…、IR7 主片IR4 从片IR0、IR1、…、IR7 主片IR6、IR7 中断处理结束时,CPU应发出两个EOI结束命令,一个送给主片8259A,另一个送给从片8259A,使8259A主片和从片的ISR寄存器相应位清“0”,这样一次中断处理过程结束。 例:特殊全嵌套工作方式:假设某微机系统的8086 CPU工作在最小模式,中断系统有1片8259A主片,2片8259A从片构成级联工作方式。从片1#从8259A主片IR6端引入,从片2#从8259A主片IR3端引入,8259A主片的IR0及IR4引入2个中断请求信号。 8259A从片1#由IR6端收到一个中断请求信号 例:某系统中两片8259A采用中断级联方式组成中断系统,从片的INT端连8259A主片的IR3端。若当前8259A主片从IR1、IR5端引入两个中断请求,中断类型号为31H、35H。中断服务程序的段基址为1000H,偏移地址分别为2000H及3000H。8259A从片由IR4、IR5端引入两个中断请求,中断类型号为44H和45H,中断服务程序段基址为2000H,偏移地址为3600H及4800H 。 (1)中断向量表的设置: MOV AX,1000H MOV DS,AX ;送入段地址 MOV DX,2000H ;送入偏移地址 MOV AX,2531H ;中断类型号31H INT 21H MOV DX,3000H MOV AL,35H ;中断类型号35H INT 21H MOV AX,2000H MOV DS,AX MOV DX,3600H MOV AX,2544H ;中断类型号44H INT 21H MOV DX,4800H MOV AL,45H ;中断类型号45H INT 21H (2)主片8259A初始化编程:假设主片的端口地址为0FFC8H和0FFC9H。 MOV AL,11H ;定义ICW1:级联使用,边沿触发,要设置ICW4 MOV DX,0FFC8H OUT DX,AL MOV AL,30H ;定义ICW2:主片中断类型号为30H~37H MOV DX,0FFC9H OUT DX,AL MOV AL,08H ;定义ICW3:主片IR3连接从片的INT端 OUT DX,AL MOV AL,11H ;定义ICW4:特殊全嵌套方式,非缓冲方式, ;非自动EOI结束方式 OUT DX,AL MOV AL,0D5H ;定义OCW1:允许IR1、IR3、IR5中断,其余 ;中断请求输入端的中断请求被屏蔽 OUT DX,AL MOV AL,20H ;定义OCW2:普通EOI结束方式 MOV DX,0FFC8H OUT DX,AL (3)8259A从片初始化编程:假设从片的端口地址为0FFCAH和0FFCBH。 MOV AL,11H ;定义ICW1:级联使用,边沿触发,要设置ICW4 MOV DX,0FFCAH OUT DX,AL MOV AL,40H ;定义ICW2:从片中断类型号为40H~47H MOV DX,0FFCBH OUT DX,AL MOV AL,03H ;定义ICW3:从片的INT端连接主片IR3 端 OUT DX,AL MOV AL,01H ;定义ICW4:完全嵌套方式,非缓冲方式, ;非自动EOI结束方式 OUT DX,AL MOV AL,0CFH ;定义OCW1:允许IR4、IR5中断,其余 ;中断请求输入端的中断请求被屏蔽 OUT DX,AL MOV AL,20H ;定义OCW2:普通EOI结束方式 MOV DX,0FFCAH OUT DX,AL MOV AL,11H ;ICW1:级联使用,边沿触发,要设置ICW4 OUT 20H,AL ;主片I/O端口地址为20H和21H JMP INTR1 ;转移指令起延时作用,等待8259A操作结束 INTR1:MOV AL,08H ;定义ICW2:主片中断类型号为08H~0FH OUT 21H,AL JMP INTR2 INTR2:MOV AL,04H ;定义ICW3:主片IR2连接从片的INT端 OUT 21H,AL JMP INTR3 INTR3: MOV AL,01H ;定义ICW4:完全嵌套方式,非缓冲方式, ;非自动EOI结束方式 OUT 21H,AL JMP INTR4 初始化从片8259A INTR4:MOV AL,11H ;定义ICW1:级联使用,边沿触发, ;要设置ICW4 OUT 0A0H,AL ;从片I/O端口地址为0A0H和0A1H JMP INTR5 INTR5:MOV AL,70H ;ICW2:从片中断类型号为70H~77H OUT 0A1H,AL JMP INTR6 INTR6:MOV AL,02H ;定义ICW3:从片INT端连接主片IR2端 OUT 0A1H,AL JMP INTR7 INTR7:MOV AL,01H ;ICW4:完全嵌套方式,非缓冲方式, ;非自动EOI结束方式 OUT 0A1H,AL …… 2、硬件(外设接口)和CPU自动完成 ⑴ 外设接口向CPU的INTR端发中断请求。 ⑵ 当前指令执行完后,CPU发两个中断响应信号给外设接口。 ⑶ CPU取中断类型号n。 ⑷ CPU自动将当前PSW、CS、IP内容入栈保护。 ⑸ 清除IF、TF,禁止外部中断和单步中断,TEMP保存TF的值。 ⑹ 从中断向量表中取(0:4*n)地址中内容?IP,取(0:4*n+2)地址中内容?CS。 ⑺ 转向中断服务子程序。 注意: ① 对重复前缀的指令(如REP MOVSB)作为一条指令处理。执行一次重复前缀和串指令即可响应中断,而不是把串操作全部执行完。 ② 遇到开中断指令STI和中断返回指令IRET,要在这两条指令执行完后,再执行一条指令才能响应中断。 ③ CPU自动清除IF及TF位,使CPU进入中断服务程序后,不允许再产生新的中断,如果在中断服务程序中还允许外部可屏蔽中断进入,则在中断服务程序中必须再开中断(STI)。 中断服务子程序结构: ⑴ 程序开始必须保护中断时的现场,通过一系列PUSH指令将CPU各寄存器的值入栈保护。 ⑵ 若允许中断嵌套,用STI开中断,使IF=1。 ⑶ 执行中断处理程序。 ⑷ 用CLI关中断,使IF=0,禁止其他中断请求进入。 ⑸ 给中断命令寄存器送中断结束命令EOI,使当前正在处理的中断请求标志位被清除,否则同级中断或低级中断的请求仍会被屏蔽掉。对于自动EOI结束方式不需要发中断结束命令。 ⑹ 恢复中断时的现场,通过一系列POP指令将CPU各寄存器的值恢复。 ⑺ 用STI设置开中断,允许其他中断请求进入。 ⑻ 用中断返回指令IRET返回主程序,此时堆栈中保存的断点值和标志值分别装入IP、CS和PSW。 注意:中断服务程序中两次开中断,第一次开中断是为了允许中断嵌套而设置的。第二次开中断是因为恢复寄存器内容时,为了防止有中断进入破坏其内容,先执行关中断,然后在中断返回前再开中断,这样返回主程序后,中断请求能得到允许。中断结束命令EOI一般在中断处理结束前发出,使一次中断处理的过程是完整的。 问题? 外部可屏蔽中断服务程序的编写 外部可屏蔽中断服务程序的编写 初始化命令字的设置有固定次序,端口地址也有明确规定,并不会因为只有两个端口输出命令而混淆。初始化命令字必须从ICW1开始设置,依次顺序进行设置,并分别根据ICW1中的SNGL位和IC4位决定是否设置ICW3和ICW4。级联时要设置ICW3,并且主片与从片的ICW3设置不同。在初始化命令字设置完成前,对A0=1的输出指令不可能是操作命令字。而初始化命令序列设置完成后,在操作命令字的设置中,不可能第二次初始化,因此不会混淆。 初始化命令字 ICW 初始化命令字 ICW 初始化命令字设置次序 初始化命令字 ICW 初始化命令字设置次序 结束 [例] 在IBM PC/XT系统中,ROM-BIOS中的8259A初始化程序为: …… MOV AL,13H ;单片、边沿触发、要设置ICW4 OUT 20H,AL ;写入ICW1 MOV AL,08H ;中断类型号基值为08H OUT 21H,AL ;写入ICW2 MOV AL,0DH ;缓冲方式、非自动EOI方式、 ;完全嵌套方式、 ;使用8086/8088微处理器。 OUT 21H,AL ;写入ICW4 8259A经初始化命令字ICW预置后已进入初始化状态,可接收来自IRi端的中断请求,自动进入操作命令状态,可以随时接受CPU写入8259A的操作命令字OCW。 初始化命令字 ICW 操作命令字 操作命令字决定中断屏蔽、中断优先级次序、中断结束方式等。 中断管理较复杂,包括:完全嵌套优先方式、特殊嵌套优先方式、自动循环优先方式、特殊循环优先方式、特殊屏蔽方式、查询方式等。 它是由操作命令字的设置来实现的,设置时,次序上没有严格要求,但端口地址有严格规定,OCW1必须写入奇地址端口,OCW2和OCW3必须写入偶地址端口。 操作命令字 (1) OCW1——中断屏蔽操作命令字 A0:A0=1,OCW1命令字必须写入8259A奇地址端口。 OCW1命令字的各位直接对应中断屏蔽寄存器IMR的各位,当OCW1中某位Mi为1,对应位的中断请求受到屏蔽,某位为0,对应位的中断请求得到允许。(对比IF的设置,正好相反。) (2) OCW2——优先权循环方式和中断结束方式操作命令字 操作命令字 OCW2无效。 0 1 0 特殊EOI结束方式。 一旦中断处理结束,CPU向8259A发出EOI结束命令,8259A将中断服务寄存器ISR中,由L2~L0字段指定的中断级别的相应位清0。 1 1 0 普通EOI结束方式。一旦中断处理结束,CPU向8259A发出EOI结束命令,将中断服务寄存器ISR中当前级别最高的置1位清0。一般用在完全嵌套(包括特殊全嵌套)工作方式。 1 0 0 置位优先级循环。 8259A按L2~L0字段确定一个最低优先级,最高优先级赋给它的下一级,其它中断优先级依次循环赋给,系统工作在优先级特殊循环方式。 0 1 1 设置特殊EOI循环。一旦中断结束,将中断服务寄存器ISR中由L2~L0字段给定级别的相应位清0,此级赋于最低优先级,最高优先级赋给它的下一级,其它中断优先级依次循环赋给。 1 1 1 设置普通EOI循环。一旦中断结束,8259A将中断服务寄存器ISR中当前级别最高的置1位清0,此级赋予最低优先级,最高优先级赋给它的下一级,其它中断优先级依次循环赋给。 1 0 1 清除自动EOI循环。 0 0 0 设置自动EOI循环方式。在中断响应周期的第二个负脉冲信号结束时,将ISR寄存器中正在服务的相应位置0,本级赋予最低优先级,最高优先级赋给它的下一级,其它中断优先级依次循环赋给。 0 0 1 功 能 EOI SL R 操作命令字 (3) OCW3——特殊屏蔽方式和查询方式操作命令字 OCW3功能有三个:设定特殊屏蔽方式,设置对8259A寄存器的读出及设置中断查询工作方式。 IN AL , 20H (IRR,ISR) IN AL , 20H (P=1,查询字) IN AL , 21H (IMR)(任何时候) W0 W1 W2 × × × × IR 0 D0 D1 D2 D3 D4 D5 D6 D7 A0 无效 × 0 置位为特殊屏蔽方式 1 1 复位为普通屏蔽方式 0 1 功 能 SMM ESMM 注意:通过OCW3设置P=1的查询命令字后,8259A不再通过INT引脚向CPU发中断请求; 要取消查询方式,可以再次发送OCW3,并使P=0。 微机系统区别接口电路(或接口芯片)中不同的寄存器(或控制信息、状态信息等)的主要方法: 利用读/写控制信号区别写入的控制寄存器和读出的状态寄存器; 利用地址信号区别不同I/O端口地址的寄存器; 由命令字中的标志位说明是哪个寄存器; 由芯片内部顺序控制逻辑按一定顺序识别不同的寄存器; 由前面写入的命令字决定后续操作的寄存器。 8259A的中断级联 一片8259A管理8级中断,当申请中断的外设多于8级时,可以将8259A级联使用,最简单的级联方式为两级,第一级为8259A主片,第二级为8259A从片,主片可接1~8片8259A从片,这样最多可管理64级中断源。 在级联系统中,主片和从片都要设置初始化命令字进行初始化,设置主片初始化命令字与无级联单片8259A初始化时不同之处有以下几点: (1) 级联时,ICW1中SNGL=0;单片时,SNGL=1。 (2) 级联时,要求设置ICW3,若某个IRi引脚上连有从片,主片ICW3的对应位设为1,未连接从片的对应位设为0。单片不需要设置ICW3。 (3) 级联时,主片可设置为特殊全嵌套工作方式,ICW4中SFNM=1。 8259A级联方式连接图 8259A的中断级联 设置从片初始化命令字时,要注意以下两点: (1) 从片的ICW1中,SNGL=0。 (2) 从片必须设置ICW3,由ICW3中三个最低有效位ID2~ID0的组合来标记此从片连到主片哪个IRi引脚上。 级联时中断优先级判别是由从片判别本片内最高优先级后,向8259A主片再申请中断,然后由主片判别当前最高优先级,向CPU发中断请求信号INT。注意当8259A主片设置为特殊全嵌套工作方式时,允许相同级别的中断请求通过。 0 0 0 0 0 0 1 0 (从片1#) D0 D1 D2 D3 D4 D5 D6 D7 IRR 0 0 0 0 0 0 1 0 (从片1#) D0 D1 D2 D3 D4 D5 D6 D7 ISR 0 0 0 0 0 0 1 0 (主片) D0 D1 D2 D3 D4 D5 D6 D7 IRR 0 0 0 0 0 0 1 0 (主片) D0 D1 D2 D3 D4 D5 D6 D7 ISR 0 1 0 0 0 0 0 0 (从片1#) D0 D1 D2 D3 D4 D5 D6 D7 IRR 0 1 0 0 0 0 1 0 (从片1#) D0 D1 D2 D3 D4 D5 D6 D7 ISR 在CPU中断服务过程中,8259A从片1#收到IR1端来的中断请求 8259A 在 IBM PC/AT 微 机 上 的 应 用 初始化主片8259A 外部可屏蔽中断服务程序的编写 1、主程序中的初始化 (1)设置中断向量。 (2) 8259A初始化编程;根据需要设置8259A的中断屏蔽寄存器的中断屏蔽位以及其他操作命令字。 (3)设置CPU中断允许位标志IF(开中断指令:STI)。 外部可屏蔽中断服务程序的编写 3、级联缓冲/比较器 级联缓冲/比较器用于多片8259A级联使用,主从之间专用的总线、中断请求寄存器IRR(Interrupt Request Register) 中断请求寄存器是一个8位寄存器,存放外部输入的中断请求信号 IR7~IR0。当某个IR端有中断请求时,IRR相应的某位置“1”。可以允许8个中断请求信号同时进入,此时IRR寄存器被置成全“1”。当中断请求被响应时,IRR的相应位复位。 5、中断屏蔽寄存器IMR(Interrupt Mask Register) 中断屏蔽寄存器是一个8位寄存器,用来存放对各级中断请求的屏蔽信息。可用软件编程设置IMR寄存器。当D5=1,表示由IR5引入的中断请求不允许进入中断优先级判别器。(与IF的设置恰恰相反) 6、优先级判别器PR 优先级判别器对保存在IRR寄存器中的中断请求进行优先级识别,送出最高优先级的中断请求到中断服务寄存器ISR中去。当出现多重中断时,PR判定是否允许所出现的中断去打断正在处理的中断,让优先级更高的中断优先处理。 Intel 8259A 内部结构 7、中断服务寄存器ISR(Interrupt Service Register) 中断服务寄存器是一个8位寄存器,保存正在处理中的中断请求信号,某个IR端的中断请求被CPU响应后,当CPU发出第一个INTA信号时,ISR寄存器中的相应位置“1”,一直保持到该级中断处理结束为止。允许多重中断时,ISR多位同时被置成“1”。此寄存器可被CPU读出。中断处理结束前,要使用指令清除这一位。 8、控制电路 控制电路是8259A的内部控制器。根据中断请求寄存器IRR的置位情况和中断屏蔽寄存器IMR设置的情况,通过优先级判别器PR判定优先级,向8259A内部及其它部件发出控制信号。并向CPU发出中断请求信号INT和接收CPU的中断响应信号INTA,使中断服务寄存器ISR相应位置“1”,并使中断请求寄存器IRR相应位置“0”。当CPU第二个INTA信号到来,控制8259A送出中断类型号,使CPU转入中断服务子程序。如果命令字ICW4的中断自动结束位为“1”,则在第二个INTA脉冲结束时,将8259A中断服务寄存器ISR的相应位清“0”。 Intel 8259A 内部结构 中断响应时序 最大模式 T2和T3 (1) 8086要求中断请求信号INTR是一个电平信号,必须维持两个时钟周期的高电平。否则CPU执行完一条指令后,如果总线接口部件正在执行总线周期,则会使中断请求得不到响应而执行其他的总线工作在最大模式时,不从INTA引脚上发中断响应脉冲,而是由S2S1S0组合为000,通过总线发出INTA中断响应信号。 (3) 8086不允许在两个INTA周期之间响应总线保持请求(通过HOLD请求),但如果同时出现中断请求和总线保持请求,则CPU先对总线) 外设的中断类型号一般通过16位数据总线,提供中断向量的外设接口应该接在数据总线) 在两个中断响应总线周期中,地址/数据/状态总线是浮空的,但是M/IO为低电平,而ALE在每个总线状态输出一个高电平脉冲,作为地址锁存信号。 (6) 软件中断和非屏蔽中断不按照这种时序来响应中断。 中断响应时序 8259A中断管理方式 1、8259A的编程结构 优先级和结束方式 屏蔽和查询方式 (1)中断管理方式是通过8259A初始化时写入初始化命令字和操作命令字来设置的。 (2)初始化命令字写入寄存器ICW1~ICW4,它是由初始化程序设置的,初始化命令字一经设定,在系统工作过程中就不再改变。 (3)操作命令字写入寄存器OCW1~OCW3,它是由应用程序设定的,用来对中断处理过程进行控制,在系统运行过程中,操作命令字可以重新设置。 8259A中断管理方式 1、8259A的编程结构 2、优先级设置方式 8259A中断管理方式 (1) 完全嵌套方式 若8259A初始化后没有设置其它优先级的方式,就自动进入完全嵌套方式。在这种方式下,中断优先级分配固定级别0~7级,IR0具有最高优先级,IR7优先级最低。也可用初始化命令字ICW4中SFNM=0,将8259A置成完全嵌套优先级方式。 允许打断正在处理的中断,优先处理更高级的中断,实现中断嵌套,但禁止同级与低级中断请求进入。 有两种中断结束方式:普通EOI结束方式和自动AEOI结束方式。 (2) 特殊全嵌套工作方式 在级联时,还有一种特殊全嵌套工作方式,它与全嵌套工作方式基本相同。区别在于当处理某级中断时,有同级中断请求进入,8259A也会响应,从而实现了对同级中断请求的特殊嵌套。 2、优先级设置方式 8259A中断管理方式 在级联方式中,主片编程为特殊全嵌套工作方式,从片为其它优先级方式(完全嵌套方式或优先级循环方式)。 特殊全嵌套工作方式的设置是主片初始化时ICW4中的SFNM=1,同时将从片ICW4中AEOI位 置“0”,设成非自动结束方式,通常用特殊EOI结束方式。 2、优先级设置方式 8259A中断管理方式 (3) 优先级自动循环方式 在优先级自动循环方式中,优先级别可以改变。初始优先级次序规定为IR0、IR1、…、IR7,当任何一级中断被处理完后,它的优先级别变为最低,将最高优先级赋给原来比它低一级的中断请求,其它依次类推。 用操作命令字OCW2中R、SL=10就可设置优先级自动循环方式。 根据结束方式不同,有两种自动循环方式:普通EOI循环方式和自动EOI循环方式。 (4) 优先级特殊循环方式 优先级特殊循环方式和优先级自动循环方式相比,不同之处在于优先级特殊循环方式中,初始时最低优先级由程序规定,最高优先级也就确定了。例如初始时指定IR1为最低优先级,则IR2为最高优先级,其它依次类推。而优先级自动循环方式初始时最高优先级一定是IR0。 用操作命令字OCW2中R、SL=11就可设置优先级特殊循环方式,结束方式通常用特殊EOI循环方式。 2、优先级设置方式 8259A中断管理方式 3、中断源屏蔽方式 8259A中断管理方式 (1) 普通屏蔽方式 将中断屏蔽寄存器IMR中某一位或某几位置“1”,即可将对应位的中断请求屏蔽掉。普通屏蔽方式的设置通过设置操作命令字OCW1来实现。 [例] 屏蔽第2、3、5、6位进入的中断请求,假设8259A的端口地址为20H,21H。 MOV AL,01101100H ;屏蔽字 OUT 21H,AL 对OCW1的设置可以在主程序中,也可放在中断服务程序中,具体根据中断处理要求而定。 3、中断源屏蔽方式 8259A中断管理方式 (2) 特殊屏蔽方式 此方式能对本级中断进行屏蔽,而允许优先级比它高或低的中断进入,特殊屏蔽方式总是在中断处理程序中使用,特殊屏蔽方式的设置是通过设置操作命令字OCW3中的ESMM、SMM=11来实现的,例如: 当前正在执行IR3的中断服务程序,设置了特殊屏蔽方式后,再用OCW1对中断屏蔽寄存器中第3位置“1”时,就会同时使当前中断服务寄存器中对应位自动清“0”,这样可以既屏蔽了当前正在处理的中断,又开放了较低级别的中断。 待中断服务程序结束时,应将IMR寄存器的第3位复位,并将SMM位复位,表示退出特殊屏蔽方式。 在固定优先级方式中,对中断结束的处理有自动AEOI结束方式和非自动结束方式,非自动结束方式又分普通EOI结束方式和特殊SEOI结束方式。 为什么要进行中断结束处理? 中断结束处理实际上就是对中断服务寄存器ISR中对应位的处理。当一个中断得到响应时,8259A使ISR寄存器中对应位置“1”,表明此对应外设正在服务,并为中断优先级判别器提供判别依据。中断结束时,必须使ISR寄存器中对应位置“0”,否则中断优先级判别会不正常。什么时刻使ISR中对应位置“0”,就产生不同的中断结束方式。 8259A中断管理方式 4、中断结束方式 (1) 普通EOI结束方式 在完全嵌套工作方式下,任何一级中断处理结束返回上一级程序前,CPU向8259A传送EOI结束命令字,8259A收到EOI结束命令后,自动将ISR寄存器中级别最高的置“1”位 清“0”(此位对应当前正在处理的中断)。 EOI结束命令字必须放在返回指令IRET前,没有EOI结束命令,ISR寄存器中对应位仍为“1”,继续屏蔽同级或低级的中断请求。 普通EOI结束命令字是设置OCW2中EOI位为1,即OCW2中R、SL、EOI组合为001。对IBM PC/XT机,发EOI结束命令字指令为: MOV AL,20H OUT 20H,AL ;AL?OCW2 8259A中断管理方式 4、中断结束方式 (2) 特殊EOI结束方式 在非全嵌套工作方式下,中断服务寄存器无法确定哪一级中断为最后响应和处理的,这时要采用特殊SE0I结束方式。CPU向8259A发特殊EOI结束命令字,命令字中将当前要清除的中断级别也传给8259A。此时,8259将ISR寄存器中指定级别的对应位清“0”,它在任何情况下均可使用。 特殊EOI结束命令字是将OCW2中R、SL、EOI设置成011,而L2~L0三个位指明了中断结束的对应位。 8259A中断管理方式 4、中断结束方式 (3) 自动EOI结束方式 在AEOI方式中,任何一级中断被响应后,ISR寄存器对应位置“1”,但在CPU进入中断响应周期,发第二个INTA脉冲后,8259A自动将ISR寄存器中对应位清“O”。此时,尽管对某个外设正在进行中断服务,但对8259A来说,ISR寄存器中没有指示,好象已结束了中断处理一样。 通常在只有一片8259A,多个中断不会嵌套情况下使用。 自动AEOI方式设置是在8259A初始化时,用初始化命令字ICW4中使AEOI=1的方法来实现的。 在级联方式下,一般用非自动结束方式,无论用普通EOI结束方式,还是用特殊EOI结束方式,中断处理结束时,要发两次中断结束命令,一次是对主片发的,另一次是对从片发的。 8259A中断管理方式 4、中断结束方式 8259A中断管理方式 5、循环优先级的循环方式 (1) 普通EOI循环方式 在主程序或中断服务程序中设置操作命令字,当任何一级中断被处理完后,使CPU给8259A回送普通EOI循环命令,8259A收到EOI循环命令后,将ISR寄存器中,最高优先级的IRi置“1”位清“0”,并赋给它最低优先级,将最高优先级赋给它的下一级IRi+1,其它依次类推。 普通EOI循环方式命令字是设置OCW2。在非自动结束方式中,OCW2中的R、SL、EOI设置成101,L2~L0不起作用。 (2) 特殊EOI循环方式 特殊EOI循环方式即指定最低优先级循环方式,最低优先级由编程确定,最高优先级也相应而定,这样在当前中断服务程序结束前,使CPU给8259A回送特殊EOI结束命令,同时将当前就要结束的中断级别也传送给8259A,8259A收到此命令字后,将ISR中相应位清“0”。显然这种结束方式最为安全可靠。 8259A中断管理方式 5、循环优先级的循环方式 设定特殊EOI循环方式时,设置OCW2中R、SL、EOI=111, L2~L0指定了一个最低优先级。 (3) 自动EOI循环方式 在自动EOI循环方式中,任何一级中断被响应后,中断响应总线周期中第二个INTA信号的后沿自动将ISR寄存器中相应位清“0”,并立即改变各级中断的优先级别,改变方式与普通EOI循环方式相同。使用这种方式要小心,防止重复嵌套产生。 自动EOI循环方式设置是OCW2中R、SL、EOI=100。 8259A中断管理方式 5、循环优先级的循环方式 (1) 边沿触发方式 在边沿触发方式下,8259A将中断请求输入端出现的上升沿作为中断请求信号。中断请求输入端出现上升沿触发信号后,可以一直保持高电平。 (2) 电平触发方式 在电平触发方式下,8259A将中断请求输入端出现的高电平作为中断请求信号。但当中断得到响应后,中断输入端必须及时撤出高电平,否则在CPU进入中断处理过程,并且开中断的情况下,原输入端的高电平会引起第二次中断的错误。 (3) 中断查询方式 在中断查询方式下,外部设备向8259A发中断请求信号,中断请求可以是边沿触发,也可以是电平触发。但8259A不通过INT信号向CPU发中断请求信号,CPU要使用软件查询来确定中断源。 8259A中断管理方式 6、中断请求引入方式 (1)中断源在IR0—IR7上产生中断请求; (2)中断请求被锁存在IRR中,经IMR”屏蔽”,送PR; (3)控制电路接收中断请求,向CPU输出INT信号 (4)CPU接收8259A 的INT信号,在IF=1下,发INTA; (5)设置ISR中对应位; (6)若8259A作为主片。则在第一个INTA将级联地址从CAS0— CAS2送出;若8259A单独使用或是由CAS0—CAS2选择的从片,就在第二个INTA中将中断类型号输出到低8位数据总线)CPU读出该中断类型号,转到对应的中断服务程序; (8)中断处理结束前,中断处理程序向8259A发送一条EOI(中断结束)命令,使ISR相应位复位,本次中断结束; 8259A中断管理方式 7、工作过程 (1)固定优先级 各个中断源优先级由它所连接的引脚编号决定; 1、全嵌套方式(常用的一种工作方式) 若8259A初始化后没有设置其它优先级的方式,就自动进入全嵌套方式。IR0具有最高优先级,IR7优先级最低。 2、 特殊全嵌套方式(一般用于级联情况下) 在级联方式中,从片上8个中断请求有着不同的优先级别,但从主片来看,属于同一级别。假设从片为全嵌套方式,先后收到两次中断请求,且第二次有较高的优先级,该从片就会两次通过INT向上一级申请中断,如果主片为全嵌套工作方式,则它不会响应来自同一个引脚的第二次中断请求,而主片处于特殊全嵌套工作方式时,就能响应请求。 一般情况下:单片全嵌套方式;多片,主片特殊全嵌套方式,从片全嵌套方式。 8259A中断管理方式 优先权管理小结 (2)循环优先级方式 各个中断申请具有大体相同的优先级。 1、优先级自动循环方式 初始优先级次序规定为IR0、IR1、…、IR7,当任何一级中断被处理完后,它的优先级别变为最低,将最高优先级赋给原来比它低一级的中断请求,其它依次类推。 2、优先级特殊循环方式 初始时最低优先级由程序规定,最高优先级也就确定了。 8259A中断管理方式 优先权管理小结 8259A中断管理方式 中断结束方式小结 8259A的编程方法 对8259A的编程有两类命令字:初始化命令字ICW(Initialization Command Word)和操作命令字OCW(Operation Command Word)。系统复位后,初始化程序对8259A置入初始化命令字。初始化后可通过发出操作命令字OCW来定义8259A的操作方式,实现对8259A的状态、中断方式和优先级管理的控制。初始化命令字只发一次,操作命令字允许重置,以动态改变8259A的操作与控制方式。 初始化命令字 ICW 对8259A编程初始化命令字,共预置4个命令字:ICW1、ICW2、ICW3、ICW4。初始化命令字必须顺序填写,但并不是任何情况下都要预置4个命令字,用户根据具体使用情况而定。 (1) ICW1——芯片控制初始化命令字 注意:ICW1的D4位必须为1,用作ICW1的标志。 初始化命令字 ICW 2、ICW2——设置中断类型号的初始化命令字 A0:A0=1,表示ICW2必须写到8259A的奇地址端口中。 8259A中IR0端对应的中断类型号为中断类型号的基值,它是可以被8整除的正整数,ICW2用来设置这个中断类型号基值,由此提供外部中断的中断类型号。 ICW2低3位为0,高5位由用户设定。当8259A收到CPU发来的第二个INTA信号,它向CPU发送中断类型号,其中高5位为ICW2的高5位,低3位根据IR0~IR7中响应哪级中断(对应为000~111b)来确定。 初始化命令字 ICW 3、ICW3——标识主片/从片的初始化命令字 初始化命令字 ICW 到CPU的INTR引脚 初始化命令字 ICW 4、ICW4——方式控制初始化命令字 ICW1为1时,要求预置ICW4命令字,对8086/8088系统必须预置ICW4。 * * 第六章 微机的中断系统 中断源:引起程序中断的事件称中断源。中断源有外部中断和内部中断 。 中断请求、中断响应、中断返回:中断请求何时发生是随机的。CPU在每条指令的最后一个周期去检测INTR引脚,CPU一旦检测到有中断请求,在满足中断响应的条件下(IF=1),CPU响应中断,向外设发中断响应信号 。并保护断点(当前CS、IP和PSW值入栈),然后转向中断服务程序。中断服务程序执行完毕,CPU返回原执行程序的中断处,继续向下执行,称为中断返回。 中断向量表:CPU响应中断后,必须由中断源提供地址信息,引导程序进入中断服务子程序,这些中断服务程序的入口地址存放在中断向量表中。内存中专门开辟了一个区域,存放中断向量表(也称中断矢量表)。 中断优先级、中断嵌套:当有多个中断源请求中断时,中断系统判别中断申请的优先级,CPU响应优先级高的中断,挂起优先级低的中断。当CPU在运行中断服务子程序时,又有新的更高优先级的中断申请进入,CPU要挂起原中断进入更高级的中断服务子程序,实现中断嵌套功能。 中断屏蔽:当中断源申请中断时,CPU可以由软件设置,使之不能响应,称为中断屏蔽。 中断意义:分时处理;响应速度快;可处理随机事件。 什么是中断? 中断系统应具有以下功能: (1) 能实现中断响应、中断服务、中断返回、中断屏蔽; (2) 能实现中断优先级排队; (3) 能实现中断嵌套——优先级高的中断能中断低级的中断处理。 中断分类 边沿触发、两个时钟周期高电平 高电平触发、维持到CPU响应中断才结束 可屏蔽中断处理的过程一般分成几步:中断请求;中断响应;保护现场;转入执行中断服务子程序;恢复现场和中断返回。 CPU响应可屏蔽中断要有三个条件: 外设提出中断申请 中断允许(IF=1,开中断) 本中断屏蔽位未被屏蔽 可屏蔽中断处理过程 开中断 关中断 可屏蔽中断的工作流程 微机中断处理流程图 有些情况要再执行完下一条指令才响应外部中断: 1、正在执行封锁指令; 2、向段寄存器传送数据(MOV、POP); 遇到等待指令和串操作指令时,在当前指令一个基本操作完成后即可进入中断响应。 例:软件中断执行的过程 中断向量表 微机中断管理控制器管理的中断 注意:系统使用的中断类型,不允许用户使用和更改:中断向量不能修改;在RAM中的中断服务程序代码不能修改。 如何编写用户自己的中断服务程序?(对软中断而言) (1)确定中断类型号,设置中断向量; (2)使用 INT i8 指令调用软件中断服务程序。 主程序 (1)保护现场(保存某些寄存器的内容)。 (2)若允许外部可屏蔽中断嵌套,则开中断(STI)。 (3)处理中断服务。 (4)关中断。 (5)恢复现场。 (6)返回被中断的程序(IRET)。 中断服务程序 中断向量的设置: 1、一种方法用指令来设置; 2、利用DOS功能调用来设置。 [例] 用指令来设置中断服务程序的入口地址到中断类型号n所对应的中断向量表中。 MOV AX,0 ;主程序中设置中断向量 MOV ES,AX MOV DI,N*4 ;中断类型号N*4 MOV AX,OFFSET INTR_PROG CLD STOSW ;偏移地址送[4n],[4n+1]单元 MOV AX,CS STOSW ;段地址送[4n+2],[4n+3]单元 …… INTR_PROG: ;中断服务子程序 PUSH AX STI …… CLI POP AX IRET …… 假设中断服务程序和主程序在同一个代码段: …… MOV AX,0 MOV ES,AX MOV BX,N*4 MOV AX,OFFSET INTRP MOV ES:WORD PTR[BX],AX ;设置偏移地址 MOV AX,SEG INTRP MOV ES:WORD PTR[BX+2],AX ;设置段地址 …… INTRP: …… IRET …… 中断向量的设置 实际上,我们在设置或检查任何中断向量时,总是避免直接使用中断向量的绝对地址,而是利用DOS功能调用 INT 2lH设置中断向量和取出中断向量。此外要注意,在设置自己的中断向量时,应先保存原中断向量,再设置新的中断向量,在程序结束前恢复原中断向量。 中断向量的设置(DOS功能调用INT 21H) 功能号:AH=25H 入口参数: AL=中断类型号,DS:DX ? 中断向量(段地址:偏移地址) 出口参数:无 获取某个中断类型的中断向量(DOS功能调用INT 21H) 功能号:AH=35H 入口参数:AL=中断类型号 出口参数:ES:BX ? 中断向量(段地址:偏移地址) [例] 利用DOS功能调用 设置中断向量和获取中断向量。 DATA SEGMENT INTOFF DW ? ;用于保存原中断服务程序的偏移地址 INTSEG DW ? ;用于保存原中断服务程序的段地址 INTMSG DB ‘A INSTRUCTION INTERRUPT!,‘$ DATA ENDS ; CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX ;初始化数据段寄存器 MOV AX,3580H INT 21H ;获取系统原80H的中断向量 MOV INTOFF,BX ;保存偏移地址 MOV INTSEG,ES ;保存段地址 PUSH DS MOV DX,OFFSET NEW80H MOV AX,SEG NEW80H MOV DS,AX MOV AX,2580H INT 21H ;设置本程序的80H中断向量 POP DS INT 80H ;调用自己的80H中断服务程序 MOV DX,INTOFF MOV AX,INTSEG MOV DS,AX MOV AX,2580H ;恢复系统原80H中断向量 ;注意:先设置DX,再设置DS。因为如果先改变DS, ;就不能准确获得INTOFF变量值。 INT 21H MOV AX,4C00H INT 21H ;80H类型中断服务程序:显示一个字符串。 NEW80H PROC PUSH DX PUSH AX ;保护现场 STI ;开中断 MOV DX,OFFSET INTMSG MOV AH,09H INT 21H CLI POP AX POP DX ;恢复现场 STI IRET ;中断返回 NEW80H ENDP ;中断服务程序结束 CODE ENDS END START 中断优先级 中断优先级(优先权)是指系统设计者事先根据轻重缓急,给每个中断源确定的优先服务的级别。微机系统需要根据中断优先级的高低确定先为那个中断源服务。 IBM PC机中规定优先级从高到低的次序为: l?????? 除法错,INTO,INT n l?????? 不可屏蔽中断(NMI) l?????? 可屏蔽中断(INTR) l?????? 单步中断 可屏蔽中断优先级的确定方法: (1)软件查询的方法: 可屏蔽中断优先级的确定方法: (1)软件查询的方法: 软件查询的方法的流程图 可屏蔽中断优先级的确定方法: (2)硬件查询优先方式——菊花链法 (3)专用芯片的管理方式 (Intel 8259A) 中断嵌套是指在中断服务过程中,CPU又得到优先权更高的外部可屏蔽中断的请求,则当前的中断服务被打断,优先权更高的中断优先获得服务,待返回后,再继续执行被打断的中断服务。 只要条件满足,可以发生多重嵌套,也被称为多重中断。 对于软件中断指令和NMI中断,CPU必须立即无条件响应,对于外部可屏蔽中断请求,只有IF=1,CPU才能响应。 因此,可屏蔽中断的嵌套发生的条件是: (1)IF=1; (2)在外部可屏蔽中断服务过程中,CPU又得到优先权更高的外部可屏蔽中断的请求。 可屏蔽中断的嵌套 可屏蔽中断的嵌套 对于8086系统中,什么原因使IF=0? (1)系统复位操作后; (2)任一中断响应后(包括内、外部所有的中断); (3)执行CLI指令后。 因此,要实现可屏蔽中断的嵌套,必须在当前的中断服务程序中设置STI指令。 IRET指令对IF的影响: 中断服务程序最后执行中断返回指令IRET,将使IF恢复到进入该中断以前的状态。(PSW) 多个可屏蔽中断源中断流程图 响应中断后自动设置 防止中断重复嵌套 由PIC控制 允许响应优先级高的中断请求 恢复现场的工作不希望被中断打断 可屏蔽中断的嵌套 可屏蔽中断的嵌套 Intel 8259A 8259A是8086/8088系统的可编程中断控制器,它的主要功能是: 每片具有8级优先级控制,通过级联(9片8259A)可以扩展到64级优 先级控制。 (2) 每一级中断可由程序单独屏蔽或允许。 (3) 可提供中断类型号传送给CPU。 (4) 可以通过编程选择多种不同工作方式。 D7~D0:双向数据线,三态,它直接或通过总线驱动器与系统的数据总线:外设的中断请求信号输入端,输入,中断请求信号可以是电平触发或边沿触发。中断级联时,连接8259A从片INT端。 RD:读命令信号,输入,低电平有效,用来控制数据由8259A读到CPU。 WR:写命令信号,输入,低电平有效,用来控制数据由CPU写到8259A。 CS:片选信号,输入,通过译码电路与高位地址总线A的两个端口,输入,连低位地址线,用于选择内部端口。 引脚信号 Intel 8259A INT:向CPU发出的中断请求信号,输出,与CPU的INTR端相连。 INTA:CPU给8259A的中断响应信号,输入。8259A要求两个负脉冲的中断响应信号,第一个是CPU响应中断的信号,第二个INTA结束后,CPU读取8259A送去的中断类型号。 CAS2~CAS0:双向级联信号线A作主片时,为输出线,作从片时,为输入线。与SP/EN配合实现8259A级联。 SP/EN:编程/双向使能缓冲。采用非缓冲方式,决定本片8259A是主片还是从片:若SP=1,则为主片;若SP=O,则为从片。 采用缓冲方式,启动8259A到CPU之间的数据总线驱动器,EN=O,表示允许8259A通过缓冲器输出,EN =1,表示写8259A 。 引脚信号 Intel 8259A 8259A内部结构框图 Intel 8259A 1、数据总线缓冲器 数据总线A与系统数据总线位数据总线、读写控制电路 读写控制电路接收CPU送来的读/写命令、片选信号CS及端口选择信号A0。高位地址译码后送作片选信号。A0连地址总线A的两个I/O端口,一个为奇地址,另一个偶地址。 在IBM PC/XT机中用A9~A1译码来产生信号,组合为00001××××b,产生I/O端口地址为20H~3FH,共32个。而8259A只需要两个I/O端口地址,IBM PC/XT取20H(A0=0)、21H(A0=1)两个地址在编程时使用。但其它30个地址为影象地址,不可能再分配给其它I/O设备使用。 当8位I/O接口芯片与8086 CPU的l6位数据总线与CPU数据总线位相连。为了保证CPU与8259A用低8位传输数据,CPU的A1连8259A的A0。这样对CPU来说A0=0,A1可以为1或为0,CPU读写始终是用偶地址。对8259A来说A1可以为1或为0,给8259A的端口分配了两个地址,一个奇地址,一个偶地址,符合了8259A的编程要求。 内部结构

http://bluecaleel.com/xiangliangpingbi/332.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有