UART IO на основе прерываний позволяет передавать данные без вмешательства ЦП. Теперь вопрос, если не ЦП, кто этим управляет? Это контроллер DMA или какой-то внешний мастер, который получает контроль над шиной памяти от процессора. Не получил правильного ответа здесь. Если это контроллер DMA, то что отличает DMA и передачу на основе прерываний?
Мастер для прерываний на основе UART IO
Ответы (1)
Не получил правильного ответа здесь .
Если это контроллер прямого доступа к памяти тогда что отличает DMA и передачу на основе прерываний
На этот вопрос не было хороших ответов, IMO, потому что в вопросе была неверная формулировка.
На самом деле я не понимаю его описания "управляемого прерываниями", потому что оно не имеет смысла, и это не потому, что мне не хватает знаний/опыта в этой области.
"DMA" не является альтернативой "прерываниям".
Вместо этого они являются ортогональными понятиями, и оба понятия обычно используются вместе.
Альтернативой DMA является программируемый ввод-вывод, также известный как PIO.
Альтернативой прерываниям является опрос.
Передачи DMA почти всегда используют completion interrupt
(от контроллера DMA) для уведомления ЦП о завершении передачи буфера.
PIO часто использует прерывание (от устройства) для инициации передачи каждого байта/слова данных. Это помогает смягчить характер PIO, интенсивно использующий ЦП. В противном случае передача PIO по запросу полностью потребляла бы ресурсы ЦП.
Но называть «PIO с прерываниями» просто «прерываниями» было бы неточным и вводящим в заблуждение.
UART IO на основе прерываний позволяет передавать данные без вмешательства ЦП. Теперь вопрос, если не ЦП, кто этим управляет?
Вы не указали источник прерывания; поэтому ваш вопрос неоднозначен.
Если предполагается, что "на основе прерывания" подразумевается "PIO с прерыванием от UART", то вопрос вообще не имеет смысла, поскольку именно ЦП управляет передачей данных.
Если предполагается, что "на основе прерываний" речь идет о передаче DMA с прерываниями от контроллера DMA, то вы используете эти термины в контексте, ранее не использовавшемся в вашем или связанных вопросах.
Для чтения UART:
При передаче DMA каждый байт считывается из UART (когда UART сигнализирует о доступности данных) и записывается в память контроллером DMA. Контроллер прямого доступа к памяти должен быть настроен для выполнения этой задачи. Пока контроллер прямого доступа к памяти наблюдает за этой передачей, ЦП будет выполнять другие (предположительно несвязанные) инструкции (например, для другого процесса).
При передаче PIO ЦП все время находится под контролем, выполняя инструкции для чтения с устройства и записи в память.
Это контроллер DMA или какой-то внешний мастер, который получает контроль над шиной памяти от процессора.
Шина памяти обслуживается контроллером памяти. Ни одно другое устройство не получает управление шиной памяти.
Для фактического чтения или записи в память именно контроллер DMA запрашивает доступ к памяти во время передачи DMA.
Обратите внимание, что существуют привилегированные устройства, такие как мастер шины или сопроцессор/графический процессор, которые также могут запрашивать доступ к памяти. .
Но ЦП обычно назначается наивысший приоритет для доступа к памяти.