
一.实验目的
1. 掌握8259 中断控制器的工作原理。
2. 掌握系统总线上IR1,IR2 中断请求的应用编程方法。
二.实验设备
IA-32 架构的微机系统及应用教学平台一套。
三.实验原理
3.1 中断控制器8259简介
中断控制器8259 是Intel公司专为控制优先级中断而设计开发的芯片。它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259 进行编程,就可以管理8 级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。同时,在不需增加其他电路的情况下,通过多片8259 的级连,能构成多达 级的矢量中断系统。它的管理功能包括:1)记录各级中断源请求,2)判别优先级,确定是否响应和响应哪一级中断,3)响应中断时,向CPU 传送中断类型号。8259 的内部结构和引脚如图1 所示。
图 1 8259 内部结构和引脚图
8259 的命令共有7 个,一类是初始化命令字,另一类是操作命令。8259 的编程就是根据应用需要将初始化命令字ICW1-ICW4 和操作命令字OCW1- OCW3 分别写入初始化命令寄存器组和操作命令寄存器组。ICW1-ICW4 各命令字格式如图2所示,OCW1-OCW3各命令字格式如图3 所示,其中OCW1 用于设置中断屏蔽操作字,OCW2 用于设置优先级循环方式和中断结束方式的操作命令字,OCW3 用于设置和撤销特殊屏蔽方式、设置中断查询方式以及设置对8259 内部寄存器的读出命令。
图 2(a) ICW1格式
图 2(b) ICW2格式
图 2(c) ICW3格式
图 2(d) ICW4格式
图 3 OCW 命令字格式
3.2 8259寄存器及命令的控制访问
在硬件系统中,8259仅占用两个外设接口地址,在片选有效的情况下,利用A0来寻址不同的寄存器和命令字。对寄存器和命令的访问控制如表1所示。
表 1 8259 寄存器及命令的访问控制
3.3 EPC 微机系统中的8259
在80x86 系列EPC 微机系统中,系统中包含了两片8259 中断控制器,经级连可以管理15 级硬件中断,但其中部分中断号已经被系统硬件占用,具体使用情况如表2 示。两片8259的端口地址为:主片8259 使用020H 和021H 两个端口;从片使用0A0H 和0A1H 两个端口。系统初始化两片8259 的中断请求信号均采用上升沿触发,采用全嵌套方式,优先级的排列次序为0级最高,依次为1级、8级~15级,然后是3 级~7 级。在实验平台上系统总线单元的IR1,IR2 信号对应的中断线就是系统8259中断控制器的IRQ10,IRQ7。
表2 EPC 微机系统中的硬件中断
四. 实验内容、步骤、程序及现象
4.1 IRQ单中断应用实验
⑴实验内容:
系统总线单元的IR1中断请求信号对应EPC 内部的IRQ10中断。IR1产生一个上升沿的中断请求,EPC 内部相应的那级中断就会得到响应。所以,使用IR1 中断请求信号,就相当在使用PC 机内部相应的IRQ10 中断。
本实验要求使用总线上IR1 中断请求线完成一次单中断应用实验。用单次脉冲上升沿模拟中断源,中断处理程序完成在屏幕上的显示字符“1”。
⑵实验步骤:
①、 实验接线图如图4所示,按图接线。
②、运行Tdpit 集成操作软件,编写程序,编译、链接。
③、 使用运行命令运行程序,重复按单次脉冲开关KK1+,显示屏会显示字符“1”,说明响应了中断。
图 4 8259单中断实验接线图
⑶实验程序:
IRQ_IVADD EQU 01C8H ;IRQ10对应的中断矢量地址
IRQ_OCW1 EQU 0A1H ;IRQ10对应PC机内部8259的OCW1地址
IRQ_OCW2 EQU 0A0H ;IRQ10对应PC机内部8259的OCW2地址
IRQ_IM EQU 0FBH ;IRQ10对应的中断屏蔽字
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT
MES DB 'Press any key to exit!',0AH,0DH,0AH,0DH,'$'
CS_BAK DW ? ;保存IRQ10原中断处理程序入口段地址的变量
IP_BAK DW ? ;保存IRQ10原中断处理程序入口偏移地址的变量
IM_BAK DB ? ;保存IRQ10原中断屏蔽字的变量
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MES ;显示退出提示
MOV AH,09H INT 21H
CLI
MOV AX,0000H ;替换IRQ10的中断矢量
MOV ES,AX
MOV DI,IRQ_IVADD
MOV AX,ES:[DI]
MOV IP_BAK,AX ;保存IRQ10原中断处理程序入口偏移地址
MOV AX,OFFSET MYISR
MOV ES:[DI],AX ;设置当前中断处理程序入口偏移地址
ADD DI,2
MOV AX,ES:[DI]
MOV CS_BAK,AX ;保存IRQ10原中断处理程序入口段地址
MOV AX,SEG MYISR
MOV ES:[DI],AX ;设置当前中断处理程序入口段地址
MOV DX,IRQ_OCW1 ;设置中断屏蔽寄存器,打开IRQ10的屏蔽位
IN AL,DX
MOV IM_BAK,AL ;保存IRQ10原中断屏蔽字
AND AL,IRQ_IM
OUT DX,AL
STI
WAIT1: MOV AH,1 ;判断是否有按键按下
INT 16H
JZ WAIT1 ;无按键则跳回继续等待,有则退出
QUIT: CLI
MOV AX,0000H ;恢复IRQ10原中断矢量
MOV ES,AX
MOV DI,IRQ_IVADD
MOV AX,IP_BAK ;恢复IRQ10原中断处理程序入口偏移地址
MOV ES:[DI],AX
ADD DI,2
MOV AX,CS_BAK ;恢复IRQ10原中断处理程序入口段地址
MOV ES:[DI],AX
MOV DX,IRQ_OCW1 ;恢复IRQ10原中断屏蔽寄存器的屏蔽字
MOV AL,IM_BAK
OUT DX,AL
STI
MOV AX,4C00H ;返回到DOS
INT 21H
MYISR PROC NEAR ;中断处理程序MYISR
PUSH AX
MOV DL,'1'
MOV AH,1
INT 21h
MOV DL,' '
INT 21H
OVER: MOV DX,IRQ_OCW2 ;向PC机内部8259发送中断结束命令
MOV AL,20H
OUT DX,AL
MOV AL,20H
OUT 20H,AL
POP AX
IRET
MYISR ENDP
CODE ENDS
END START
⑷实验现象:
按图接好线并编好程序,编译连接完毕后,屏幕上先出现语句“Press any key to exit !”,当按单次脉冲开关KK+1时,屏幕上出现数字“1”;不按时为空格;而按下键盘上的任意键,则会出现语句“Press any key to continue…”,当再按下键盘上任意键时,显示界面消失。
4.2 级联中断实验
⑴实验内容:
本实验要求实现IR1、IR2两路中断都可以向EPC发起中断请求。用KK1+和KK2+模拟两个中断源,在IR1对应的服务程序中显示字符“1”,在IR2对应的服务程序中显示字符“2”。
⑵实验步骤:
①、 实验接线图如图5 所示,按图接线。
②、 运行Tdpit 集成操作软件, 编写程序,编译、链接。
③、 使用运行命令运行程序,按动KK1+、KK2+按键,观察中断是否产生。
图 5 级联中断实验接线图
⑶实验程序
IRQ_IVADD EQU 01C8H ;IRQ10对应的中断矢量地址01C8H
IRQ_OCW1 EQU 0a1H ;IRQ10对应PC机内部8259的OCW1地址
IRQ_OCW2 EQU 0a0H ;IRQ10对应PC机内部8259的OCW2地址
IRQ_IM EQU 0FBH ;IRQ10对应的中断屏蔽字0FBH
IRQ2_IVADD EQU 003CH ;IRQ7对应的中断矢量地址003CH
IRQ2_OCW1 EQU 021H ;IRQ7对应PC机内部8259的OCW1地址
IRQ2_OCW2 EQU 020H ;IRQ7对应PC机内部8259的OCW2地址
IRQ2_IM EQU 07FH ;IRQ7对应的中断屏蔽字07FH
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT
MES DB 'Press any key to exit!',0AH,0DH,0AH,0DH,'$'
CS_BAK DW ? ;保存IRQ原中断处理程序入口段地址的变量
IP_BAK DW ? ;保存IRQ原中断处理程序入口偏移地址的变量
IM_BAK DB ? ;保存IRQ原中断屏蔽字的变量
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MES ;显示退出提示 MOV AH,09H INT 21H
CLI
MOV AX,0000H ;替换IRQ10的中断矢量
MOV ES,AX
MOV DI,IRQ_IVADD
MOV AX,ES:[DI]
MOV IP_BAK,AX ;保存IRQ10原中断处理程序入口偏移地址
MOV AX,OFFSET MYISR
MOV ES:[DI],AX ;设置当前中断处理程序入口偏移地址
ADD DI,2
MOV AX,ES:[DI]
MOV CS_BAK,AX ;保存IRQ10原中断处理程序入口段地址
MOV AX,SEG MYISR
MOV ES:[DI],AX ;设置当前中断处理程序入口段地址
MOV DX,IRQ_OCW1 ;设置中断屏蔽寄存器,打开IRQ10的屏蔽位
IN AL,DX
MOV IM_BAK,AL ;保存IRQ10原中断屏蔽字
AND AL,IRQ_IM
OUT DX,AL
STI
MOV AX,0000H ;替换IRQ7的中断矢量
MOV ES,AX
MOV DI,IRQ2_IVADD
MOV AX,ES:[DI]
MOV IP_BAK,AX ;保存IRQ7原中断处理程序入口偏移地址
MOV AX,OFFSET MYISR2
MOV ES:[DI],AX ;设置当前中断处理程序入口偏移地址
ADD DI,2
MOV AX,ES:[DI]
MOV CS_BAK,AX ;保存IRQ7原中断处理程序入口段地址
MOV AX,SEG MYISR2
MOV ES:[DI],AX ;设置当前中断处理程序入口段地址
MOV DX,IRQ2_OCW1 ;设置中断屏蔽寄存器,打开IRQ7的屏蔽位
IN AL,DX
MOV IM_BAK,AL ;保存IRQ7原中断屏蔽字
AND AL,IRQ2_IM
OUT DX,AL
STI
WAIT1:
MOV AH,1 ;判断是否有按键按下
INT 16H
JZ WAIT1 ;无按键则跳回继续等待,有则退出
QUIT: CLI
MOV AX,0000H ;恢复IRQ10原中断矢量
MOV ES,AX
MOV DI,IRQ_IVADD
MOV AX,IP_BAK ;恢复IRQ10原中断处理程序入口偏移地址
MOV ES:[DI],AX
ADD DI,2
MOV AX,CS_BAK ;恢复IRQ10原中断处理程序入口段地址
MOV ES:[DI],AX
MOV DX,IRQ_OCW1 ;恢复IRQ10原中断屏蔽寄存器的屏蔽字
MOV AL,IM_BAK
OUT DX,AL
STI
MOV AX,4C00H ;返回到DOS
INT 21H
QUIT2: CLI
MOV AX,0000H ;恢复IRQ7原中断矢量
MOV ES,AX
MOV DI,IRQ2_IVADD
MOV AX,IP_BAK ;恢复IRQ7原中断处理程序入口偏移地址
MOV ES:[DI],AX
ADD DI,2
MOV AX,CS_BAK ;恢复IRQ7原中断处理程序入口段地址
MOV ES:[DI],AX
MOV DX,IRQ2_OCW1 ;恢复IRQ7原中断屏蔽寄存器的屏蔽字
MOV AL,IM_BAK
OUT DX,AL
STI
MOV AX,4C00H ;返回到DOS
INT 21H
MYISR :STI ;中断处理程序MYISR
PUSH AX
MOV DL,'1'
MOV AH,02H
INT 21H
MOV DL,' '
INT 21H
OVER: MOV DX,IRQ_OCW2 ;向EPC内部8259发送中断结束命令
MOV AL,20H
OUT DX,AL
MOV AL,20H
OUT 20H,AL
POP AX
IRET
MYISR2 : STI ;中断处理程序MYISR
PUSH AX
MOV DL,'2'
MOV AH,02H
INT 21H
MOV DL,' '
INT 21H
OVER2: MOV DX,IRQ2_OCW2 ;向EPC内部8259发送中断结束命令
MOV AL,20H
OUT DX,AL
POP AX
IRET
CODE ENDS
END START
⑷实验现象:
按图接好线并编好程序,编译连接完毕后,屏幕上先出现语句“Press any key to exit !”,按动脉冲开关KK+1时屏幕上显示字符“A”;按动脉冲开关KK+2时,屏幕上显示字符“7”;不按动时,屏幕上是横线如“————”;而在键盘上输入任意键时,屏幕上则会出现语句“Press any key to continue…”,当再按下键盘上任意键时,显示界面消失。
