2013-04-24 2 views
3

시작 메모리 주소 & 워드 카운트 DMA 컨트롤러는 CPU가 다른 프로세스에서 작동하는 동안 데이터를 전송합니다. 입출력 프로세서도 시작 주소 & 단어가 .. 를 계산 주어진 I/O 프로세스를 처리DMA 컨트롤러와 I/O 프로세서의 차이점

그래서 IOP & DMA 컨트롤러 사이의 기능의 차이가 무엇 (I 오류에있어 경우에 저를 정정)?

+0

또한 DMA 컨트롤러는 IOP의 일부입니까? – Sach

+0

dma 컨트롤러는 항상 cpu가 다른 일을하는 동안 전송을하지 않으며, 때때로 dma가 발생하는 동안 cpu가 유지됩니다. 그것은 시스템에 따라 다릅니다. 시스템을 지정하지 않았습니다. 귀하의 질문에 대한 대답은 x86 기반이며 I/O와 메모리 인터페이스의 차이와 관련이 있다고 가정합니다. –

+0

동의어입니다. IOP는 DMA 제어기와 동일한 것입니다. 위키 백과에서 당신에게 말할 수있는 것처럼 –

답변

1

메모리 관련 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 프로세서는 본질적으로 제한된 입출력 명령을 실행할 수있는 작은 DMA 전용 프로세서이며 여러 주변 장치에서 공유 할 수 있습니다. 입출력 작업이 CPU에 의해 가정

  • :

    는 I/O 프로세서는 두 가지 문제를 해결한다. DMA는 주변 장치와 메모리 간의 데이터 교환을 위해 CPU를 필요로하지 않지만 CPU의 부담 만 줄입니다. DMA에서는 입출력의 초기화가 CPU에 의해 수행되기 때문에.

  • 대형 컴퓨터 시스템에서 고속 장비의 DMA 인터페이스를 공유하는 문제. 대형 컴퓨터 시스템 주변 장치가 너무 많아 DMA 인터페이스를 공유해야했습니다. 제한 사항 (각 장치의 PC와 같은 소형 컴퓨터 시스템에는 DMA 고속 인터페이스가 할당되었습니다).
1

DMA는 CPU 처리 시간을 낭비하지 않고 주변 장치와 메모리 (UART, SPI, DAC, ADC) 또는 두 개의 다른 메모리 주소간에 데이터를 전송할 수있는 하드웨어 모듈입니다. 일반적으로 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

사실,이 질문에 대한 대답은 "ios와 dma 컨트롤러의 차이점은 무엇입니까?" –

+0

그래서 나는 인터넷에서 약간의 조사를했고 그것은 단지 명명법의 문제라는 것을 읽었습니다. DMA 및 I/O 프로세서는 동일한 것을 참조합니다. –

+0

그건 내 위의 의견을 말합니다 : –