DMA即直接存储器存取(Direct Memory Access).用DMA传输数据时,在高速I/O设备与存储器之间直接开辟数据传输通道,此时CPU不再直接参与数据交换,而是通过DMA控制器来管理。
DMA数据传输示意如下:
传送原理
DMA传输的过程为:
- 首先由CPU向DMA控制器布置数据传输任务,并启动外设,外设准备好数据后通过I/O接口向DMA控制器发送DRQ信号,表示外设已经准备好数据,请求进行数据传输。
- DMA控制器收到DRQ信号后进行优先级的判别和屏蔽位的检测,若外设的DRQ请求获得允许,DMA控制器向CPU发送HRQ信号,请求使用总线。
- CPU在当前指令执行完后向DMA控制器发送HLDA信号,同时CPU让出总线。
- DMA控制器收到HLDA信号后通过接口向发送DRQ请求信号的外设发送DACK信号,表示其DMA请求已经获得允许。
- 外设收到DACK信号后,开始数据的传输,并以中断的方式通知CPU,传输结果由CPU负责处理。
传输示意图如下:
工作方式
根据DMA控制器对总线的控制方式不同,其数据传送一般有以下四种方式:
- 单字节传送:每次DMA请求只传送一个字节数据,每传送完一个字节,DMA控制器中的字节计数寄存器的值减1,当前地址寄存器加1或减1,然后撤除DMA控制器对CPU的请求信号,释放总线返回给CPU,这样CPU至少可以获得一个总线周期。
- 数据块传送:每次DMA请求获得CPU响应后,DMA控制器就连续占用多个总线周期,传送一个数据块,等到规定长度的数据块传完后或外部作用要求强行结束DMA传送时,才撤除DMA请求信号,释放总线。
- 请求传送:请求传送方式和数据块传送方式类似,每次传送也可以传送多个字节,但是在每传送完一个字节后,DMA控制器都要检测由I/O接口发出的DMA请求信号是否有效,一旦DMA请求无效就释放总线;如果一组数据没传送完毕,释放总线后,DMA控制器仍然继续检测DMA请求端,一旦DMA请求有效,马上恢复DMA传送。
- 级联传送:从片DMA控制器的总线请求信号与主片的DMA请求信号DREQ相连,从片的总线请求允许信号HLDA与主片的DMA请求允许信号DACK相连,主片的总线请求信号与CPU的HOLD相连,主片总线请求允许信号HLDA与CPU的HLDA相连。
DMA控制器的功能如下:
- 响应外设的请求,向CPU发出总线请求信号。
- CPU放弃对总线的控制时,DMA控制器应能接管总线控制权。
- 获得总线控制权后,要往地址总线发送地址信号。
- DMA期间,应能发出读写控制信号。
- 决定本次传送的字节数,判断本次DMA传送是否结束。
- DMA过程结束时,将总线控制权归还给CPU。
其结构如下: