1.背景介绍
DMA即,direct memory access直接存储器访问,ddr内存与外设相对于cpu的core来说速度是很慢的,在内存复制数据的过程中、或者外设的数据复制等操作中,core无法做其他事情,只能等待数据复制完成才能干其他的。
总结来说:
1.是外设和内存太慢了(相对core来说),cpu的core在数据复制过程中占据了core的资源,
因此设计了一种可以直接进行数据传输的器件,就是DMA,当然DMA的传输也是需要core给指令的。
2.cpu的core给DMA发数据传输指令,DMA执行数据传输,此时cpu可以做其他的事件。
2.DMA-330的框图
通过Amba总线,实现了arm处理器的片内设备的连接,即片内总线,cpu可以作为amba的master控制总线的设备进行数据传输。
先考虑下这个问题
dma如何才能不用cpu可以进行数据传输?
说的简单了就是自己接管amba总线,在dma接管的时候,cpu是无法占用总线的。
现在来分析以上图,可以看见,DMAC是直接与amba的axi和apb接口进行连接,获得amba的接管权限,就可以做数据传输的事了。
2.1 DMA的数据传输方向
dma支持三种数据传输的方向:
1.内存到内存
2.外设到内存
3.内存到外设
如果理解了DMA接管了AMBA总线,那么数据搬移工作便容易理解了。
3.DMA的寄存器
arm供提供了4k的地址供DMA控制器进行使用,主要分为:
1.Control registers 控制寄存器
使用控制寄存器用来控制DMAC
2.DMA channel thread status registers 通道状态寄存器
用来查看dma通道的状态信息
3.AXI and loop counter status registers
4.Debug registers
5.Configuration registers 配置寄存器
6.Component ID registers
4.DMA的指令集
arm为dma控制器提供了相应的指令进行操作,所以dma更像是一个协处理器,只不过它的作用是用来做数据传输用的。
5.参考资料
DDI0424D_dma330_r1p2_trm