《8259中断控制器实验》的实验报告

更新时间:2024-05-12 01:37:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验六 8259中断控制器实验

6.1 实验目的

(1) 学习中断控制器8259的工作原理。

(2) 掌握可编程控制器8259的应用编程方法。

6.2 实验设备

PC微机一台、TD-PIT+实验系统一套。

6.3 实验内容

1. 单中断应用实验

(1) 编写中断处理程序,利用PC机给实验系统分配的中断线,使用单次脉冲单元的KK1+按键模拟中断源,每次PC机响应中断请求,在显示器上显示一个字符。

(2) 编写中断处理程序,利用PC机给实验系统分配的中断线,使用单次脉冲单元的KK1+按键模拟中断源,每次PC机响应中断请求,在显示器上显示“Hello”,中断5次后退出。

2.扩展多中断源实验

利用实验平台上8259控制器对扩展系统总线上的中断线INTR进行扩展。编写程序对8259控制器的IR0和IR1中断请求进行处理。

6.4 实验原理

1. 8259控制器的介绍

中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片。它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。同时,在不需增加其他电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。它的管理功能包括:1)记录各级中断源请求,2)判别优先级,确定是否响应和响应哪一级中断,3)响应中断时,向CPU传送中断类型号。8259A的内部结构和引脚如图6-1所示。

8259A的命令共有7个,一类是初始化命令字,另一类是操作命令。8259A的编程就是根据应用需要将初始化命令字ICW1-ICW4和操作命令字OCW1-OCW3分别写入初始化命令寄存器组和操作命令寄存器组。ICW1-ICW4各命令字格式如图6-2所示,OCW1-OCW3各命令字格式如图6-3所示,其中OCW1用于设置中断屏蔽操作字,OCW2用于设置优先级循环方式和中断结束方式的操作命令字,OCW3用于设置和撤销特殊屏蔽

方式、设置中断查询方式以及设置对8259内部寄存器的读出命令。

图6-1 8259内部结构和引脚图

图6-2(a) ICW1格式

图6-2(b) ICW2格式

图6-2(c) ICW3格式

图6-2(d) ICW4格式

图6-3 OCW命令字格式

2.8259寄存器及命令的控制访问

在硬件系统中,8259仅占用两个外设接口地址,在片选有效的情况下,利用A0来寻址不同的寄存器和命令字。对寄存器和命令的访问控制如表6-1所示。

表6-1 8259寄存器及命令的访问控制

A0 0 1 0 0 0 1 D4 0 0 1 × D3 0 1 × × 读信号 0 0 1 1 1 1 写信号 1 1 0 0 0 0 片选 0 0 0 0 0 0 操作 读出ISR,IRR的内容 读出IMR的内容 写入OCW2 写入OCW3 写入ICW1 写入OCW1,ICW2,ICW3,ICW4

3. PC微机系统中的8259

在80x86系列PC微机系统中,系统中包含了两片8259A中断控制器,经级连可以管理15级硬件中断,但其中部分中断号已经被系统硬件占用,具体使用情况如表6-2示。两片8259A的端口地址为:主片8259使用020H和021H两个端口;从片使用0A0H和0A1H两个端口。系统初始化两片8259的中断请求信号均采用上升沿触发,采用全嵌套方式,优先级的排列次序为0级最高,依次为1级、8级~15级,然后是3级~7级。

在扩展系统总线上的INTR对应的中断线就是PC机保留中断其中的一个。对INTR中断的初始化PC机已经完成,在使用时主要是将其中断屏蔽打开,修改中断向量。

表6-2 PC微机系统中的硬件中断

中断号 主8259A IRQ0 主8259A IRQ1 主8259A IRQ2 主8259A IRQ3 主8259A IRQ4 主8259A IRQ5 主8259A IRQ6 主8259A IRQ7 从8259A IRQ8 从8259A IRQ9 从8259A IRQ10 从8259A IRQ11 从8259A IRQ12 从8259A IRQ13 从8259A IRQ14 从8259A IRQ15 功能 日时钟/计数器0 键盘 接从片8259A 串行口2 串行口1 并行口2 软盘 并行口1 实时钟 保留 保留 保留 保留 协处理器中断 硬盘控制器 保留 6.5 实验说明及步骤

1. 单中断应用实验

本实验要求使用总线上INTR中断请求线完成一次单中断应用实验。中断处理程序完成在屏幕上显示字符“9”。实验前先运行CHECK程序,得到INTR所对应的中断号、相应的初始化命令字寄存器ICW及操作命令字寄存器OCW的地址、开屏蔽的命令字、中断矢量地址和PCI卡中断控制寄存器INTCSR的地址。得到这些信息后就可以开始设计实验了。参考程序流程如图6-5所示。

实验步骤如下。

(1) 确认从PC机引出的两根扁平电缆已经连接在实验平台上。 (2) 首先运行CHECK程序,查看INTR中断号及相关信息。 (3) 参考实验流程图编写程序,然后编译链接。

(4) 将单次脉冲单元的KK1+连接到系统总线上的INTR。 (5) 运行程序,按动KK1+按键,观察中断是否产生。

2.扩展多中断源实验

利用实验平台上的8259控制器,可以对总线上的INTR进行扩展。将8259的INT连接到INTR,8259的8路中断请求线IR0~IR7就成了单一INTR中断请求线的扩充。这8路中断源共用INTR的中断矢量,共用INTR的中断服务线程。在INTR的中断服务线程中通过对8259OCW3的查询,以确定是IR0~IR7中哪个产生中断,然后转到相应的服务线程进行处理。将8259的OCW3中P位置1即可执行查询,查询字格式如图6-6所示。

