8259中断控制实验

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
mov dx,ioport_0+4dh;9052的中断控制寄存器的高8位端口的地址
in al,dx
or al,0ch
out dx,al ;9052清中断标志
pop ds
pop dx
pop ax
sti
iret ;中断返回
code ends
end start
六、实验结果与分析
第一次测试:程序按照实验要求,产生40次中断后就结束
中断程序返回前,要清9052邮箱的中断标志:将(I/O地址0+4D)OR 0CH,再返送回I/O地址0+4D地址单元。
中断控制芯片:8259设置好相应级的中断矢量,将相应的中断屏蔽位打开,8259即可响应中断。程序退出前要恢复原屏蔽状态
为维护系统,在设置中断屏蔽位时一般采用保护方式,例如要将第5级中断打开,可使用下列语句:
disp1 db 'This is SXL_100 interrupt',0dh,0ah,'$'
disp2 db 'program run! Exit after interrupt 40 times.',0dh,0ah,'$'
data ends
stack segment
db 100 dup(?)
stack ends
微机一台,SXL_100接口实验仪一套
四、操作方法与实验步骤
1.根据实验内容编写源程序lab8.asm,设置包括两个方面:桥芯片9052和中断控制芯片8259。
2.在dos系统下输入命令行ml lab8.asm进行编译
3.在dos系统下输入命令行lab8运行程序
实验硬件接线操作:
选择一个触发器的正脉冲输出端J区J102+接入9052控制中断的输入端A区的J19—IRQ。
in al,0a1h ;;读取中断屏蔽字
mov int_mark,al ;;保存中断屏蔽字
and al,0fbh
out 0a1h,al ;;设置中断屏蔽字
pop ds
mov dx,0de03h
mov al,10111000b
out dx,al
mov dx,0de03h
பைடு நூலகம்mov al,00000110b
IN AL,21H
AND AL,1101 1111B
OUT 21H,AL
中断程序返回前,要清8259的中断标志:
即使OCW2的EOI为1。如:
MOV AL,00100000B
OUT 20H,AL
OUT A0H,AL
中断实验程序须在纯DOS环境下运行。此处指的纯DOS环境是指微机启动时按F8键进入的DOS环境。Windows重启进入MSDOS的方式,由于系统资源被重新规划过,因此不能正常实验。
mov dx,0de00h
in al,dx
mov dx,0de01h
out dx,al
;8259中断标志位的清除
mov al,20h;20h=0010000b(OCW2的值),EOI位为1
out 20h,al ;向8259主片发EOI
out 0a0h,al ;向8259从片发EOI
;9052中断邮箱标志的清除
实验内容:中断请求信号由J区的正单脉冲J102产生,要求每按一次按钮产生一次中断时,在屏幕上显示字符串“THIS IS SXL_100 INTERRUPT”,控制其若干次后退出中断方式并返回DOS。
桥芯片9052:将I/O地址0+4C的内容置为5BH,使能外设的中断信号。程序退出前要关闭(或恢复)中断使能,即将该地址内容置为17H。
再按键一次,产生第三次中断,在屏幕上输出
再按键七次,产生7次中断,共10次,程序结束,下图中可得出恰好程序输出10次
七、讨论、心得
通过此实验,对8259中断芯片有了更加深入的了解
在dos中输入命令lab8运行程序
显示“program run!Exit after interrupt 40 times”
按键
产生第一次中断,在屏幕上输出“This is SXL_100 interrupt”
按键五次,在屏幕上进行了5次输出
再一次按键,在屏幕上进行了第七次输出
再一次按键,在屏幕上进行了第八次输出
主片:IRQ0——T/C0
IRQ1——键盘中断
IRQ2——8259从片
IRQ3——串口2
IRQ4——串口1
IRQ5——并行口2
IRQ6——软盘控制器
IRQ7——并行口1
从片:IRQ8——实时时钟中断
IRQ9——RE—DTNECT
IRQA——保留
IRQB——保留
IRQC——保留
IRQD——协处理器
IRQE——硬盘控制器
jmp loop1
exit:cli
mov al,irq_mark
mov dx,ioport_0+4ch
out dx,al ;;恢复9052中断状态
mov dx,ipreg
mov ax,csreg
mov ds,ax
mov ah,25h
mov al,int_vect
int 21h ;;恢复中断矢量
sti
mov csreg,ax;保存原向量,以便恢复
mov ipreg,bx
push ds
mov ax,cs;构建新的中断向量DS:DX
mov ds,ax
mov dx,offset interrupt
mov ah,25h
mov al,int_vect;中断类型号
int 21h ;;设置中断矢量
;8259屏蔽字的设置
①必须保护现场,即保护中断发生时各寄存器的值。CPU在响应中断时已把各标志和返回地址放入堆栈,保护现场是指通用寄存器的内容、以及除代码段寄存器以外的其它三个寄存器的内容。一般方法是将它们压入堆栈。
②中断处理尽快完成。因为外部中断级别高,在进行外部中断响应时,往往不再响应其它外部中断,因此中断程序中只需完成必要的工作,如设置或清除标志、计数、启动等重要且短暂的操作,对于耗时的操作,可通过设置标志等方式,在主程序中通过查询方式来完成。
五、源程序、程序框图、程序函数及过程介绍
程序框图
源程序
data segment
int_vect equ 71h
ioport_0 equ 0dc80h
int_time db 00h ;计数器
csreg dw ?
ipreg dw ?
irq_mark db ? ;9052屏蔽状态
int_mark db ? ;8259屏蔽寄存器状态
in al,dx ;读入9052中断状态
mov irq_mark,al ;保存9052中断状态
or al,5bh
out dx,al;开放9052中断
;中断向量的保存和设置
mov ah,35h;取72h号(中断类型号)中断向量保存在ES:BX
mov al,int_vect
int 21h
mov ax,es
out dx,al
nop
nop
mov dx,0de03h
mov al,00001001b;
out dx,al
mov dx,offset disp2
mov ah,09h
int 21h ;;显示提示字符
mov int_time,0
sti
loop1:cmp [int_time],40 ;;中断40次计数
jz exit
按键若干次后,输出占满整个屏幕
再按若干次,达到40次按键,则程序结束
第二次测试
由于第一次测试中需要产生40次中断才能使实验结束,屏幕大小限制导致没法对中断在屏幕上的输出进行计数,因此第二次测试将改成产生10次中断后程序结束,这样就可直接在屏幕上输出有几次中断输出
Dos中输入lab8运行程序
按键两次,产生两次中断,在屏幕上两次输出
③恢复现场。与第①项相应,程序退出时要恢复系统原来的状态,确保系统的正常。
④由于DOS是不能重入的,因此外部中断服务程序中不应使用系统调用。例如,主程序中正在执行DOS系统调用,就出现了“重入”。不能“重入”一是因为进入DOS系统要进行堆栈初始化,二是可能造成两个程序同时进入临界资源
三、主要仪器设备
1.初始化阶段:PC机的初始化是通过系统初始化程序设置的,初始化命令字已在系统初始化程序中设置完成,因此实验时不必再进行初始化,以免设置不当造成死机等现象。初始化时设置为一般结束方式。
2.中断矢量的设置由DOS的25H号功能完成,原中断矢量的保存由35H号功能实现。
实验中使用的中断源属于外部中断,它是随机产生的,程序设计时应考虑以下几个方面:
IRQF——保留
PC机中8259中断管理设有相应的矢量地址,主片的IRQ0—IRQ7对应为08H—0FH,从片的IRQ8—IRQ15对应为70H—77H。主片的中断控制寄存器ISR和中断屏蔽寄存器IMR的端口地址分别为20H和21H,从片的中断控制寄存器ISR和中断屏蔽寄存器IMR的端口地址分别为0A0H和0A1H。
本科实验报告
课程名称:
接口实验
姓名:
学院:
系:
专业:
学号:
指导教师:
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,这些中断级都设置在从片上。
mov ax,4c00h
int 21h ;;返回DOS
;中断服务程序
interrupt:cli
push ax
push dx
push ds
inc [int_time] ;;计数器加1
mov ax,data
mov ds,ax
mov dx,offset disp1
mov ah,09h
int 21h ;;显示进入中断
code segment
assume cs:code,ds:data,ss:stack,es:data
start:cli
mov ax,data
mov ds,ax
mov es,ax
mov ax,stack
mov ss,ax
;9052中断通道的设置
mov dx,ioport_0+4ch;9052中断控制寄存器低八位。
中断初始化编程时,若使用主片中的中断级,只需打开主片屏蔽寄存器的相应屏蔽级,并在中断处理完毕后发中断结束命令EOI;而使用从片中的中断级,除对从片相应的级作出处理,还需打开主片IRQ2相应的屏蔽寄存器位,并在中断处理完毕后对主片和从片都要发中断结束命令EOI。
9052的中断控制寄存器:
偏移地址为4CH的32位寄存器。其中高19位为保留位,低13位可根据需要进行8位、16位操作。实验仪上的中断源信号必须通过9052控制器才能到达8259中断控制器,因此需先打开9052控制器的中断使能端,即第6位PCI Interrupt Enable。而在实验程序退出前必须关闭使能端。同时,每次中断结束时还需将9052邮箱的中断标志位(第10、11位)清除,确保下一次中断能进入。
相关文档
最新文档