微机原理与接口技术实验报告 下载本文

MOV CX,4

AGA: ROL DX,4

MOV AL,DL AND AL,0FH CMP AL,10

JC NEXT2 ADD AL,7

NEXT2: ADD AL,30H

MOV AH,0EH

INT 10H LOOP AGA

RET

SHWORD ENDP CODE ENDS END START 六.收获体会。

本次试验中,对这次实验对中断特性和8259中断控制器的工作原理有了一定的理解,在实践操作中修改程序的时候没有把读入的扫描码AL传递到DL中,导致实验结果不对,最后在老师的指导下修改正确。对中断的理解在很多地方存在着认识不足,对于中断程序的设计还有待强化。希望可以加强对理论知识的认识逐步增强在这方面的实践能力。

实验七、PCI总线中断应用

一.实验内容 1.【示例】编写一实验程序,利用实验装置提供的中断源,完成每按动一次脉冲开关,产生一次中断,向显示器输出字符“7”。 2.修改示例程序,控制中断响应次数为10次,即当第11次以后按动脉冲开关,屏幕上不再显示“7”。 二. 分析设计思想

1.TD-PIT-B实验系统编程信息简要说明

(1).本实验的接口电路是在PD-PIT-B实验装置上搭接完成,而PC机作为主机控制该实验装置。二者之间通过PCI总线扩展卡及转接逻辑在PD-PIT-B实验装置上提供了一个仿真ISA的总线接口,用户可以基于该接口对常用接口芯片进行应用编程。TD-PIT-B实验系统的硬件环境,参见附录。

(2).要利用仿真ISA的总线接口资源,扩展接口电路,首先必须掌握实验装置获取的系统配置资源,即PCI总线资源配置的有关内容。

执行PCI_BIOS.EXE,获取实验用PCI总线扩展卡分配的地址空间及中断请求线。假设执行PCI_BIOS.EXE后屏幕显示:

25

从以上获取的信息可知道,本实验用的PCI总线扩展卡申请了: ? 4个I/O空间(最后一位为1来表示),其首地址分别是:0B800H,0BC00H,0C000H,

0C400H。 ? ?

一个存储器空间(最后一位为0来表示),其首地址是:5000000H。 一个中断请求IRQ9

(3).确定TD-PIT-B实验装置中各接口电路所使用的端口地址

本系统中PCI配置空间的首地址是PCI总线扩展卡申请的第一个I/O空间(即BASE 0)。所以PCI各控制寄存器的地址定义为:

BASE 0的首地址0B800H + 各控制寄存器的偏移地址

而I/O部分实验使用的是PCI总线扩展卡申请的第三个I/O空间(即BASE 2)。各I/O接口芯片的端口地址定义为:

BASE 2的首地址0C000H + 各端口的偏移地址 2.实验说明及处理流程

本实验使用实验装置提供的中断请求信号IRQ,利用KK1的负脉冲作为中断源,每按一次KK1,在中断处理中完成字符“7”的显示。

使用实验装置提供的IRQ信号,除了要操作PC机的8259寄存器,还需要操作TD-PIT-PCI总线扩展卡上的控制寄存器“INTCSR”和“IMB4”,才可以实现中断的初始化、清除等。

?

PCI_BIOS.EXE实验装置获取的系统配置资源,确定控制寄存器INTCSR(偏移38H~ 3BH)和IMB4寄存器(偏移1FH)的端口地址:

BASE 0的首地址0B800H + 各控制寄存器的偏移地址

及中断号IRQ9。

? 初始化PCI中断

(1) 初始化INTCSR:向INTCSR的端口写入003F1F00H,即0B838H写00H,0B839H

写1FH,0B83AH写3FH,0B83BH写00H。 (2) 初始化中断向量:在修改中断入口地址时,建议先保存原来的入口地址。查表

7-1获得IRQ9对应的中断向量号为71H,中断入口地址即为01C4H,并将该地址保存,替换为用户自己的中断服务程序入口地址。

(3) 设置PC机8259中断屏蔽寄存器,对应位为0,允许中断。21H中设置0~7号

屏蔽位,A1H中设置8~15号屏蔽位。同样保存原先的屏蔽位。IRQ9号中断须

?

将A1H中的位1置0。 清除实验用中断的中断源

(1) 清PCI板卡的中断标志:对IMB4寄存器的第3字节(IMB_BYTE3)做一读操

作,端口地址为0B81FH,然后向INTCSR第2字节(0B83AH)写入3FH。 (2) 清PC机8259中断标志:设置8259的OCW2,复位中断标志。(IRQ9中断向

A0H写入61H,向20H写入62H。)

(3) 退出程序返回DOS时恢复系统的初始化的设置:首先将保存的屏蔽命令字恢复

26

到屏蔽寄存器中,中断服务程序入口的段地址和偏移地址恢复到中断向量表中,

?

然后返回DOS。

参考实验流程如图12-1所示。

三.程序清单及相关注解

;先执行PCI_BIOS.EXE,获得PCI板卡申请的第一个I/O空间的首地址及 ;中断号,修改下面CPU访问PCI操作寄存器的端口地址。

;由中断号确定相应中断向量及OCW1、OCW2命令字。

INTCSR_BYTE0 EQU 9438H ;修改PCI操作寄存器的端口地址 INTCSR_BYTE1 EQU 9439H INTCSR_BYTE2 EQU 943AH INTCSR_BYTE3 EQU 943BH IMB4_BYTE3 EQU 941FH DATA SEGMENT CSBAK DW ? IPBAK DW ? MKBAK DB ? DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: CLI

MOV AX,DATA

MOV DS,AX ;初始化PCI寄存器 MOV DX,INTCSR_BYTE0 MOV AL,00H OUT DX,AL

MOV DX,INTCSR_BYTE1 MOV AL,1FH OUT DX,AL

27

MOV DX,INTCSR_BYTE2 MOV OUT MOV MOV

AL,3FH DX,AL

DX,INTCSR_BYTE3 AL,00H

OUT DX,AL ;保存和替换中断入口地址 MOV AX,0000H

MOV ES,AX

MOV DI,01CCH ;INT 73H,01CCH=73H*4,根据中断号修改 MOV AX,ES:[DI]

MOV IPBAK,AX ;IP MOV AX,OFFSET MYINT CLD STOSW

MOV AX,ES:[DI] ;CS MOV CSBAK,AX

MOV AX,SEG MYINT

STOSW ;保存中断屏蔽字寄存器内容 IN AL,0A1H

MOV MKBAK,AL

AND AL,0F7H ;打开中断屏蔽位,根据中断号修改 OUT 0A1H,AL

STI ;等待 A1: NOP

CALL BREAK JMP A1 ;========中断服务程序=========== MYINT: PUSH DS PUSH AX

PUSH DX ;清PCI板中断标志 MOV DX,IMB4_BYTE3 IN AL,DX

MOV DX,INTCSR_BYTE2 MOV AL,3FH

OUT DX,AL;清8259中断标志 MOV AL,63H ;根据中断号修改 OUT 0A0H,AL

MOV AL,62H

OUT 20H,AL ;显示字符‘7’ MOV AH,0EH MOV AL,37H

INT 10H POP DX POP AX

28