实验六-8237DMA传输实验- 下载本文

内容发布更新时间 : 2024/5/9 3:58:44星期一 下面是文章的全部内容请认真阅读。

计算机科学与技术系

实 验 报 告

专业名称 计算机科学与技术 课程名称 微机原理与接口技术 项目名称 8237DMA传输实验

班 级

学 号 姓 名

同组人员 无

实验日期 2016/06/28

一、实验目的与要求

了解8237的内部结构、工作原理;了解8237与8088的接口逻辑;掌握使用8237,实现DMA传输数据 二、实验逻辑原理图与分析

2.1 画实验逻辑原理图

数据锁存器地址译码器A0~A7 MEMR#CS# MEMW#WR#RD#HLDAHRQRAMAD0~AD15ALEWR#RD#HLDAHRQ地址锁存器80868237

2.2 逻辑原理图分析

本次实验是将DS:3000H~37FFH内数据通过DMA方式传输给DS:6000H~ 67FFH,并对DS:3000H~37FFH与,6000H~ 67FFH作比较,故8237中断控制实验需要8237A芯片,8282地址锁存器,用于8086CPU与8237A芯片地址线的连接,8286收发器用于8086CPU与8237A芯片数据线的连接,通过地址译码器实现片选信号(CS)的选通。本次实验是利用DMA方式完成内存到内存的传送。

8237是一个高性能可编程DMA控制器,它允许DMA传输速度高达1.6MB/s。 8237有4个独立的DMA通道;具有具有三种基本的传送方式:单字节、数据块、请求传送;具有从存储器到存储器的传送功能;两种通道优先权管理方式:固定优先级和循环优先级;可以级联多个8237A。 三、 程序分析

3.1、程序功能

将DS:3000H~37FFH内数据通过DMA方式传输给DS:6000H~67FFH,并对DS:3000H~37FFH与DS:6000H~67FFH作比较 3.2、程序分析

在对DMA控制器初始化之前,将禁止DMA操作以及复位,控制寄存器的端口 地址为08H,复位寄存器的端口地址为0DH

D0 0 D1 0 D2 1 D3 0 D4 0 D5 0 D6 0 D7 0 禁止M→M 停止8251A工作

MOV AL,04H ;04H=0000 0100 控制字D2=1 停止8251A工作 Mov dx,DMAaddr+8

OUT DX,AL ;禁止DMA操作 MOV AL,00 ; mov dx,DMAaddr+0dh OUT DX,AL

清除先、后寄存器的作用:写入存储器起始地址或字节计数器初值之前,清除先、后寄存器,可以先写入地址,后写高地址,端口地址0CH Mov al,00h mov dx,DMAaddr+0ch

OUT DX,AL ;清除先/后寄存器 将通道0的地址寄存器设置为存储器源数据区地址:3000H,通道0的当前地址寄存器的端口地址为00H

MOV DX,DMAaddr+0 ;源启始地址3000H MOV AL,0 OUT DX,AL

MOV AL,30H OUT DX,AL

通道1的地址寄存器存放存储器目标地址:6000H, 通道1的当前地址寄存器的端口地址为02H

MOV DX,DMAaddr+2 MOV AL,0 OUT DX,AL

MOV AL,60H ;目的启始地址6000H OUT DX,AL

向通道1的字节计数器写入传送的字节数: 7FFH,端口地址为03H

MOV DX,DMAaddr+3

MOV AL,0FFH OUT DX,AL MOV AL,07H

OUT DX,AL ;按照先写低地址,在写高地址的格式写入字节数7FFH 写入控制通道0的工作方式,由方式控制字低两位(00)表示通道号,方式寄存器的端口地址为0BH,写方式字

通道0 DMA读 块传送 D0 0 D1 0 D2 0 D3 1 D4 0 D5 0 D6 0 D7 1

Mov dx,DMAaddr+0bh MOV AL,88H

OUT DX,AL ;通道0方式字

写入控制通道1的工作方式,由方式控制字低两位(01)表示通道号,方式寄存器的端口地址为0BH,写方式字 块传送 通道0 DMA写 D0 D1 D2 D3 D4 D5 D6 D7 1 0 1 0 0 0 0 1

MOV AL,85H

OUT DX,AL ;通道1方式字

允许8237工作、存储器到存储器传送,允许通道0、通道1,写屏蔽寄存器 允许通道0、通道1 D0 D1 D2 D3 D4 D5 D6 D7 0 0 1 1 0 0 0 0

mov dx,DMAaddr+0fh

MOV AL,0CH

OUT DX,AL ;允许通道0、通道1

; in al,dx ;读暂存寄存器 mov dx,DMAaddr+09h 允许M→M之间传送

D0 D1 D2 D3 D4 0 0 0 0 0

MOV AL,04H

D5 0 D6 1 D7 0 OUT DX,AL ;允许DMA操作 mov dx,DMAaddr+08h

读状态寄存器,测试通道1的字节寄存器是否为0 ,若是则传送完毕,否则,继续查询 ,端口地址为08H状态寄存器

star2: in al,dx

TEST AL,03H

jz star2 ;等待DMA结束 ; mov dx,DMAaddr+0dh

读通道1当前字节计数器是否为FFFFH若是则,真正的传送完毕,否则从新开始传送,结束的原因可能是外部信号#EOP mov dx,DMAaddr+3 IN AL,DX MOV AH,AL IN AL,DX CMP AX,0FFFFH JNZ star1

四、实验数据和结果分析

4.1 实验结果数据

DS:3000H~37FFH 存储器内的数据分别为:FF、FE、FD.........00H DS:6000H~67FFH 存储器内的数据分别为:FF、FE、FD.........00H

4.2 结果数据分析

根据8237DMA传输方式的工作原理:当8237作为主模块时,CPU暂停对总线的控制权,8237取得总线的控制权,控制外设与存储器之间进行高速的数据传输,无需CPU干涉;当8237作为从片时,即作为一个接口电路,CPU向其写入内存传送区的首地址、传送字节数和控制字。通过编写程序对8237进行初始化编程,设置8237 的各寄存器和工作方式等,结合硬件并运行程序得出实验结果。

该实验实现两内存区间数据传输和比较的结果分析如下:

1、将3000H—37FFH内存区写入数据,然后输出主清除命令,通过写入0C清除高低寄存器。

2、写入存储器起始地址、传送的字节数,即向通道1写入6000H和0FFH 3、写控制字和命令字,设置8237的工作方式和所需通道的方式

五、实验问题分析、思考题与小结

5.1实验问题分析、思考题

在实验进行到一半时,发现找不到数据是怎样从内存传输到内存的,通过反复试验和查阅书籍才知道是通道0的地址(源数据的地址:3000)通道1的地址(目的地址:6000),并通过自动修改字节计数器和地址寄存器的值来传输的,