打印

基于总线传递数据的2种形式PIO、DMA的解析

[复制链接]
421|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Flower1|  楼主 | 2018-9-17 11:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于总线传递数据的2种形式PIO、DMA的解析



总线上的数据的传递有两种形式。一种为程控输入/输出(PIO)另一种为直接存储器访问(DMA)。


1、PIO

使用PIO时,CPU是主模块,总线上数据的读取由CPU上运行的软件程序直接发起,传递的数据一定进过CPU(如下面的一、二所述)。

一、软件指令或者将已经存放在CPU数据寄存器中的数据发送到目标被控模块;

二、或者将目标被控模块里的一个数据读入,放到CPU的数据寄存器中。


例如:需要将数据从模块A---转移到----模块B,软件将这个任务分解为两个PIO操作

第一步:从模块A读取数据,并存放到CPU的数据寄存器中;

第二步:将存放在CPU数据寄存器中的数据写入到模块B。


2、DMA

由于链接芯片与芯片之间的系统总线的时钟频率比CPU内部的时钟频率要低许多,用PIO读写大量的数据是一种非常低效的方式占用CPU的处理能力。所以需要利用专门的硬件来协助执行,在芯片与芯片之间或者模块与模块之间数据传输。这就是DMA。

此时软件只需要将传输数据要求使用PIO通知DMA硬件,DMA硬件按照要求执行数据的传输。这期间CPU继续进行其他工作。当DMA硬件执行完毕数据的传输任务之后,通过中断信号或这通过向主存储的某个特定地址写入特定的数值,通知软件。


一个DMA硬件通常包括多个DMA通道。每个通道一般用于一对模块之间的数据传输,通道之间相互独立。

DMA描述符用于指定如何传输数据块。一个DMA描述符至少包括数据传输的源地址(SA)、目的地址(DA)、需要传输的数据量(data size)、和每次总线传输的数据量(transfer size)。有些DMA模块要求软件将DMA描述符的数据结构存放在主存储器中,使用这个方法的好处时软件可以十分有效的建立DMA描述符。在DMA执行一个DMA数据传输任务之前,DMA先要用DMA的方法,将存放在CPU主存储的DMA描述符读到DMA模块中。


DMA将一个数据块的传输分为两个步骤。

第一步:从源地址的被控模块读取数据;

第二步:将读取的数据写入目的地址的被控模块。


根据DMA描述符的规定,DMA可以在传输了一个数据块之后,自动的将源地址和目的地址更新到下一个数据块地址,然后DMA开始传输下一个数据块,一直传输完实际要求传输的数量级。假设一个DMA开始传输的数据量是128Byte,每次传输的数据块是16Byte,为了完成这个DMA描述符指定的数据传输,DMA自动进行8次总线读取和8次总线写入。这些传输路径不经过CPU



相关帖子

沙发
Flower1|  楼主 | 2018-9-17 11:50 | 只看该作者
基于总线传递数据的2种形式PIO、DMA的解析

文档1.pdf

127.78 KB

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

623

主题

887

帖子

6

粉丝