DMA操作的基本方法有哪三种?
(1)周期挪用(CycleStealing)利用CPU不访问存储器的那些周期来实现DMA操作,此时,DMAC可以使用总线而不用通知CPU也不会妨碍CPU的工作。这种方法的关键是如何识别合适的可挪用的周期,以避免同CPU的操作发生重叠。有的CPU能产生一个表示存储器是否正在被使用的信号(例如:M6800的VMA),有的CPtJ则规定在特定状态下(例如Intel8080的T4、T5状态)不访问存储器,此时就可用于实现DMA操作。周期挪用并不减慢CPU的操作,但可能需要复杂的时序电路,而且数据传送过程是不连续的和不规则的。(2)周期扩展使用专门的时钟发生器/驱动器电路,当需要进行DMA操作时,由DMAC发出请求信号给时钟电路,时钟电路把供给CPU‘的时钟周期加宽,而提供给存储器和DMAC的时钟周期不变,这样CPU在加宽时钟周期内操作后不往下进行,而这加宽的时钟周期相当于若干个正常的时钟周期,可用来进行DMA.操作。加宽的时钟周期结束后,CPU仍按正常的时钟继续操作。这种方法会使CPU的处理速度减慢,而且CPU时钟周期的加宽是有限制的。因此用这种方法进行DMA传送,一次只能传送一个字节。(3)CPU停机方式在这种方式下,当DMAC要进行DMA传送时,DMAC向CPU发出DMA请求信号,迫使CPU在现行的总线周期(机器周期)结束后,使其地址总线、数据总线和部分控制总线处于高阻态,从而让出对总线的控制权,并给出DMA响应信号。DMAC接到该响应信号、后,就可以控制总线,进行数据传送的控制工作,直到DMA.操作完成,CPU再恢复对总线的控制权,继续执行被中断的程序。注意,采用这种方法进行的DMA传送期间,CPU处于空闲状态,会降低CPU的利用率,而且会影响CPU对中断(包括不可屏蔽中断)响应和动态RAM的刷新,这是需要加以考虑的。但在实际应用中,这是最常用、最简单的传送方式,大部分DMAC都采用这种方式。