中断向量号 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH 70H 71H 72H 73H 74H 75H 76H 77H 中断向量地址 0020H~0023H 0024H~0027H 0028H~002BH 002CH~002FH 0030H~0033H 0034H~0037H 0038H~003BH 003CH~003FH 01C0H~01C3H 01C4H~01C7H 01C8H~01CBH 01CCH~01CFH 01D0H~01D3H 01D4H~01D7H 01D8H~01DBH 01DCH~01DFH

(a)主程序 (b)中断处理程序 图6-5 8259中断应用实验(1)参考程序流程图

图6-6 8259 OCW3查询命令字格式

本实验要求实现8259控制器IR0、IR1两路中断。用KK1+和KK2+模拟两个中断源,在IR0对应的服务程序中显示字符“0”,在IR1对应的服务程序中显示字符“1”。实验程序参考流程如图6-7所示。参考实验电路如图6-8所示。

实验步骤如下:

(1) 确认从PC机引出的两根扁平电缆已经连接在实验平台上。 (2) 首先运行CHECK程序,查看INTR中断号及相关信息。 (3) 参考实验流程图编写程序,然后编译链接。 (4) 参考实验接线图连接实验电路。

(5) 运行程序,按动KK1+、KK2+按键,观察中断响应是否正常。

(a)主程序 (b)中断处理程序 图6-7 8259中断应用实验(2)参考程序流程图

图6-8 8259中断应用实验(2)参考接线图

6.6 思考题

1. 在编程过程中,用到了哪些操作命令字?

2. 在执行中断服务程序之前,保存了哪些断点?为什么?

单一中断应用实验参考程序

;***************根据CHECK配置信息修改下列符号值******************* INTR_IVADD EQU _____H ;INTR对应的中断矢量地址

INTR_OCW1 EQU _____H ;INTR对应PC机内部8259的OCW1地址 INTR_OCW2 EQU _____H ;INTR对应PC机内部8259的OCW2地址 INTR_IM EQU _____H ;INTR对应的中断屏蔽字

PCI_INTCSR EQU _____H ;PCI卡中断控制寄存器地址 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS

DATA SEGMENT

CS_BAK DW ? ;保存INTR原中断处理程序入口段地址的变量 IP_BAK DW ? ;保存INTR原中断处理程序入口偏移地址的变量 IM_BAK DB ? ;保存INTR原中断屏蔽字的变量 DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX CLI

MOV DX,PCI_INTCSR SUB DX,19H IN AL,DX

MOV DX,PCI_INTCSR ;初始化PCI卡中断控制寄存器 MOV AX,1F00H ;向PCI_INTCSR中写入003F1F00H OUT DX,AX ADD DX,2 MOV AX,003FH OUT DX,AX

MOV AX,0000H ;替换INTR的中断矢量 MOV ES,AX

MOV DI,INTR_IVADD MOV AX,ES:[DI]

MOV IP_BAK,AX ;保存INTR原中断处理程序入口偏移地址 MOV AX,OFFSET MYISR

MOV ES:[DI],AX ;设置当前中断处理程序入口偏移地址

ADD DI,2

MOV AX,ES:[DI]

MOV CS_BAK,AX ;保存INTR原中断处理程序入口段地址 MOV AX,SEG MYISR

MOV ES:[DI],AX ;设置当前中断处理程序入口段地址

MOV DX,INTR_OCW1 ;设置中断屏蔽寄存器,打开INTR的屏蔽位 IN AL,DX

MOV IM_BAK,AL ;保存INTR原中断屏蔽字 AND AL,INTR_IM OUT DX,AL

STI

WAIT1: MOV AH,1 ;判断是否有按键按下 INT 16H

JZ WAIT1 ;无按键则跳回继续等待,有则退出 QUIT: CLI

MOV DX,PCI_INTCSR ;恢复PCI卡中断控制寄存器 MOV AX,0000H OUT DX,AX

MOV AX,0000H ;恢复INTR原中断矢量 MOV ES,AX

MOV DI,INTR_IVADD

MOV AX,IP_BAK ; MOV ES:[DI],AX ADD DI,2

MOV AX,CS_BAK ; MOV ES:[DI],AX

MOV DX,INTR_OCW1 ; MOV AL,IM_BAK OUT DX,AL STI

MOV AX,4C00H ; INT 21H

MYISR PROC NEAR ; MOV AL,39H MOV AH,0EH INT 10H MOV AL,20H INT 10H

OVER: MOV DX,PCI_INTCSR SUB DX,19H IN AL,DX

MOV DX,PCI_INTCSR ; ADD DX,2 MOV AX,003FH OUT DX,AX

MOV DX,INTR_OCW2 ; MOV AL,20H OUT DX,AL MOV AL,20H

OUT 20H,AL IRET

MYISR ENDP CODE ENDS

END START

恢复INTR原中断处理程序入口偏移地址 恢复INTR原中断处理程序入口段地址 恢复INTR原中断屏蔽寄存器的屏蔽字 返回到DOS 中断处理程序MYISR 清PCI卡中断控制寄存器标志位 向PC机内部8259发送中断结束命令

本文来源:https://www.bwwdw.com/article/hj6g.html

Top