1.2.8 Контроллер прямого доступа к памяти
Обмен
данными
микропроцессора
с
медленнодействующими
периферийными устройствами (ПУ) обычно организуется по прерываниям или
по программному опросу. Однако при передаче между основной и внешней
памятью микро-ЭВМ больших блоков данных (десятки байт и более)
производительность процессора в этих режимах является недостаточной.
Скорость передачи данных в режиме программного ввода-вывода
ограничивается только процессором. Поэтому для передачи данных между
устройствами внешней памяти и ОЗУ разработан специальный метод передачи
данных без участия процессора, получившего название прямого доступа к
памяти (Direct Memory Access, DMA). Аппаратные средства реализации канала
ПДП называются контроллером прямого доступа к памяти (КПДП).
39
DMA-контроллер содержит несколько регистров, доступных центральному
процессору для чтения и записи. Обычно эти регистры задают порт (или канал),
который должен быть использован; направление переноса данных
(чтение/запись); единицу переноса (побайтно/пословно); число байтов, которое
следует перенести; адрес.
Необходимо отметить, что контроллер ПДП используется не только для
передачи данных между ПУ и памятью, но и из памяти в память, и из ПУ в ПУ.
В идеальном случае режим ПДП совершенно не должен влиять на
действия процессора, но для этого потребуется сложный и дорогой тракт в
основную память вычислительной системы. Поэтому в большинстве систем
используется временное разделение (мультиплексирование) общей системной
шины между процессором и КПДП.
Разработано две разновидности ПДП: режим без пропусков тактов
микропроцессора и режим с пропуском тактов микропроцессора.
В первом режиме реализации прямой доступ осуществляется без участия
процессора (параллельно микропроцессору). Для этого используются те
интервалы машинных циклов, в течение которых микропроцессор не
обращается к основной памяти. Процессор (или дополнительная схема)
идентифицирует эти интервалы для КПДП специальным сигналом,
означающим доступность системной шины. Производительность процессора в
этом режиме не уменьшается, но для каждого типа процессора потребуется
свой контроллер ПДП. С другой стороны, сами передачи будут носить
нерегулярный характер ввиду отсутствия у некоторых команд этих интервалов,
что приведет к уменьшению скорости передачи данных в режиме ПДП.
Во втором способе реализации КПДП полностью ″захватывает″ системную
шину на время передачи, при этом процессор отключается от системной шины
и переходит в режим холостого хода. Таким образом, передачи ПДП
осуществляются путем пропуска тактов процессора в выполняемой программе.
При выполнении передач ПДП содержимое внутренних регистров процессора
не модифицируются, поэтому его не нужно запоминать в памяти, а затем
восстанавливать, как при обработке прерываний. Выполнение программы
осуществляется сразу после окончания ПДП. Тем не менее, в условиях
интенсивных передач ПДП эффективная производительность процессора
уменьшается.
Обычно блоками ПДП снабжаются сравнительно мощные модели
микроконтроллеров. В основном ПДП используется для взаимодействия памяти
с устройствами ввода-вывода, которые могут создать большой поток данных:
сетевыми контроллерами, UART, ЦАП и АЦП.
Как правило, блок ПДП программисты встроенных систем, особенно
начинающие, стараются обходить стороной, считая его излишне сложным. На
самом деле, использование ПДП не является более сложным, чем, например,
использование системы прерываний, а эффект от применения ПДП может
40
разгрузить центральный процессор и увеличить производительность
контроллера.
Do'stlaringiz bilan baham: |