39
DMA-контроллер содержит несколько регистров, доступных центральному
процессору для чтения и записи. Обычно эти регистры задают порт (или канал),
который должен быть использован; направление переноса данных
(чтение/запись); единицу переноса (побайтно/пословно); число байтов, которое
следует перенести; адрес.
Необходимо отметить, что контроллер ПДП используется не только для
передачи данных между
ПУ и памятью, но и из памяти в память, и из ПУ в ПУ.
В идеальном случае режим ПДП совершенно не должен влиять на
действия процессора, но для этого потребуется сложный и дорогой тракт в
основную память вычислительной системы. Поэтому в большинстве систем
используется временное разделение (мультиплексирование) общей системной
шины
между процессором и КПДП.
Разработано две разновидности ПДП: режим без пропусков тактов
микропроцессора и режим с пропуском тактов микропроцессора.
В первом режиме реализации прямой доступ осуществляется без участия
процессора (параллельно микропроцессору). Для этого используются те
интервалы машинных циклов, в течение которых микропроцессор не
обращается к основной памяти. Процессор (или дополнительная схема
)
идентифицирует эти интервалы для КПДП специальным сигналом,
означающим доступность системной шины. Производительность процессора в
этом режиме не уменьшается, но для каждого типа процессора потребуется
свой контроллер ПДП. С другой стороны, сами передачи будут носить
нерегулярный характер ввиду отсутствия у некоторых команд этих интервалов,
что приведет к уменьшению скорости передачи данных
в режиме ПДП.
Во втором способе реализации КПДП полностью ″захватывает″ системную
шину на время передачи, при этом процессор отключается от системной шины
и переходит в режим холостого хода. Таким образом, передачи ПДП
осуществляются путем пропуска тактов процессора в выполняемой программе.
При выполнении передач ПДП содержимое внутренних регистров процессора
не модифицируются, поэтому
его не нужно запоминать в памяти, а затем
восстанавливать, как при обработке прерываний. Выполнение программы
осуществляется сразу после окончания ПДП. Тем не менее, в условиях
интенсивных передач ПДП эффективная производительность процессора
уменьшается.
Обычно блоками ПДП снабжаются сравнительно мощные модели
микроконтроллеров. В основном ПДП используется для взаимодействия памяти
с устройствами ввода-
вывода, которые могут создать большой поток данных:
сетевыми контроллерами, UART, ЦАП и АЦП.
Как правило, блок ПДП программисты встроенных систем, особенно
начинающие, стараются обходить стороной, считая его излишне сложным. На
самом деле, использование ПДП не является более сложным, чем, например,
использование системы прерываний, а эффект от применения ПДП может