2013-04-24 472 views
3

給定起始內存地址&字數DMA控制器在CPU工作於其他進程時傳輸數據。 的輸入輸出處理過處理給出的起始地址&字數.. I/O處理(糾正我,如果我錯我)DMA控制器和I/O處理器有什麼區別

那麼什麼是IOP & DMA控制器之間在功能上的區別?

+0

而且DMA控制器也是IOP的一部分嗎? – Sach 2013-04-24 19:25:05

+0

dma控制器並不總是在cpu做其他事情時進行傳輸,有時cpu在dma發生時被保存。這取決於系統。你沒有指定系統。我假設你的問題的答案是基於x86的,並且與I/O和內存接口之間的差異有關。 – 2013-04-24 21:43:27

+0

他們是同義詞。 IOP與DMA控制器相同。正如維基百科可以告訴你的。 – 2015-03-23 13:54:58

回答

1

如果是特定於內存的I/O操作(在MIPS處理器的情況下,簡單示例指令如lw $ r1,$ r2,16),CPU需要從內存中獲取數據以方便I/O操作。因此,CPU必須暫停任何其他操作並監視內存READ/WRITE操作,直到它未完成。換句話說,只要正在進行讀/寫操作而沒有DMA即可完全佔用CPU。如果在此期間處理器空閒,則處理器可能執行了其他一些指令。

直接內存訪問(DMA):

DMA提供了此功能以最少的CPU干預進行內存的具體操作。當任何I/O設備需要內存訪問時。它發送一個DMA請求(以中斷的形式)給CPU。 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處理器本質上是一個小型DMA專用處理器,可以執行有限的輸入和輸出指令,並且可以由多個外設共享。

的I/O處理器解決了兩個問題:

  • 輸入和輸出的工作由CPU假定。 儘管DMA不需要CPU來進行外設和內存之間的數據交換,但它只會減輕CPU的負擔。因爲在DMA中,輸入和輸出的初始化仍然由CPU完成。
  • 在大型計算機系統中共享高速設備的DMA接口的問題。大型計算機系統外設太多以至於不得不共享DMA接口Limited(小型計算機系統,例如每個設備中的PC都被分配了DMA高速接口)。
1

DMA是一個硬件模塊,能夠在外設和存儲器(UART,SPI,DAC,ADC)或兩個不同的存儲器地址之間傳輸數據,而不會消耗CPU處理時間。通常,配置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具有內存地址,但實際上讀寫操作是在外設寄存器中完成的。

+0

雖然是真的,但它並不回答「ios和dma控制器之間有什麼區別」的問題。 – 2015-03-23 13:55:35

+0

所以我在互聯網上做了一些研究,並且讀到它只是命名的問題。 DMA和I/O處理器指的是同樣的事情。 – 2015-03-24 19:53:19

+0

這就是我上面評論說的:) – 2015-03-24 19:53:58

相關問題