8259中断控制实验
一.实验目的 1. 掌握8259 中断控制器的工作原理。
2. 掌握系统总线上IR1,IR2 中断请求的应用编程方法。 二.实验设备
IA-32 架构的微机系统及应用教学平台一套。 三.实验原理
3.1 中断控制器8259简介
中断控制器8259 是Intel公司专为控制优先级中断而设计开发的芯片。它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259 进行编程,就可以管理8 级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。同时,在不需增加其他电路的情况下,通过多片8259 的级连,能构成多达64 级的矢量中断系统。它的管理功能包括: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 MOV ES,AX
MOV DI,IRQ2_IVADD MOV AX,ES:[DI]
MOV IP_BAK,AX MOV AX,OFFSET MYISR2
MOV ES:[DI],AX ADD DI,2
MOV AX,ES:[DI]
MOV CS_BAK,AX MOV AX,SEG MYISR2
MOV ES:[DI],AX MOV DX,IRQ2_OCW1 IN AL,DX
MOV IM_BAK,AL AND AL,IRQ2_IM OUT DX,AL STI WAIT1:
MOV AH,1 INT 16H
JZ WAIT1 QUIT: CLI
MOV AX,0000H MOV ES,AX
MOV DI,IRQ_IVADD
MOV AX,IP_BAK MOV ES:[DI],AX ADD DI,2
MOV AX,CS_BAK MOV ES:[DI],AX
MOV DX,IRQ_OCW1 MOV AL,IM_BAK OUT DX,AL STI
;替换IRQ7的中断矢量 ;保存IRQ7原中断处理程序入口偏移地址 ;设置当前中断处理程序入口偏移地址 ;保存IRQ7原中断处理程序入口段地址 ;设置当前中断处理程序入口段地址
;设置中断屏蔽寄存器,打开IRQ7的屏蔽位 ;保存IRQ7原中断屏蔽字 ;判断是否有按键按下 ;无按键则跳回继续等待,有则退出 ;恢复IRQ10原中断矢量 ;恢复IRQ10原中断处理程序入口偏移地址 ;恢复IRQ10原中断处理程序入口段地址 ;恢复IRQ10原中断屏蔽寄存器的屏蔽字
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 MOV AL,IM_BAK OUT DX,AL STI
MOV AX,4C00H INT 21H
MYISR :STI PUSH AX MOV DL,'1' MOV AH,02H INT 21H MOV DL,' ' INT 21H
OVER: MOV DX,IRQ_OCW2 MOV AL,20H OUT DX,AL MOV AL,20H
OUT 20H,AL POP AX IRET
MYISR2 : STI PUSH AX MOV DL,'2' MOV AH,02H INT 21H MOV DL,' ' INT 21H
OVER2: MOV DX,IRQ2_OCW2 MOV AL,20H OUT DX,AL POP AX IRET CODE ENDS
END START ⑷实验现象:
;恢复IRQ7原中断屏蔽寄存器的屏蔽字 ;返回到DOS ;中断处理程序MYISR ;向EPC内部8259发送中断结束命令 ;中断处理程序MYISR ;向EPC内部8259发送中断结束命令
因篇幅问题不能全部显示,请点此查看更多更全内容