8259中断控制实验.docx
《8259中断控制实验.docx》由会员分享,可在线阅读,更多相关《8259中断控制实验.docx(16页珍藏版)》请在冰豆网上搜索。
8259中断控制实验
本科实验报告
课程名称:
接口实验
姓名:
学院:
系:
专业:
学号:
指导教师:
2015年12月26日
浙江大学实验报告
课程名称:
接口实验实验类型:
普通实验
实验项目名称:
8259中断控制实验
学生姓名:
专业:
学号:
同组学生姓名:
指导老师:
实验地点:
实验日期:
2015年12月22日
一、实验目的和要求:
1.掌握中断的工作原理及编程方式,掌握8259中断控制器工作原理,了解中断控制芯片的初始化及工作方式的设定,熟悉实验中涉及到的各寄存器的使用方法,学会中断程序的编写。
2.学会中断控制器8259接口电路的应用和中断服务程序的编写。
3.了解PCI总线目标接口适配器PCI9052的使用,学会其中断及状态的控制。
二、实验内容和原理
8259中断控制电路:
在PC机中,主板上的两片8259可编程中断控制芯片以主从结构为系统提供了15级中断(每片8级,其中一级作为级联)。
从片的中断请求信号INT与主片的IRQ2相连。
其中给用户保留的中断号有IRQ10、IRQ11、IRQ12、和IRQ15,这些中断级都设置在从片上。
主片:
IRQ0——T/C0
IRQ1——键盘中断
IRQ2——8259从片
IRQ3——串口2
IRQ4——串口1
IRQ5——并行口2
IRQ6——软盘控制器
IRQ7——并行口1
从片:
IRQ8——实时时钟中断
IRQ9——RE—DTNECT
IRQA——保留
IRQB——保留
IRQC——保留
IRQD——协处理器
IRQE——硬盘控制器
IRQF——保留
PC机中8259中断管理设有相应的矢量地址,主片的IRQ0—IRQ7对应为08H—0FH,从片的IRQ8—IRQ15对应为70H—77H。
主片的中断控制寄存器ISR和中断屏蔽寄存器IMR的端口地址分别为20H和21H,从片的中断控制寄存器ISR和中断屏蔽寄存器IMR的端口地址分别为0A0H和0A1H。
中断初始化编程时,若使用主片中的中断级,只需打开主片屏蔽寄存器的相应屏蔽级,并在中断处理完毕后发中断结束命令EOI;而使用从片中的中断级,除对从片相应的级作出处理,还需打开主片IRQ2相应的屏蔽寄存器位,并在中断处理完毕后对主片和从片都要发中断结束命令EOI。
9052的中断控制寄存器:
偏移地址为4CH的32位寄存器。
其中高19位为保留位,低13位可根据需要进行8位、16位操作。
实验仪上的中断源信号必须通过9052控制器才能到达8259中断控制器,因此需先打开9052控制器的中断使能端,即第6位PCIInterruptEnable。
而在实验程序退出前必须关闭使能端。
同时,每次中断结束时还需将9052邮箱的中断标志位(第10、11位)清除,确保下一次中断能进入。
实验内容:
中断请求信号由J区的正单脉冲J102产生,要求每按一次按钮产生一次中断时,在屏幕上显示字符串“THISISSXL_100INTERRUPT”,控制其若干次后退出中断方式并返回DOS。
桥芯片9052:
将I/O地址0+4C的内容置为5BH,使能外设的中断信号。
程序退出前要关闭(或恢复)中断使能,即将该地址内容置为17H。
中断程序返回前,要清9052邮箱的中断标志:
将(I/O地址0+4D)OR0CH,再返送回I/O地址0+4D地址单元。
中断控制芯片:
8259设置好相应级的中断矢量,将相应的中断屏蔽位打开,8259即可响应中断。
程序退出前要恢复原屏蔽状态
为维护系统,在设置中断屏蔽位时一般采用保护方式,例如要将第5级中断打开,可使用下列语句:
INAL,21H
ANDAL,11011111B
OUT21H,AL
中断程序返回前,要清8259的中断标志:
即使OCW2的EOI为1。
如:
MOVAL,00100000B
OUT20H,AL
OUTA0H,AL
中断实验程序须在纯DOS环境下运行。
此处指的纯DOS环境是指微机启动时按F8键进入的DOS环境。
Windows重启进入MSDOS的方式,由于系统资源被重新规划过,因此不能正常实验。
1.初始化阶段:
PC机的初始化是通过系统初始化程序设置的,初始化命令字已在系统初始化程序中设置完成,因此实验时不必再进行初始化,以免设置不当造成死机等现象。
初始化时设置为一般结束方式。
2.中断矢量的设置由DOS的25H号功能完成,原中断矢量的保存由35H号功能实现。
实验中使用的中断源属于外部中断,它是随机产生的,程序设计时应考虑以下几个方面:
①必须保护现场,即保护中断发生时各寄存器的值。
CPU在响应中断时已把各标志和返回地址放入堆栈,保护现场是指通用寄存器的内容、以及除代码段寄存器以外的其它三个寄存器的内容。
一般方法是将它们压入堆栈。
②中断处理尽快完成。
因为外部中断级别高,在进行外部中断响应时,往往不再响应其它外部中断,因此中断程序中只需完成必要的工作,如设置或清除标志、计数、启动等重要且短暂的操作,对于耗时的操作,可通过设置标志等方式,在主程序中通过查询方式来完成。
③恢复现场。
与第①项相应,程序退出时要恢复系统原来的状态,确保系统的正常。
④由于DOS是不能重入的,因此外部中断服务程序中不应使用系统调用。
例如,主程序中正在执行DOS系统调用,就出现了“重入”。
不能“重入”一是因为进入DOS系统要进行堆栈初始化,二是可能造成两个程序同时进入临界资源
三、主要仪器设备
微机一台,SXL_100接口实验仪一套
四、操作方法与实验步骤
1.根据实验内容编写源程序lab8.asm,设置包括两个方面:
桥芯片9052和中断控制芯片8259。
2.在dos系统下输入命令行mllab8.asm进行编译
3.在dos系统下输入命令行lab8运行程序
实验硬件接线操作:
选择一个触发器的正脉冲输出端J区J102+接入9052控制中断的输入端A区的J19—IRQ。
五、源程序、程序框图、程序函数及过程介绍
⏹程序框图
⏹源程序
datasegment
int_vectequ71h
ioport_0equ0dc80h
int_timedb00h;计数器
csregdw?
ipregdw?
irq_markdb?
;9052屏蔽状态
int_markdb?
;8259屏蔽寄存器状态
disp1db'ThisisSXL_100interrupt',0dh,0ah,'$'
disp2db'programrun!
Exitafterinterrupt40times.',0dh,0ah,'$'
dataends
stacksegment
db100dup(?
)
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack,es:
data
start:
cli
movax,data
movds,ax
moves,ax
movax,stack
movss,ax
;9052中断通道的设置
movdx,ioport_0+4ch;9052中断控制寄存器低八位。
inal,dx;读入9052中断状态
movirq_mark,al;保存9052中断状态
oral,5bh
outdx,al;开放9052中断
;中断向量的保存和设置
movah,35h;取72h号(中断类型号)中断向量保存在ES:
BX
moval,int_vect
int21h
movax,es
movcsreg,ax;保存原向量,以便恢复
movipreg,bx
pushds
movax,cs;构建新的中断向量DS:
DX
movds,ax
movdx,offsetinterrupt
movah,25h
moval,int_vect;中断类型号
int21h;;设置中断矢量
;8259屏蔽字的设置
inal,0a1h;;读取中断屏蔽字
movint_mark,al;;保存中断屏蔽字
andal,0fbh
out0a1h,al;;设置中断屏蔽字
popds
movdx,0de03h
moval,10111000b
outdx,al
movdx,0de03h
moval,00000110b
outdx,al
nop
nop
movdx,0de03h
moval,00001001b;
outdx,al
movdx,offsetdisp2
movah,09h
int21h;;显示提示字符
movint_time,0
sti
loop1:
cmp[int_time],40;;中断40次计数
jzexit
jmploop1
exit:
cli
moval,irq_mark
movdx,ioport_0+4ch
outdx,al;;恢复9052中断状态
movdx,ipreg
movax,csreg
movds,ax
movah,25h
moval,int_vect
int21h;;恢复中断矢量
sti
movax,4c00h
int21h;;返回DOS
;中断服务程序
interrupt:
cli
pushax
pushdx
pushds
inc[int_time];;计数器加1
movax,data
movds,ax
movdx,offsetdisp1
movah,09h
int21h;;显示进入中断
movdx,0de00h
inal,dx
movdx,0de01h
outdx,al
;8259中断标志位的清除
moval,20h;20h=0010000b(OCW2的值),EOI位为1
out20h,al;向8259主片发EOI
out0a0h,al;向8259从片发EOI
;9052中断邮箱标志的清除
movdx,ioport_0+4dh;9052的中断控制寄存器的高8位端口的地址
inal,dx
oral,0ch
outdx,al;9052清中断标志
popds
popdx
popax
sti
iret;中断返回
codeends
endstart
六、实验结果与分析
⏹第一次测试:
程序按照实验要求,产生40次中断后就结束
在dos中输入命令lab8运行程序
显示“programrun!
Exitafterinterrupt40times”
按键
产生第一次中断,在屏幕上输出“ThisisSXL_100interrupt”
按键五次,在屏幕上进行了5次输出
再一次按键,在屏幕上进行了第七次输出
再一次按键,在屏幕上进行了第八次输出
按键若干次后,输出占满整个屏幕
再按若干次,达到40次按键,则程序结束
⏹第二次测试
由于第一次测试中需要产生40次中断才能使实验结束,屏幕大小限制导致没法对中断在屏幕上的输出进行计数,因此第二次测试将改成产生10次中断后程序结束,这样就可直接在屏幕上输出有几次中断输出
Dos中输入lab8运行程序
按键两次,产生两次中断,在屏幕上两次输出
再按键一次,产生第三次中断,在屏幕上输出
再按键七次,产生7次中断,共10次,程序结束,下图中可得出恰好程序输出10次
七、讨论、心得
通过此实验,对8259中断芯片有了更加深入的了解