DMA控制器和I/O处理器有什么区别

问题描述 投票:0回答:3

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

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

io hardware dma
3个回答
3
投票

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

直接内存访问(DMA):

DMA 提供了这种功能,以最少的 CPU 干预来执行内存特定操作。当任何 I/O 设备需要内存访问时。它向CPU发送DMA请求(以中断的形式)。

CPU 通过向数据总线提供适当的授权信号来启动传输。并将控制权传递给 DMA 控制器,后者控制其余的数据传输并将数据直接传输到 I/O 设备。在此期间,CPU 继续执行其他指令。一旦读/写操作完成(或发生任何异常),DMA 控制器就会启动中断并通知处理器有关读/写操作的状态。

这样

同时进行读/写操作,同时CPU还执行一些其他指令。然而,DMA 的初始化仍然需要 CPU 干预。 因此整体性能最大化。

I/O处理器

您可以按照 DMA 方法来思考 I/O 处理器。

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高速接口)。

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

下面有一个微控制器STM32F373的DMA配置示例。该示例显示了 Σ-Δ 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具有内存地址,但读写操作实际上是在外设寄存器中完成的。


0
投票
没有人能够正确区分它们,所有的都是书本上的理论

© www.soinside.com 2019 - 2024. All rights reserved.