DMA(1) 外部DMA请求/应答协议

 

  这里主要讲述4种类型的DMA请求/应答协议。

  

  (1)握手模式

  Handshake模式:DMA完成一次请求后等待Request信号无效,如果Request无效,DMA会无效ACK两个时钟周期,再等待下一次Request。

  在握手模式下,一个单独的DMA请求信号对应一个DMA应答信号。而且在该模式下,一次DMA操作意味着在DMA操作中的一对或不可分的读和写周期。在DMA操作中,总线控制器不能把`总线的使用权分配给其他总线控制者。如果想在DMA操作中响应高优先级的总线控制,则必须用单步模式,单步模式是把一个DMA操作看成是分离的读和写操作周期。

  由nXDREQ产生的DMA请求引起一个字节、一个半字或者一个字被传送出去。在握手模式下,每一个数据的传送都需要DMA请求。

  (2)demand mode 需求模式

  Demand模式:如果DMA完成一次请求后Request仍然有效,那么DMA就认为这是下一次DMA请求,并立即开始下一次的传输。

  (这里应该是有问题:需求模式在一次dma request 后就开始等待下一个 dma request 不采用传统的计数方式,不会霸占总线不放 ,  长时间占用总线是whole mode )

  请求模式表示,只要DMA请求信号有效,DMA传送周期将连续进行。不像完整服务模式,需求模式不允许将总线控制权交给高优先级的总线控制者,即使它在DMA操作中向总线控制器发出请求。也就是说,在需求模式下,DMA垄断总线控制权。

  

  (3)单步模式

  单步模式意味着有两个DMA应答周期,分别为DMA读和写周期。单步模式通常用于测试和调试,因为在读与写之间总线控制权可能会交给其他总线控制者。在nXDACK的非有效区,比如在读与写周期之间,总线控制器将再次评估总线优先级,以决定新的总线控制权。因此,单步模式下的数据传输将慢于握手模式下的数据传输。

  当DMA请求信号变低时,如果没有高优先级的总线请求,则总线通过降低DMA应答信号来表明对DMA操作的总线分配。在DMA应答信号的第一个低电平段,将有一个DMA的读周期。在DMA读周期后,DMA应答信号将有一个上升沿来表示DMA读周期的结束;同时,如果在DMA应答信号上升时DMA请求信号一直为低电平,则表明下面将是DMA写周期。但是如果在DMA应答信号上升时DMA请求信号也为高电平,则DMA写周期将会延迟到新的DMA请求信号被激活。

  (4)whole mode 完整服务模式

  在完整服务模式下,一次DMA请求将产生连续的DMA传输,直到规定的DMA传输数据完成。

  在完整服务模式下,如果DMA传送操作的数量太大,DMA操作长时间占用总线,将引起一些问题,因为其他总线服务将无法进行。为了解决此问题,在完整服务模式下,每传送完一个单元,DMA将释放总线控制权。当DMA释放总线控制权后,其他总线就可以拥有总线控制权;如果其他总线拥有了总线控制权,则在完成该服务后将继续执行剩余的DMA操作,而且不需要再次激活nXDREQ。

 

 

附加:

DMA笔记
1.全服务/单服务
全服务:a.状态3时,DMA原子操作一直被重复到计数器(CURR_TC)变成0.
          b.计数器CURR_TC变成0,清除DMA ACK.
          c.主状态机一直在状态3等待。
          d.DMA ACK 在传输过程中一直有效,直到计数器CURR_TC为0.
          e.DMA ACK 在传输区间被声明后进行原子操作当TC达到0时。
单服务:
     a.状态3时,DMA原子操作仅被执行一次,然后停止,再等待其他的DMA REQ。
          b.原子操作完成清除DMA ACK.
          c.如果另外DMA REQ到来,将重复三个状态。
          d.每个原子传输过程中DMA ACK总是先有效再无效。
     e.DMA ACK 被声明后进行每个原子操作。
         
任何服务,计数器CURR_TC为0时,中断请求信号INT_REQ发出。
 
请求/握手模式对比
请求 ----- 单方 ( 请求 )
握手 ----- 双方 ( 请求 ---- > 应答 )
  
请求模式
    
握手模式
只有XnXDACK无效(高电平)以后,XnXDREQ才能为有效(低电平)
    
XnXDREQ无效,DMA在两个周期内将XnXDACK设无效。XnXDREQ有效则会一直等至XnXDREQ无效。
     一个传输后,XnXDREQ先无效再有效方开始下一传输。
     DMA检测两次XnXDREQ。
 
 一个传输:单服务 --- 原子操作完成;
              全服务 --- 原子操作重复到计数器(CURR_TC)变成0。
单服务原子操作完成、全服务计数器CURR_TC为0时都会清除DMA ACK.
在请求模式,直接至DMA ACK为无效。
不用理会DMA REQ,DMA REQ可以持续也可以变化?
在握手模式, 先致(或等至)DMA REQ无效,然后DMA ACK无效。
只有XnXDACK无效(高电平)以后,XnXDREQ才能为有效(低电平)
 

摘S3C2440芯片手册:

两种模式的差异在其是否等待DACK无效。

在握手模式下,DMA控制器在开始一个新传输前等待无效DREQ。如果DREQ无效,其使得DACK无效并等待另外有效DREQ.

  (DREQ , DACK都对应有相应的引脚和外设相连的,可以看原理图)

在请求模式下,DMA控制器不会等到DREQ无效,其仅将DACK置无效且如果DREQ有效则开始另一个传输。

 

posted on 2016-11-08 14:19  Red_Point  阅读(3658)  评论(0编辑  收藏  举报

导航