0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

MCU开发加油站 2018-01-24 10:48 次阅读

总线上的数据的传递有两种形式。一种为程控输入/输出(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硬件执行完毕数据的传输任务之后,通过中断信号或这通过向主存储的某个特定地址写入特定的数值,通知软件。
基于总线传递数据的2种形式PIO、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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    7017

    浏览量

    89010
  • 总线
    +关注

    关注

    10

    文章

    2881

    浏览量

    88076
  • dma
    dma
    +关注

    关注

    3

    文章

    561

    浏览量

    100572
  • PIO
    PIO
    +关注

    关注

    0

    文章

    18

    浏览量

    6205

原文标题:总线的两种数据传递形式:PIO、DMA

文章出处:【微信号:mcugeek,微信公众号:MCU开发加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    图文并茂解析stm32 DMA

    总线上。DMA总共有7个通道,各个通道的DMA映射关系如下:外设的事件连接至相应DMA通道,每个通道均可以通过软件触发实现存储器内部的DMA
    发表于 02-12 15:42

    请问DMA传输数据的过程是什么?

    网上有说DMA内存到外设间传输数据的过程为:1、内存 到 外设2、内存 到 DMAC 到 外设3、内存 到 数据总线
    发表于 01-30 06:36

    ISA总线的标准DMA技术在Linux中的实现

    1.DMA概述   DMA是外设与主存之间的一种数据传输机制。一般来说,外设与主存之间存在两种数据传输方法:(1)Pragrammed I/O(PI
    发表于 07-01 08:10

    串口DMA+中断的形式如何接收不定长的数据

    串口DMA+中断的形式如何接收不定长的数据
    发表于 12-08 06:07

    DMA工作原理与常用函数解析

    【嵌入式系统】DMA工作原理与常用函数解析1、DMA基本原理直接存储器访问通道(DMA, Direct Memory Access)用来提供在外设和存储器之间或者存储器和存储器之间的高
    发表于 12-16 07:15

    DMA可以传递多少数据

    DMA有什么用? 有多少个DMA资源?DMA可以传递多少数据
    发表于 02-14 07:46

    体验紫光PCIE之DMA读写/PIO内存读写TLP解析

    1.1 PIO内存读写操作TLP解析 PCIE有三空间——内存空间、IO空间、配置空间,其中内存空间是目前PCIE设备常用的空间,IO空间是为了兼容以前的PCI设备(PCIE设备几乎不用IO空间了
    发表于 11-17 15:08

    基于Linux嵌入式系统的ISA总线DMA的实现

      1.DMA概述   DMA是外设与主存之间的一种数据传输机制。一般来说,外设与主存之间存在两种数据传输方法:(1)Pragrammed I/O(
    发表于 08-27 15:37 557次阅读

    ISA总线DMA技术

    DMA是外设与主存之间的一种数据传输机制。一般来说,外设与主存之间存在两种数据传输方法:(1)Pragrammed I/O(PIO)方法
    发表于 05-14 10:04 3527次阅读

    基于Linux的ISA总线DMA的实现

    DMA是外设与主存之间的一种数据传输机制。一般来说,外设与主存之间存在两种数据传输方法:(1)Pragrammed I/O(PIO)方法,也即由CPU通过内存读写指令或I/O指令来持续
    发表于 11-14 17:44 1306次阅读

    基于Linux嵌入式系统的ISA总线DMA的实现

    1.DMA概述 DMA是外设与主存之间的一种数据传输机制。一般来说,外设与主存之间存在两种数据传输方法:(1)Pragrammed I/O(PIO
    发表于 12-07 19:13 377次阅读

    I2C总线物理拓扑结构_I2C总线协议解析

    I2C 总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序的控制,来 产生I2C
    的头像 发表于 09-24 14:12 6187次阅读
    I<b class='flag-5'>2</b>C<b class='flag-5'>总线</b>物理拓扑结构_I<b class='flag-5'>2</b>C<b class='flag-5'>总线</b>协议<b class='flag-5'>解析</b>

    如何将QCC5127的PIO2作为普通PIO口使用

      本文介绍如何将QCC5127的PIO2作为普通PIO口使用。猜测:该方法除了适用于PIO2,应该也同样适用于PIO32、PIO34、
    的头像 发表于 01-18 13:48 3741次阅读
    如何将QCC5127的<b class='flag-5'>PIO2</b>作为普通<b class='flag-5'>PIO</b>口使用

    总线数据传递形式PIODMA介绍资料下载

    电子发烧友网为你提供两总线数据传递形式PIO
    发表于 04-19 08:46 4次下载
    两<b class='flag-5'>种</b><b class='flag-5'>总线</b><b class='flag-5'>数据</b>两<b class='flag-5'>种</b><b class='flag-5'>传递</b><b class='flag-5'>形式</b>:<b class='flag-5'>PIO</b>、<b class='flag-5'>DMA</b>介绍资料下载

    基于STM32F407的DMA解析-ADC单通道DMA读取数据

    现场的过程,通过硬件为 RAM 与 I/O 设备开辟一条直接传送数据的通路,能使 CPU 的效率大为提高。 STM32F407ZGT6 有 2DMA 控制器(DMA1 和
    发表于 11-25 09:51 5次下载
    基于STM32F407的<b class='flag-5'>DMA</b><b class='flag-5'>解析</b>-ADC单通道<b class='flag-5'>DMA</b>读取<b class='flag-5'>数据</b>