Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Io 什么';DMA控制器和I/O处理器之间的区别是什么_Io_Hardware_Dma - Fatal编程技术网

Io 什么';DMA控制器和I/O处理器之间的区别是什么

Io 什么';DMA控制器和I/O处理器之间的区别是什么,io,hardware,dma,Io,Hardware,Dma,给定起始内存地址和字数,DMA控制器在CPU处理其他进程时传输数据。 输入输出处理器也处理给定起始地址和字数的I/O进程。。 (如果我错了,请纠正我) 那么,IOP和DMA控制器在功能上有什么区别呢?DMA是一种硬件模块,能够在外设和内存(UART、SPI、DAC、ADC)或两个不同的内存地址之间传输数据,而不消耗CPU处理时间。通常,configuirng DMA模块涉及设置内存目标地址和源地址,用户还可以配置选项,如:缓冲区数据大小、自动地址增量和循环缓冲区。此外,此类模块在数据传输结束时发

给定起始内存地址和字数,DMA控制器在CPU处理其他进程时传输数据。 输入输出处理器也处理给定起始地址和字数的I/O进程。。 (如果我错了,请纠正我)


那么,IOP和DMA控制器在功能上有什么区别呢?

DMA是一种硬件模块,能够在外设和内存(UART、SPI、DAC、ADC)或两个不同的内存地址之间传输数据,而不消耗CPU处理时间。通常,configuirng DMA模块涉及设置内存目标地址和源地址,用户还可以配置选项,如:缓冲区数据大小、自动地址增量和循环缓冲区。此外,此类模块在数据传输结束时发出IRQ信号

下面是微控制器STM32F373的DMA配置示例。该示例显示了sigma-delta ADC和内存缓冲区之间的DMA配置

DMA_InitTypeDef  DMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
DMA_DeInit(DMA2_Channel3);

/* DISABLE the DMA SDADC1 channel */
DMA_Cmd(DMA2_Channel3, DISABLE);
/* DMA channel SDADC1 Configuration */
DMA_InitStructure.DMA_BufferSize = bufferSize;

DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&SDADC1->JDATAR;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;

DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)memoryAddress;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc;
DMA_InitStructure.DMA_MemoryDataSize =  DMA_MemoryDataSize_HalfWord;

DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

DMA_Init(DMA2_Channel3, &DMA_InitStructure);

/* Avoid interrupt on DMA ENABLE */
DMA_ClearITPendingBit(DMA2_FLAG_TC3);

// Enable DMA2 Channel Transfer Complete interrupt
DMA_ITConfig(DMA2_Channel3, DMA_IT_TC, ENABLE);

/* Enable the DMA channel */
DMA_Cmd(DMA2_Channel3, ENABLE);

关于I/O处理器,我不完全理解你的意思。但我可以说,GPIO硬件模块能够将一般数字输入/输出映射到内存地址,即:I/O I/O有一个内存地址,但实际上读写操作是在外围寄存器中完成的

对于特定于内存的I/O操作(简单的示例指令,如lw$r1、$r2,16,对于MIPS处理器),CPU需要从内存获取数据,以方便I/O操作。因此,CPU必须暂停任何其他操作,并监视内存读/写操作,直到它没有完成。换句话说,只要在没有DMA的情况下进行读/写操作,CPU就会被完全占用。如果处理器在这段时间内空闲,那么处理器可能已经执行了一些其他指令

直接内存访问(DMA): DMA提供了这种功能,可以用最少的CPU干预执行特定于内存的操作。当任何I/O设备需要内存访问时。它向CPU发送DMA请求(以中断的形式)CPU通过向数据总线提供适当的授权信号来启动传输。并将控制传递给DMA控制器,DMA控制器控制其余的数据传输,并将数据直接传输到I/O设备。在此期间,CPU继续执行其他指令。一旦读/写操作完成(或发生任何异常),DMA控制器启动中断并通知处理器读/写操作的状态

通过这种方式也执行读/写操作,CPU在此期间还执行一些其他指令。但是,DMA的初始化仍然需要CPU干预。因此总体性能得到最大化

I/O处理器 您可以将I/O处理器看作是DMA方法的一部分。 通常在大型计算机系统中使用的I/O处理器是一个协处理器,除了传输数据外,还能够执行指令。顺便说一句,协处理器指令系统不同于中央处理器

CPU可以通过初始化基本操作(如启用数据路径和设置参与操作的I/O设备)来执行特定于I/O的程序。然后将任务传输给I/O处理器,然后由I/O处理器执行其余任务,完成后通知处理器。处理器同时执行其他重要指令

I/O处理器本质上是一个小型DMA专用处理器,可执行有限的输入和输出指令,并可由多个外围设备共享

I/O处理器解决了两个问题:

  • 输入和输出的工作由CPU承担。 虽然DMA不需要CPU来进行外设和内存之间的数据交换,但它只减少了CPU的负担。因为在DMA中,输入和输出的初始化仍然由CPU完成
  • 大型计算机系统中高速设备的DMA接口共享问题。大型计算机系统的外围设备太多,以至于必须共享有限的DMA接口(小型计算机系统,如每个设备中的PC机,都分配有DMA高速接口)

DMA控制器也是IOP的一部分吗?DMA控制器并不总是在cpu执行其他操作时进行传输,有时在DMA发生时cpu被保持。这取决于系统。您尚未指定系统。我假设您的问题的答案是基于x86的,并且与I/O和内存接口之间的差异有关。它们是同义词。IOP与DMA控制器是一样的。正如维基百科所告诉你的。它大部分也过时了,就是这样。虽然这是真的,但它根本没有回答“ios和dma控制器之间有什么区别”的问题。所以我在互联网上做了一些研究,读到这只是一个命名问题。DMA和I/O处理器指的是同一件事。这就是我上面的评论:)所以我在互联网上做了一些研究,读到这只是一个命名问题。DMA和I/O处理器指的是同一件事。我能发现的是,DMA控制器的复杂性因体系结构而异。例如:在微控制器体系结构中,DMA只能将数据从外设复制到内存,而不执行任何逻辑,而在特定的面向数据中心的体系结构中,DMA可以有一个小而特定的指令集来查找密钥。