2016-06-30 4 views
0

인터럽트 기반 UART IO를 사용하면 CPU 개입없이 데이터 전송이 가능합니다. 이제이 문제를 제어하는 ​​CPU가 아닌 경우 질문은 무엇입니까? DMA 컨트롤러 또는 CPU에서 메모리 버스를 통해 제어를받는 일부 외부 마스터입니까? 적절한 답을 얻지 못했습니다 here. DMA 컨트롤러 인 경우 DMA 및 인터럽트 기반 전송을 다른 것으로 만드는 이유인터럽트 기반 UART IO 용 마스터

+0

* "적절한 답변을 얻지 못했습니다 (http://stackoverflow.com/questions/25318145/dma-vs-interrupt-driven-io/38165400#38165400)"* - FWIW 그 질문에 [답변] (http://stackoverflow.com/questions/25318145/dma-vs-interrupt-driven-io/38165400#38165400)을 추가했습니다. – sawdust

답변

1

정답 인 here을 얻지 못했습니다.
가 DMA를 만들고 다른 전송을 기반 인터럽트 후 어떤 DMA 컨트롤러 인 경우

문제는 잘못된 표현이 있기 때문에 그 질문은, IMO 어떤 좋은 답변을하지 않았다.
사실, 나는이 영역에서 지식/경험이 부족하기 때문에 "인터럽트 구동"의 설명을 이해할 수 없기 때문에 이해하지 못합니다.
"DMA"은 "인터럽트"의 대안이 아닙니다.
대신 그들은 직각 개념이고 두 개념은 모두 함께 사용됩니다..
DMA의 대안은 프로그래밍 된 I/O, 일명 PIO입니다.
인터럽트의 대안은 폴링입니다.

DMA 전송은 거의 항상 DMA 컨트롤러에서 completion interrupt을 사용하여 버퍼 전송이 완료되었음을 CPU에 알립니다.
PIO는 종종 장치로부터의 인터럽트를 사용하여 각 바이트/워드 데이터 전송을 시작합니다. 이를 통해 PIO의 CPU 집약적 특성을 완화 할 수 있습니다. 폴링 된 PIO 전송은 그렇지 않으면 CPU 리소스를 완전히 소모합니다.
그러나 "인터럽트가있는 PIO"는 간단히 "인터럽트"로 참조하는 것이 부정확하고 오해의 소지가 있습니다.

인터럽트 기반 UART IO를 사용하면 CPU 개입없이 데이터 전송이 가능합니다. 이제이 문제를 제어하는 ​​CPU가 아닌 경우 질문은 무엇입니까?

인터럽트의 원인을 지정하지 않았습니다. 따라서 귀하의 질문은 모호합니다.

"인터럽트 기반"은 "UART로부터 인터럽트가있는 PIO"를 가리키는 것으로 가정하면 문제가 전혀 발생하지 않습니다. 이는 전송을 제어하는 ​​CPU이기 때문입니다.
"인터럽트 기반"이 DMA 컨트롤러에서 인터럽트가있는 DMA 전송을 가리키는 것으로 가정하면 이전에 사용자 또는 연결된 질문에서 사용되지 않은 컨텍스트에서이 용어를 사용하고있는 것입니다.

UART의 경우 :
DMA 전송에서 각 바이트는 UART에서 읽혀지고 (UART가 해당 데이터를 사용할 수 있다고 신호를 보내면) DMA 컨트롤러가 메모리에 씁니다. 이 작업을 수행하려면 DMA 컨트롤러를 설정해야합니다. DMA 컨트롤러가이 전송을 감독하는 동안 CPU는 다른 (예를 들어 관련이없는) 명령어 (예 : 다른 프로세스)를 실행합니다.

PIO 전송에서 CPU는 전체 시간을 제어하며 장치에서 읽고 메모리에 쓰는 명령을 실행합니다.

CPU에서 메모리 버스를 제어하는 ​​DMA 컨트롤러 또는 일부 외부 마스터입니까?

메모리 버스는 메모리 컨트롤러에 의해 유지 관리됩니다. 다른 장치는 메모리 버스를 제어하지 못합니다.

실제로 메모리에서 읽거나 메모리에 쓰려면 DMA 전송 중에 메모리에 대한 액세스를 요청하는 DMA 컨트롤러입니다.
또한 버스 마스터 또는 보조 프로세서/GPU와 같이 메모리 액세스를 요청할 수있는 권한있는 장치가 있음에 유의하십시오.
그러나 일반적으로 CPU는 메모리 액세스 우선 순위가 가장 높게 지정됩니다.