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

时间:2013-04-24 19:18:59

标签: io hardware dma

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

那么IOP和amp;之间的功能有何不同? DMA控制器?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

直接内存访问(DMA):

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

这样也会执行读/写操作,CPU也会在此期间执行其他指令。但是,DMA的初始化仍然需要CPU干预。因此整体性能最大化。

I / O处理器

您可以认为I / O处理器符合DMA方法。 通常用于大型计算机系统的I / O处理器是一个协处理器,除了传输数据外,还能够执行指令。顺便说一下,协处理器指令系统不同于中央处理器。处理单位。

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

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

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

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