Direct Memory Access

CPU的处理速度远快于内存,硬盘的读写速度。同时由CPU搬运数据也是很低效的,无论是程序控制方式还是中断控制方式,数据的传输都必须经过CPU,例如将一个字节的数据从地址A搬运到地址B,则要将数据存在寄存器中,然后在将其写到地址B。

为了不让CPU的资源浪费在等待读写完成中,引入了DMA。它不仅能够提高数据吞吐量而且减轻了CPU的负载,提高了系统的性能。

在传输过程中不需要CPU介入,但是在DMA开始和结束时需要CPU进行相关设置(源地址、目的地址、传输长度)和校验。这样就实现了CPU与DMA的并行操作,提高了CPU利用率。其拷贝数据的速度也要快于CPU介入的方式(CPU需要从来源把每一片段的数据复制到寄存器,然后在把他们再次写回到新的地方)。

DMA控制器是内存储器同外设之间进行高速数据传送时的硬件控制电路,是一种实现直接数据传送的专用处理器,它必须能取代在程序控制传送中由CPU和软件所完成的各项功能。它的主要功能是:

  • DMAC同外设之间有一对联络信号线--外设的DMA请求信号DREQ以及 DMAC向外设发出的DMA响应信号DACK;(如下图)
  • DMAC在接收到DREQ后,同CPU之间也有一对联络信号线--DMAC向CPU 发出总线请求信号(HOLD或BUSRQ),CPU在当前总线周期结束后向DMAC发出总线响应信号(HLDA或BUSAK),DMAC接管对总线的控制权,进入DMA操作方式;
  • 能发出地址信息,对存储器寻址,并修改地址指针,DMAC内部必须有能自动加1或减1的地址寄存器;
  • 能决定传送的字节数,并能判断DMA传送是否结束。DMA内部必须有能自动减1的字计数寄存器,计数结束产生终止计数信号;
  • 能发出DMA结束信号,释放总线,使CPU恢复总线控制权;
  • 能发出读、写控制信号,包括存储器访问信号和I/O访问信号。DMAC内部必须有时序和读写控制逻辑。

Direct Memory Access_第1张图片

DMA的工作方式

  1. CPU停止访问总线,全部交由DMAC控制,直到DMAC放弃总线。
    这种方式可能会造成系统相应不及时,浪费CPU资源的情况
  2.  周期挪用
    DMAC不全部占用总线,只是利用CPU不访问存储器时实现DMA操作,例如CPU在进行浮点运算或者乘除法时,总线是空闲的。
  3. CPU和DMA交替使用总线
     

参考文档:

ZYNQ中DMA与AXI4总线-DMA简介 | 电子创新网赛灵思社区

https://blog.csdn.net/wuyongpeng0912/article/details/46634931?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

你可能感兴趣的:(DMA,stm32)