2、8237A的工作过程和时序
  1) 典型的工作过程和时序

  在一个多主系统当中,每个时刻系统中只能有一个总线主设备。当CPU控制总线时,DMA处在空闲状态,相应的时钟周期为空闲周期(SI)。DMA控制总线以后,DMA进入有效状态,相应的时钟周期为有效周期(S1~4)。从DMA请求总线到CPU释放总线的过程为总线权交换周期(S0)。
  8237A可以同时连接4个I/O设备。在空闲周期,DMA总是不断采样DREQ和CS#,如果CS#有效,表示8237A处于从属(slave)状态,CPU正在对8237初始化或者正在从8237读取状态寄存器数据。初始化以后,当某个I/O设备发出DMA传送请求,便置DREQi为有效电平。8237A采样到DREQ的有效电平以后,在下一个时钟周期SI发出总线请求HRQ。之后,8237A进入总线交换周期S0。前面说过CPU在每个时钟周期都要采样HOLD信号,一旦采样到HOLD为有效电平,便在TI或T4释放总线,驱动HLDA信号为有效电平。由此可见,总线交换周期S0在2~4个时钟周期之间。当DMA采样到HLDA信号有效,标志着传送的开始,在下一个时钟周期,进入DMA有效周期。
  当8237A控制存储器和I/O设备之间的数据传送时,第一个字节的传送通常需要4个时钟周期(S1~S4),以后的字节传送仅仅需要3个时钟周期(S2~S4)。这是因为DMA的数据线和高8位地址线是分时复用的,在传送第一字节数据时,S1为地址周期,DB7~ DB0上出现的是要传送数据的源或目存储器地址,S2~S4为数据周期。而在传送第二个字节的时候,DMA的高8位地址通常不会变化,因此不发生地址周期而直接进入数据周期。当然在每传送一个字节数据,地址不断增量的过程中,如果发生低位地址向高位地址的进位,高位地址产生了变化,对应数据字节的传送仍然需要4个时钟周期。
  在S1状态,地址使能信号AEN有效,该信号在DMA周期将一直保持有效状态, AEN通常被用做DMA地址锁存、缓冲器的选通信号以及CPU地址锁存、缓冲器在DMA周期的"封锁"信号。在地址周期当中,DB7~ DB0上出现高位地址,地址锁存信号ADSTB同时变为有效,可以利用ADSTB的后沿将高8位地址锁存在与DMA配合使用的地址锁存器当中。在S1周期,低位地址信号出现在A7~A0上,低位地址仅仅持续一个字节传送周期。S1开始,DMA应答信号DACK为有效状态,该有效状态也将持续整个DMA周期。DACK一般用做I/O端口的片选择信号。每个DMA通道控制的存储器与一个I/O端口之间的数据传送,DACK所连接的I/O端口是该通道唯一的源或目标外设。从以上分析可以看出,在S1状态,8237A将要传送数据的源和目标地址准备就绪。
  从S2开始是数据传送周期,读、写信号成对地变为有效。当然,如果一个信号是MEMR#,另一个一定是IOW#;一个是IOR#,另一个一定是MEMW#。这就意味着数据被8237A从源地址读出的同时,便被写入目标地址。由时序图可以看出,写信号的开始时间晚于读信号一个时钟周期。在一种叫做扩展写的方式中,可以令写信号提前一个时钟周期有效,用来适应不同速度的设备。读和写信号于S4的后半周期结束,表示一个字节传送完毕。下一个时钟周期将从S2开始,在3个时钟周期内完成第二字节数据的传送。这是因为S1状态主要用来锁存高位地址,而DMA的传送过程是一个存储器地址连续的过程,在一定的地址范围内,高8位地址保持不变,所以只需要3个时钟周期。只有在发生低8位地址值向高8位进位的时候,才向第一个DMA周期那样,需要4个时钟周期完成一个字节的传送。如此往复,直至数据块传送完毕。
  在数据传送的过程中,8237A会不断检测DMA请求信号DERQ的状态,在某些工作方式下,需要一直保持DREQ为有效状态,一旦DREQ变为无效,8237A便会在当前传送周期的末尾,即T4状态撤除对CPU的总线请求信号HRQ,CPU会立即作出回应使HLDA变为无效,并占据总线。DMA则进入空闲周期,使AEN便为无效的低电平,并使地址、数据和控制信号变为高阻状态。当数据块传送完毕,内部过程结束信号INT EOP#输出负脉冲,该信号可以作为中断请求,用来通知CPU,DMA传送结束。如果外部的过程终止信号INT EOP#通过EOP#引脚送入8237A,那么,在当前字节传送完毕后,8237A立即终止传送,进入无效状态。