• 内容讲解

一次DMA数据块传送过程可分为三个阶段:传送前预处理、正式传送、传送后处理,如图7-8所示。

716.gif

1)预处理阶段

CPU执行几条输入输出指令,测试设备状态,向DMA控制器的设备地址寄存器中送入设备号并启动设备,向主存地址计数器中送入起始地址,向字计数器中送入交换数据字个数。在这些工作完成后,CPU继续执行原来的主程序。

当外设准备好发送数据(输入)或接收数据(输出)时,它发出DMA请求,由DMA控制器向CPU发出总线使用权请求HOLD。

2)正式传送阶段

当外围设备发出DMA请求时,CPU在本机器周期执行结束后响应该请求,并使CPU的总线驱动器处于第三态(高阻状态)。之后,CPU与系统总线相脱离,而DMA控制器则接管数据总线与地址总线的控制,并向主存提供地址,于是在主存与外围设备之间进行数据交换。每交换一个字,地址计数器和字计数器加“1”,当字计数器溢出时,DMA操作结束,DMA控制器向CPU发出中断报告。

DMA数据传送是以数据块为基本单位进行的,因此,每次DMA控制器占用总线后,无论是数据输入操作,还是输出操作,都是通过循环来实现的。当进行输入操作时,外围设备的数据(一次一个字或一个字节)传向主存;当进行输出操作时,主存的数据传向外围设备。

3)后处理阶段

一旦DMA的中断请求得到响应,CPU停止主程序的执行,转去执行中断服务程序,完成DMA结束处理工作,这些工作包括校验送入主存的数据是否正确,决定继续DMA传送还是结束,测试传送过程中是否发生错误等等。

基本DMA控制器与系统的连接方式有两种,一种是公用的DMA请求方式,另一种是独立的DMA请求方式。