Io 什么';DMA控制器和I/O处理器之间的区别是什么
给定起始内存地址和字数,DMA控制器在CPU处理其他进程时传输数据。 输入输出处理器也处理给定起始地址和字数的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模块涉及设置内存目标地址和源地址,用户还可以配置选项,如:缓冲区数据大小、自动地址增量和循环缓冲区。此外,此类模块在数据传输结束时发
那么,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高速接口)