DMA是Direct Memory Access的缩写,即直接存储器访问。在计算机系统中,当外部设备(如网卡、硬盘等)要与内存进行数据传输时,可以采用CPU与外部设备之间进行IO操作的方式。但是,这样的方式效率极低,因为CPU的速度远远高于外部设备。因此,通过DMA技术,可以使外部设备可以直接访问内存而不需要经过CPU参与,从而提高系统的效率。
在ARM体系结构中,DMA是用来提高系统性能的关键技术之一。ARM中DMA主要由DMA控制器和DMA驱动程序组成。DMA控制器负责管理数据在内存和外设之间的传输,而DMA驱动程序则负责配置DMA控制器,指定数据传输的源地址、目标地址、传输大小等参数。
在ARM中,DMA可以用于音频数据传输、视频数据传输、网络数据传输等各种场合,可以大大提高系统数据传输的效率,减少CPU的占用率。
在DMA工作中,主要有以下两种模式:
1)Cycle Stealing模式:在CPU闲置的时候,DMA控制器可以占用总线进行数据传输。当CPU开始请求总线的时候,DMA控制器会主动释放总线资源,以便CPU能够正常工作。这种模式使用较为广泛。
2)Burst mode模式:在这种模式下,DMA控制器一次性地进行多个数据传输,这样可以大幅提高传输的效率,但相应地,由于DMA控制器需要占用总线的时间较长,CPU的响应速度会变慢。这种模式适合较大块数据传输时使用,能够大大降低CPU的负载。
在数据传输时,中断和DMA都可以提高系统的效率,但两者之间有很大的不同。
中断是在CPU上下文之间进行切换,中断处理程序必须保存 CPU状态,处理完中断后再恢复 CPU状态,并且中断处理程序通常只能处理一次中断请求。而DMA是通过设置参数来完成数据传输,不需要中断处理程序的参与,而且DMA控制器可以进行多次数据传输。
在实际的应用中,中断和DMA通常会结合使用,即DMA传输完成后会触发一个中断来通知CPU数据传输已经完成,这样可以保证数据的完整性和正确性。