DMA8237
内存与外设之间的数据传输控制方式
程序控制方式
中断方式
[以上方式都需要CPU执行程序来控制数据传输;]
- 中断过程需要额外的保护断点、标志操作;
- 中断响应和中断返回时,都要清除指令队列,重新装入程序;
DMA方式
[外设和存储器之间直接进行数据传输,不经过CPU。]
DMA过程中,DMAC能独立控制三大总线来访问存储器和I/O端口,
像CPU一样提供数据传送所需的地址信息和读写控制信息==>存储器
-DMAC内部有地址寄存器和字节计数器
DMA操作过程三个阶段
- DMA请求;
- 外设要求以DMA方式为它服务时,==DMA请求信号DREQ==>DMAC
- DMAC检查该信号是否被屏蔽及其优先权,if 该信号有效则
- DMAC===发送总线请求信号HRQ==>CPU的HOLD
- DMA响应和数据传送;
- DMAC接管总线===DACK信号==>外设,使之成为DMA传送时被选中的设备
- DMAC==内存地址以及I/O读写和存储器读写控制信号==>存储器
- 在外设和存储器之间数据传送
- 传送结束;
- DMAC放弃总线,撤消总线请求(HRQ==0),
- CPU检测到HRQ(HOLD)==0后,HLDA==0,
- CPU重新获得总线控制权
8237地址
一片8237占用连续16个端口地址,用DMA+00H~DMA+0FH表示。其中,DMA表示该片8237的基地址。
在AT以上的微机中,使用2片8237,其地址为:
第一片8237,基地址DMA=0000H,使用0000H~000F I/O地址。
第二片8237,基地址DMA=00C0H,使用00C0H~00CF I/O地址
传输模式:
单字节传输模式
- 每次DMA操作只传送一字节,接着8237释放总线;
块传输模式
- 8237获得总线控制权后,连续传送多个字节,每传输一个字节,当前字节计数器减1当前地址寄存器加1或1,直到所要求的字节数传输完(当前字节计数器减至0),8237在EOP引脚上发出结束信号,然后释放总线
请求传输模式
- 在传输过程中,8237要检测DREQ信号(询问外设),当DREQ==0时,8237暂停传输(不释放总线),当DREQ再次==1后,继续进行传输。
级联传输模式
- 多片8237级联时,可以构成主从式DMA系统。级联的方式是把从片的请求线HRQ==>主片的DREQ引脚,主DACK==>从片的HLDA引脚
8237寄存器
8237的初始化编程
1.输出主清除命令
2.写入基地址与现行地址寄存器
3.写入基字节数与现行字节数寄存器
4.写入方式寄存器
5.写入屏蔽寄存器
6.写入控制寄存器
7.写入请求寄存器
若有软件请求,就写入指定通道,便可以开始DMA传送的过程。
若无软件请求,由通道的DREQ启动DMA传送过程
eg. 若要利用通道0,由外设(磁盘)输入32KB的一个数据块,传送至内存8000H开始的区域(增量传送),
采用数据块连续传送的方式,传送完不自动初始化,
外设的DREQ和DACK都为高电平有效。要编程首先要确定端口地址。
地址的低4位以区分8237A的内部寄存器,高4位地址A7~A4,经译码后,连至选片端CS#,假定选中时高4位为7
solution:依据要求,
方式控制字为84H;
屏蔽寄存器的单屏蔽字为00H;
命令字0A0H
1 | OUT 7DH,AL ;输出主清除命令:对端口0DH写入0,使8237复位,70+DH=>复位寄存器 |
1.简述DMA数据传送方式过程、特点和优点。
2.在DMA方式数据传输过程中,是由DMAC控制总线。
3.CPU与外设之间的数据传送控制方式有哪三种?